student-agent / app.py
Younes13's picture
Update app.py
d173465 verified
raw
history blame
2.48 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForCausalLM
from sentence_transformers import SentenceTransformer, util
# بارگذاری مدل SBERT فارسی
embedder = SentenceTransformer("HooshvareLab/sbert-fa-zwnj-base")
# سوالات پر تکرار (FAQ)
faq_dict = {
"زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
"زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
"معدل لازم برای 24 واحد": "حداقل معدل 17 نیاز است.",
"حذف اضطراری": "تا هفته هشتم ترم مجاز است.",
"شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
}
# پیش‌پردازش FAQ برای تبدیل به embedding
faq_questions = list(faq_dict.keys())
faq_embeddings = embedder.encode(faq_questions, convert_to_tensor=True)
# بارگذاری پرسش و پاسخ‌های FAQ
faq_dict = {}
with open("faq.txt", encoding="utf-8") as f:
for line in f:
if ":" in line:
q, a = line.strip().split(":", 1)
faq_dict[q.strip()] = a.strip()
# بارگذاری مدل فارسی
model_name = "HooshvareLab/gpt2-fa"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
chat_history = []
# تابع پاسخ‌دهی
def student_bot(question):
question_embedding = embedder.encode(question, convert_to_tensor=True)
# محاسبه شباهت با سوالات ثبت شده
cos_scores = util.pytorch_cos_sim(question_embedding, faq_embeddings)[0]
best_score = cos_scores.max().item()
best_idx = cos_scores.argmax().item()
if best_score >= 0.7: # آستانه شباهت
best_question = faq_questions[best_idx]
return faq_dict[best_question]
else:
return "❗️متاسفم، پاسخ این سؤال فعلاً در سیستم ثبت نشده است."
# رابط Gradio
gr.Interface(
fn=student_bot,
inputs=gr.Textbox(label="❓ سوال خود را وارد کنید"),
outputs=gr.Textbox(label="✅ پاسخ هوشمند"),
title="🎓 ایجنت راهنمای دانشجویان دانشگاه",
description="پاسخ به سوالات پرتکرار آموزشی با کمک مدل FarsiGPT و پایگاه دانش",
theme="compact"
).launch()