File size: 2,532 Bytes
d260382
cb249ff
d260382
cb249ff
186714c
78fe5ad
 
 
 
281c0ae
d260382
 
a741062
78fe5ad
d260382
 
a741062
cb249ff
78fe5ad
 
d260382
 
 
 
 
 
 
 
 
186714c
 
 
 
d260382
78fe5ad
186714c
 
 
 
78fe5ad
186714c
78fe5ad
 
 
 
 
 
 
 
186714c
78fe5ad
186714c
 
d260382
 
186714c
 
 
d260382
186714c
 
 
 
 
 
 
d260382
186714c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from sentence_transformers import SentenceTransformer
from pinecone import Pinecone
import json
import gradio as gr
import os
import openai

# استفاده از متغیر محیطی 'openai' برای کلید API
openai.api_key = os.getenv("openai")

# بارگذاری مدل embedding
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# بارگذاری داده (اختیاری)
with open("tiyam_qa_data.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# اتصال به Pinecone
pc = Pinecone(api_key="YOUR_PINECONE_API_KEY")  # کلید خودت رو اینجا بگذار
index = pc.Index("tiyam-chat")

def retrieve_answer(query, threshold=0.65, top_k=1):
    query_embedding = model.encode([query])[0]
    result = index.query(vector=query_embedding.tolist(), top_k=top_k, include_metadata=True)

    if result['matches'] and result['matches'][0]['score'] > threshold:
        metadata = result['matches'][0]['metadata']
        return metadata.get('answer', 'پاسخ یافت نشد')
    else:
        return None

def generate_human_response(context_text):
    if not context_text:
        return "متأسفم، پاسخ دقیقی برای این سوال نداریم. لطفاً با ما تماس بگیرید."

    prompt = (
        f"این متن پاسخ سوال مشتری است: \"{context_text}\".\n"
        "لطفاً یک پاسخ کوتاه، رسمی و کاملاً مختصر و مفید به زبان فارسی تولید کن که فقط بر اساس همین متن باشد و هیچ اطلاعات اضافی نده."
    )

    try:
        response = openai.ChatCompletion.create(
            model="gpt-4",
            messages=[
                {"role": "system", "content": "شما یک پاسخگوی رسمی شرکت هستید."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.2,
            max_tokens=100,
        )
        return response['choices'][0]['message']['content'].strip()
    except Exception as e:
        return "خطا در پردازش درخواست."

def chat_interface(question):
    answer = retrieve_answer(question)
    final_answer = generate_human_response(answer)
    return final_answer

demo = gr.Interface(
    fn=chat_interface,
    inputs="text",
    outputs="text",
    title="چت‌بات تیام",
    description="سؤالات خود را از آژانس دیجیتال مارکتینگ تیام بپرسید."
)

if __name__ == "__main__":
    demo.launch()