student-agent / app.py
Younes13's picture
Update app.py
c85e7c2 verified
raw
history blame
2.57 kB
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModel
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# بارگذاری مدل
tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
model = AutoModel.from_pretrained("HooshvareLab/bert-fa-base-uncased")
# پرسش و پاسخ‌ها (سوالات باید طبیعی‌تر شوند)
faq_dict = {
"زمان انتخاب واحد چه موقع است؟": "معمولاً پایان شهریور و بهمن است.",
"چه زمانی می‌توان حذف و اضافه انجام داد؟": "حدود یک هفته پس از شروع ترم تحصیلی است.",
"چه معدلی برای انتخاب ۲۴ واحد لازم است؟": "حداقل معدل 17 نیاز است.",
"تا چه زمانی امکان حذف اضطراری وجود دارد؟": "تا هفته هشتم ترم مجاز است.",
"چگونه می‌توان مهمان شد؟": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
}
faq_questions = list(faq_dict.keys())
faq_embeddings = []
# تابع استخراج embedding
def get_embedding(text):
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
outputs = model(**inputs)
return outputs.last_hidden_state.mean(dim=1)[0].cpu().numpy()
# پیش‌محاسبه embeddingها
for question in faq_questions:
emb = get_embedding(question)
faq_embeddings.append(emb)
# پاسخ‌دهی
def student_bot(user_question):
try:
user_emb = get_embedding(user_question)
sims = [cosine_similarity([user_emb], [emb])[0][0] for emb in faq_embeddings]
best_idx = int(np.argmax(sims))
best_score = sims[best_idx]
# 👇 برای دیباگ
print("Similarity Score:", best_score)
if best_score > 0.6:
return faq_dict[faq_questions[best_idx]]
else:
return "متأسفم، پاسخ این سؤال در حال حاضر موجود نیست."
except Exception as e:
return f"❗️خطا در سیستم: {str(e)}"
# رابط Gradio
iface = gr.Interface(
fn=student_bot,
inputs=gr.Textbox(label="سوال خود را بنویسید"),
outputs=gr.Textbox(label="پاسخ"),
title="ایجنت راهنمای دانشجویان",
description="پاسخ به سوالات رایج با استفاده از مدل FarsiBERT و تشابه معنایی"
)
iface.launch()