Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
from sentence_transformers import SentenceTransformer | |
from transformers import pipeline | |
from pinecone import Pinecone, ServerlessSpec | |
# بارگذاری مقادیر محرمانه | |
PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY") | |
INDEX_NAME = os.environ.get("INDEX_NAME") | |
# مدل embedding | |
embedder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2") | |
# مدل زبانی | |
generator = pipeline("text-generation", model="HooshvareLab/gpt2-fa") | |
# اتصال به پایگاه Pinecone | |
pc = Pinecone(api_key=PINECONE_API_KEY) | |
index = pc.Index(INDEX_NAME) | |
# تابع اصلی RAG | |
def rag_chatbot(message, history): | |
# پاسخهای ساده | |
greetings = ["سلام", "سلام وقت بخیر", "درود", "خسته نباشید"] | |
if message.strip() in greetings: | |
return "سلام! چطور میتونم کمکتون کنم؟ 😊" | |
# بردارگیری | |
query_vector = embedder.encode(message).tolist() | |
result = index.query(vector=query_vector, top_k=3, include_metadata=True) | |
# ساخت context از نتایج | |
context = "\n".join([match['metadata'].get("پاسخ", "") for match in result['matches']]) | |
if not context.strip(): | |
return "متأسفم، اطلاعات کافی در این زمینه ندارم. لطفاً با ما تماس بگیرید." | |
# ساخت پرامپت دقیق | |
prompt = f"""اطلاعات زیر را بخوان و فقط بر اساس همین اطلاعات پاسخ بده. | |
اگر جواب در اطلاعات نبود، بگو اطلاعی ندارم. | |
اطلاعات: | |
{context} | |
سؤال: {message} | |
پاسخ:""" | |
# تولید پاسخ | |
response = generator(prompt, max_new_tokens=100, do_sample=True, temperature=0.7)[0]['generated_text'] | |
answer = response.split("پاسخ:")[-1].strip() | |
if len(answer) < 3: | |
return "متأسفم، پاسخ مشخصی برای این سوال ندارم." | |
return answer | |
# رابط چت | |
chat_ui = gr.ChatInterface( | |
fn=rag_chatbot, | |
title="🤖 چتبات هوشمند تیام (نسخه RAG)", | |
description="پاسخگویی ترکیبی با دادههای شرکت + تولید متن طبیعی هوشمند", | |
theme="soft", | |
) | |
chat_ui.launch() | |