diginoron commited on
Commit
e1de535
·
verified ·
1 Parent(s): c036b5f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -26
app.py CHANGED
@@ -1,48 +1,65 @@
 
1
  import gradio as gr
2
  from sentence_transformers import SentenceTransformer
3
- from pinecone import Pinecone
4
  from transformers import pipeline
5
- import json
6
 
7
- # پیکربندی اتصال Pinecone
8
- api_key = "pcsk_6p6AmJ_Qua4tQN69badNHEGZTj3tt5Bd7LiyiDGcXDj92LxSaBzK2ypYxTRx2rafTEJhjL"
9
- index_name = "tiyam-chat"
10
- region = "us-east-1"
11
 
12
- # اتصال به Pinecone
13
- pc = Pinecone(api_key=api_key)
14
- index = pc.Index(index_name)
15
 
16
- # مدل embedding برای بازیابی
17
- embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
18
-
19
- # مدل زبانی برای تولید پاسخ طبیعی
20
  generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa")
21
 
22
- # تابع چت RAG
 
 
 
 
23
  def rag_chatbot(message, history):
24
- # مرحله 1: تبدیل سؤال به بردار
25
- query_vector = embedder.encode(message).tolist()
 
 
26
 
27
- # مرحله 2: جستجو در Pinecone
 
28
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
29
- context = "\n".join([match.metadata.get("پاسخ", "") for match in result.matches])
30
 
31
- # مرحله 3: ساخت پرامپت ترکیبی
32
- prompt = f"سؤال: {message}\nاطلاعات:\n{context}\nپاسخ:"
 
 
 
33
 
34
- # مرحله 4: تولید پاسخ طبیعی
 
 
 
 
 
 
 
 
 
 
35
  response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
36
  answer = response.split("پاسخ:")[-1].strip()
37
 
 
 
 
38
  return answer
39
 
40
- # رابط Gradio
41
- demo = gr.ChatInterface(
42
  fn=rag_chatbot,
43
  title="🤖 چت‌بات هوشمند تیام (نسخه RAG)",
44
- description="پاسخ‌گویی ترکیبی با داده‌های شرکت و تولید متنی هوشمند",
45
- theme="soft"
46
  )
47
 
48
- demo.launch()
 
1
+ import os
2
  import gradio as gr
3
  from sentence_transformers import SentenceTransformer
 
4
  from transformers import pipeline
5
+ from pinecone import Pinecone, ServerlessSpec
6
 
7
+ # بارگذاری مقادیر محرمانه
8
+ PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY")
9
+ INDEX_NAME = os.environ.get("INDEX_NAME")
 
10
 
11
+ # مدل embedding
12
+ embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
 
13
 
14
+ # مدل زبانی
 
 
 
15
  generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa")
16
 
17
+ # اتصال به پایگاه Pinecone
18
+ pc = Pinecone(api_key=PINECONE_API_KEY)
19
+ index = pc.Index(INDEX_NAME)
20
+
21
+ # تابع اصلی RAG
22
  def rag_chatbot(message, history):
23
+ # پاسخ‌های ساده
24
+ greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"]
25
+ if message.strip() in greetings:
26
+ return "سلام! چطور می‌تونم کمکتون کنم؟ 😊"
27
 
28
+ # بردارگیری
29
+ query_vector = embedder.encode(message).tolist()
30
  result = index.query(vector=query_vector, top_k=3, include_metadata=True)
 
31
 
32
+ # ساخت context از نتایج
33
+ context = "\n".join([match['metadata'].get("پاسخ", "") for match in result['matches']])
34
+
35
+ if not context.strip():
36
+ return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید."
37
 
38
+ # ساخت پرامپت دقیق
39
+ prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده.
40
+ اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم.
41
+
42
+ اطلاعات:
43
+ {context}
44
+
45
+ سؤال: {message}
46
+ پاسخ:"""
47
+
48
+ # تولید پاسخ
49
  response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text']
50
  answer = response.split("پاسخ:")[-1].strip()
51
 
52
+ if len(answer) < 3:
53
+ return "متأسفم، پاسخ مشخصی برای این سوال ندارم."
54
+
55
  return answer
56
 
57
+ # رابط چت
58
+ chat_ui = gr.ChatInterface(
59
  fn=rag_chatbot,
60
  title="🤖 چت‌بات هوشمند تیام (نسخه RAG)",
61
+ description="پاسخ‌گویی ترکیبی با داده‌های شرکت + تولید متن طبیعی هوشمند",
62
+ theme="soft",
63
  )
64
 
65
+ chat_ui.launch()