File size: 2,479 Bytes
337f19e
f131275
337f19e
7be27f8
d173465
 
 
 
 
 
df561c7
 
 
 
 
 
 
 
d173465
 
 
df561c7
 
7be27f8
 
 
 
 
 
 
 
 
 
f131275
 
 
 
 
72ba832
df561c7
f131275
9da05f7
d173465
 
 
 
 
 
 
 
 
 
 
 
f51748e
f131275
72ba832
c9e7184
df561c7
f131275
 
 
7be27f8
 
 
 
 
f131275
9da05f7
7be27f8
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
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()