M17idd commited on
Commit
c9cc9b3
·
1 Parent(s): 1c9c465

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +54 -35
app.py CHANGED
@@ -544,92 +544,111 @@ from sentence_transformers import SentenceTransformer, util
544
  model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
545
 
546
  if query:
 
547
  found = False
548
- threshold = 0.70
549
 
 
550
  sentence_embeddings = model.encode(all_sentences, convert_to_tensor=True)
551
  query_embedding = model.encode(query, convert_to_tensor=True)
552
 
 
553
  similarities = util.cos_sim(query_embedding, sentence_embeddings)[0]
554
 
 
555
  top_indices = [i for i, sim in enumerate(similarities) if sim >= threshold]
556
 
557
- for idx in top_indices:
558
- sentence = all_sentences[idx]
 
 
 
 
559
  prompt = f"""
560
- تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخ‌ها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفه‌ای، دقیق و روان از داخل پاسخ ها ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر 2048 کاراکتر و حداقل 512 باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و سعی کن خارج از پاسخ ها جواب ندی محتوای چند پاسخ را در صورت نیاز با هم ترکیب کن.
561
- سوال:
562
- {query}
563
- پاسخ‌ها:
564
- {sentence}
565
- پاسخ نهایی حرفه‌ای بازنویسی‌شده:
566
- """
 
 
 
 
567
  response = llm([
568
  SystemMessage(content="You are a helpful assistant."),
569
  HumanMessage(content=prompt)
570
  ])
571
  rewritten = response.content.strip()
572
 
573
- # بررسی مرتبط بودن پاسخ با سؤال
574
  review_prompt = f"""
575
- لطفاً بررسی کن که آیا پاسخ زیر، به سوال زیر پاسخ داده است یا خیر یعنی کلمات کلیدی اصلی در سوال در پاسخ هست یا ن . اگر پاسخ به سوال مرتبط، درست و قابل قبول است، فقط بنویس: 'تأیید شد'. اگر کمی مربوط بود بنویس: 'کمی خوب'.
576
- اگر پاسخ اشتباه است یا هیچ ربطی به سوال ندارد، فقط بنویس: 'نیاز به اصلاح دارد'.
577
  سوال:
578
  {query}
 
579
  پاسخ:
580
  {rewritten}
581
  """
 
582
  review_response = llm([
583
  SystemMessage(content="You are a helpful assistant."),
584
  HumanMessage(content=review_prompt)
585
  ])
586
  review_result = review_response.content.strip()
587
 
 
588
  if "تأیید شد" in review_result:
589
  rewritten = clean_text(rewritten)
590
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
 
591
  elif "کمی خوب" in review_result:
592
  final_prompt = f"""
593
- لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد و از دیتای زیر استفاده کن برای پاسخ دادن .و از زبانی جز فارسی استفاده نکن و بیا هم از سوال هم دیتای زیر و هم از پاسخ استفاده کن و پاسخ مناسبی بنویس :
 
594
  سوال:
595
  {query}
596
- پاسخ:
597
- {review_result}
598
- دیتا:
599
  {rewritten}
 
 
600
  """
601
- new_1response = llm([
602
  SystemMessage(content="You are a helpful assistant."),
603
  HumanMessage(content=final_prompt)
604
  ])
605
- final_answer1 = new_1response.content.strip()
606
- final_answer1 = clean_text(final_answer1)
607
- st.markdown(f'<div class="chat-message">{final_answer1}</div>', unsafe_allow_html=True)
608
  else:
609
- final_prompt = f"""
610
- لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن :
 
611
  سوال:
612
  {query}
613
  """
614
- new_response = llm([
615
  SystemMessage(content="You are a helpful assistant."),
616
- HumanMessage(content=final_prompt)
617
  ])
618
- final_answer = new_response.content.strip()
619
- final_answer = clean_text(final_answer)
620
- st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
621
 
622
- think.empty()
623
- found = True
624
- break
 
625
 
626
- if not found:
627
- prompt = f"لطفاً بر اساس سوال زیر یک متن مرتبط و معنادار تولید کن و از خودت ننویس و جملات معتبر باشن و از زبانی جز فارسی استفاده نکن:\n\nسوال: {query}"
 
628
  response = llm([
629
  SystemMessage(content="You are a helpful assistant."),
630
  HumanMessage(content=prompt)
631
  ])
632
- rewritten = response.content.strip()
633
- rewritten = clean_text(rewritten)
634
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
635
  think.empty()
 
 
544
  model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
545
 
546
  if query:
547
+ threshold = 0.70
548
  found = False
 
549
 
550
+ # محاسبه بردارهای جملات و سوال
551
  sentence_embeddings = model.encode(all_sentences, convert_to_tensor=True)
552
  query_embedding = model.encode(query, convert_to_tensor=True)
553
 
554
+ # محاسبه شباهت‌ها
555
  similarities = util.cos_sim(query_embedding, sentence_embeddings)[0]
556
 
557
+ # استخراج اندیس‌هایی که شباهتشان از آستانه بیشتر است
558
  top_indices = [i for i, sim in enumerate(similarities) if sim >= threshold]
559
 
560
+ if top_indices:
561
+ found = True
562
+ # ترکیب همه جملات مشابه در یک متن واحد
563
+ matched_sentences = "\n".join([all_sentences[i] for i in top_indices])
564
+
565
+ # ساخت پرامپت اصلی برای تولید پاسخ نهایی حرفه‌ای
566
  prompt = f"""
567
+ تعدادی پاسخ برای سوال زیر تولید شده است. لطفاً ابتدا این پاسخ‌ها را بررسی کن، سپس با در نظر گرفتن محتوای سوال و لحن آن، یک پاسخ نهایی حرفه‌ای، دقیق و روان از داخل پاسخ‌ها ارائه کن که هم به سوال پاسخ دهد و هم از نظر نگارشی و ساختاری در سطح بالایی باشد. پاسخ نهایی باید حداکثر 2048 کاراکتر و حداقل 512 باشد، خلاصه و واضح نوشته شود و فقط به زبان فارسی باشد. از تکرار اضافی پرهیز کن و فقط از پاسخ‌های زیر استفاده کن. در صورت نیاز، محتوای چند پاسخ را با هم ترکیب کن.
568
+
569
+ سوال:
570
+ {query}
571
+
572
+ پاسخ‌ها:
573
+ {matched_sentences}
574
+
575
+ پاسخ نهایی حرفه‌ای بازنویسی‌شده:
576
+ """
577
+
578
  response = llm([
579
  SystemMessage(content="You are a helpful assistant."),
580
  HumanMessage(content=prompt)
581
  ])
582
  rewritten = response.content.strip()
583
 
584
+ # بررسی کیفیت پاسخ با یک پرامپت ارزیابی
585
  review_prompt = f"""
586
+ لطفاً بررسی کن که آیا پاسخ زیر به سوال داده‌شده مرتبط، دقیق و معتبر است یا خیر. اگر پاسخ قابل قبول و دقیق است بنویس 'تأیید شد'. اگر متوسط است بنویس 'کمی خوب'. اگر بی‌ربط یا اشتباه است بنویس 'نیاز به اصلاح دارد'.
587
+
588
  سوال:
589
  {query}
590
+
591
  پاسخ:
592
  {rewritten}
593
  """
594
+
595
  review_response = llm([
596
  SystemMessage(content="You are a helpful assistant."),
597
  HumanMessage(content=review_prompt)
598
  ])
599
  review_result = review_response.content.strip()
600
 
601
+ # تحلیل نتیجه بررسی و نمایش پاسخ مناسب
602
  if "تأیید شد" in review_result:
603
  rewritten = clean_text(rewritten)
604
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
605
+
606
  elif "کمی خوب" in review_result:
607
  final_prompt = f"""
608
+ لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. از زبانی جز فارسی استفاده نکن. از محتوای زیر استفاده کن و یک پاسخ نهایی خوب بنویس:
609
+
610
  سوال:
611
  {query}
612
+
613
+ پاسخ اولیه:
 
614
  {rewritten}
615
+
616
+ پاسخ نهایی:
617
  """
618
+ new_response = llm([
619
  SystemMessage(content="You are a helpful assistant."),
620
  HumanMessage(content=final_prompt)
621
  ])
622
+ final_answer = clean_text(new_response.content.strip())
623
+ st.markdown(f'<div class="chat-message">{final_answer}</div>', unsafe_allow_html=True)
624
+
625
  else:
626
+ fallback_prompt = f"""
627
+ لطفاً برای سوال زیر پاسخی حرفه‌ای، دقیق و روان تولید کن که مرتبط و معتبر باشد. اگر اطلاعات کافی وجود ندارد، صادقانه بگو. فقط به زبان فارسی پاسخ بده:
628
+
629
  سوال:
630
  {query}
631
  """
632
+ fallback_response = llm([
633
  SystemMessage(content="You are a helpful assistant."),
634
+ HumanMessage(content=fallback_prompt)
635
  ])
636
+ final_fallback = clean_text(fallback_response.content.strip())
637
+ st.markdown(f'<div class="chat-message">{final_fallback}</div>', unsafe_allow_html=True)
 
638
 
639
+ else:
640
+ # اگر جمله‌ای با شباهت بالا پیدا نشد
641
+ prompt = f"""
642
+ لطفاً برای سوال زیر یک متن مرتبط و معتبر تولید کن. اگر اطلاعات کافی وجود ندارد، صادقانه اعلام کن. فقط به زبان فارسی پاسخ بده:
643
 
644
+ سوال:
645
+ {query}
646
+ """
647
  response = llm([
648
  SystemMessage(content="You are a helpful assistant."),
649
  HumanMessage(content=prompt)
650
  ])
651
+ rewritten = clean_text(response.content.strip())
 
652
  st.markdown(f'<div class="chat-message">{rewritten}</div>', unsafe_allow_html=True)
653
  think.empty()
654
+