student-agent / app.py
Younes13's picture
Update app.py
175598c verified
raw
history blame
2.39 kB
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModel
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# بارگذاری مدل FarsiBERT
tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
model = AutoModel.from_pretrained("HooshvareLab/bert-fa-base-uncased")
# داده‌های پرسش و پاسخ
faq_dict = {
"زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
"زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
"معدل لازم برای 24 واحد": "حداقل معدل 17 نیاز است.",
"حذف اضطراری": "تا هفته هشتم ترم مجاز است.",
"شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
}
faq_questions = list(faq_dict.keys())
# تابع استخراج embedding از جمله
def get_embedding(text):
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
outputs = model(**inputs)
# میانگین‌گیری از همه توکن‌ها در آخرین لایه
embeddings = outputs.last_hidden_state.mean(dim=1)
return embeddings[0].cpu().numpy()
# پیش‌محاسبه embedding تمام سوالات FAQ
faq_embeddings = [get_embedding(q) for q in faq_questions]
# تابع اصلی ایجنت
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]
if best_score > 0.75:
return faq_dict[faq_questions[best_idx]]
else:
return "متأسفم، پاسخ این سوال در حال حاضر موجود نیست."
except Exception as e:
return f"❗️خطا در سیستم: {str(e)}"
# رابط کاربری
iface = gr.Interface(
fn=student_bot,
inputs=gr.Textbox(label="سؤال خود را وارد کنید"),
outputs=gr.Textbox(label="پاسخ"),
title="ایجنت راهنمای دانشجویان با FarsiBERT",
description="پاسخ به پرسش‌های رایج بر اساس تشابه معنایی"
)
iface.launch()