Spaces:
Sleeping
Sleeping
File size: 3,011 Bytes
10ed581 d260382 cb249ff 78fe5ad 10ed581 78fe5ad 10ed581 78fe5ad 281c0ae d260382 a741062 78fe5ad d260382 a741062 10ed581 cb249ff 10ed581 d260382 186714c d260382 78fe5ad 186714c 78fe5ad 186714c 78fe5ad 186714c 78fe5ad 10ed581 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 71 72 73 74 75 76 77 78 79 80 81 |
import os
import json
import gradio as gr
import openai
from sentence_transformers import SentenceTransformer
import pinecone
# بارگذاری کلید OpenAI از متغیر محیطی
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
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
PINECONE_ENVIRONMENT = os.getenv("PINECONE_ENVIRONMENT", "us-west1-gcp")
PINECONE_INDEX_NAME = os.getenv("PINECONE_INDEX_NAME", "tiyam-chat")
# اتصال به Pinecone
pinecone.init(api_key=PINECONE_API_KEY, environment=PINECONE_ENVIRONMENT)
# اگر ایندکس وجود نداشت بساز
if PINECONE_INDEX_NAME not in pinecone.list_indexes():
pinecone.create_index(PINECONE_INDEX_NAME, dimension=384) # بعد embedding مدل را وارد کنید
# گرفتن ایندکس
index = pinecone.Index(PINECONE_INDEX_NAME)
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:
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()
|