minh-4T commited on
Commit
cda3410
·
1 Parent(s): 83e0be4

update prompt

Browse files
Files changed (2) hide show
  1. rag/analyze_and_expand.py +16 -7
  2. rag/qa_pipeline.py +5 -3
rag/analyze_and_expand.py CHANGED
@@ -32,13 +32,22 @@ def analyze_and_expand_query(question: str) -> Dict[str, Any]:
32
  QUY TẮC PHÂN LOẠI CỰC KỲ NGHIÊM NGẶT:
33
  BẠN CHỈ CẦN ĐƯA RA CÂU HỎI TƯƠNG TỰ CHỨ KHÔNG CẦN TRẢ LỜI CÂU HỎI
34
  1. **CHỐNG ẢO GIÁC (ANTI-HALLUCINATION) - ƯU TIÊN SỐ 1:**
35
- - ĐỌC KỸ CÂU HỎI ĐẦY ĐỦ CỦA SINH VIÊN , NẾU câu hỏi nhắc đến TÊN CÁC TRƯỜNG ĐẠI HỌC KHÁC (VD: Bách Khoa, NEU, Kinh tế...) hoặc các chủ đề hoàn toàn nằm ngoài môi trường đại học (VD: nấu ăn, thời tiết, lịch sử thế giới, code lập trình):
36
- => BẮT BUỘC đặt "question_type": "outlier", "answer": "Xin lỗi, tôi là trợ lý AI chuyên trách của Trường Đại học Thủy Lợi. Tôi chỉ hỗ trợ giải đáp các quy chế thông tin liên quan đến sinh viên Thủy Lợi."
37
- - Nếu `CÂU HỎI` câu hỏi nhân, trêu đùa (VD: "bạn biết tôi là ai không", "ăn cơm chưa") -> BỎ QUA TÀI LIỆU, trả lời ngay: "Xin lỗi, tôi chỉ hỗ trợ giải đáp thông tin về quy chế đào tạo."
38
- - Nếu `TÀI LIỆU THAM KHẢO` chứa nội dung KHÔNG LIÊN QUAN CHÚT NÀO đến câu hỏi (VD: Hỏi về 'điểm rèn luyện' nhưng tài liệu lại nói về 'học phí') -> TUYỆT ĐỐI KHÔNG tóm tắt tài liệu. Trả lời ngay: "Rất tiếc, hệ thống không tìm thấy thông tin phù hợp trong quy chế để trả lời câu hỏi của bạn."
39
-
 
 
 
 
 
 
 
 
40
  2. Loại "outlier" (Ngoài lề):
41
- - Dành cho các câu hỏi hoàn toàn không liên quan đến QUY CHẾ ĐÀO TẠO CỦA TRƯỜNG ĐẠI HỌC THỦY LỢI ( VD : các câu hỏi về trường khác, chủ đề khác, hoặc câu hỏi cá nhân, trêu đùa).
 
42
  - HÀNH ĐỘNG: Trả về câu trả lời từ chối lịch sự, KHÔNG ĐƯỢC phép trả lời theo kiểu "Tôi không biết" hoặc "Tôi không thể trả lời". PHẢI TRẢ LỜI CỤ THỂ rằng bạn chỉ hỗ trợ về quy chế đào tạo của Thủy Lợi.
43
  - Expanded queries: Rỗng [].
44
  3. LOẠI "normal" (Xã giao):
@@ -115,7 +124,7 @@ def analyze_and_expand_query(question: str) -> Dict[str, Any]:
115
  "cảnh báo", "tốt nghiệp", "học lại", "học cải thiện", "đồ án",
116
  "chuyên đề", "chuẩn đầu ra", "học kỳ", "học phần"
117
  ]
118
- school_keywords = ["tlu", "thủy lợi", "thuy loi", "truong minh", "trường mình"]
119
 
120
  has_academic_keyword = any(kw in question_lower for kw in academic_keywords)
121
  has_school_keyword = any(skw in question_lower for skw in school_keywords)
 
32
  QUY TẮC PHÂN LOẠI CỰC KỲ NGHIÊM NGẶT:
33
  BẠN CHỈ CẦN ĐƯA RA CÂU HỎI TƯƠNG TỰ CHỨ KHÔNG CẦN TRẢ LỜI CÂU HỎI
34
  1. **CHỐNG ẢO GIÁC (ANTI-HALLUCINATION) - ƯU TIÊN SỐ 1:**
35
+ - ĐỌC KỸ CÂU HỎI, NẾU phát hiện nhắc đến các trường đại học KHÁC:
36
+ (VD: Học bổng đại học bách khoa -> Outlier nhắc đến Bách Khoa; Bạn biết tôi ai -> Outlier câu hỏi nhân;...)
37
+ - HOẶC các chủ đề ngoài quy chế (code, nấu ăn, lịch sử...)
38
+ => BẮT BUỘC: "question_type": "outlier"
39
+
40
+ DANH SÁCH TRƯỜNG KHÁC (KHÔNG PHẢI THỦY LỢI):
41
+ - "bách khoa", "bach khoa", "hust"
42
+ - "neu", "kinh tế"
43
+ - "ngoại thương", "ngoai thuong", "ftu"
44
+ - "sư phạm", "su pham", "hpu"
45
+ - "nông lâm", "nong lam"
46
+ - "công nghệ thông tin", "uit"
47
+ - "huflit", "rmit", "fpt", "văn hiến", "van hien", "mở"
48
  2. Loại "outlier" (Ngoài lề):
49
+ - DÀNH CHO: Câu hỏi nhắc đến tên trường đại học khác, hoặc các chủ đề hoàn toàn không liên quan đến môi trường đại học, hoặc câu hỏi cá nhân/trêu đùa.
50
+ - Ví dụ: "Bách Khoa có quy định thế nào?", "NEU có học bổng không?", "Bạn biết tôi là ai không?", "Hôm nay thời tiết thế nào?", "Lịch sử Việt Nam", "Code Python thế nào".
51
  - HÀNH ĐỘNG: Trả về câu trả lời từ chối lịch sự, KHÔNG ĐƯỢC phép trả lời theo kiểu "Tôi không biết" hoặc "Tôi không thể trả lời". PHẢI TRẢ LỜI CỤ THỂ rằng bạn chỉ hỗ trợ về quy chế đào tạo của Thủy Lợi.
52
  - Expanded queries: Rỗng [].
53
  3. LOẠI "normal" (Xã giao):
 
124
  "cảnh báo", "tốt nghiệp", "học lại", "học cải thiện", "đồ án",
125
  "chuyên đề", "chuẩn đầu ra", "học kỳ", "học phần"
126
  ]
127
+ school_keywords = ["tlu", "thủy lợi", "thuy loi", "truong minh", "trường mình", "trường "]
128
 
129
  has_academic_keyword = any(kw in question_lower for kw in academic_keywords)
130
  has_school_keyword = any(skw in question_lower for skw in school_keywords)
rag/qa_pipeline.py CHANGED
@@ -216,7 +216,7 @@ def ask_ai_stream_delta(message: str, history: List, hybrid_retriever, cohort_ke
216
  prompt = create_advanced_prompt(question, context, question_type, topic_hint)
217
 
218
  logger.info("Đang tạo câu trả lời cuối cùng ...")
219
-
220
  success = False
221
  for _ in range(len(api_manager.groq_keys) if api_manager.groq_keys else 1):
222
  try:
@@ -231,6 +231,7 @@ def ask_ai_stream_delta(message: str, history: List, hybrid_retriever, cohort_ke
231
  for chunk in stream:
232
  token = chunk.choices[0].delta.content
233
  if token:
 
234
  yield token
235
  success = True
236
  break
@@ -250,6 +251,7 @@ def ask_ai_stream_delta(message: str, history: List, hybrid_retriever, cohort_ke
250
  response = model.generate_content(prompt, stream=True)
251
  for chunk in response:
252
  if chunk.text:
 
253
  yield chunk.text
254
  success = True
255
  break
@@ -260,8 +262,8 @@ def ask_ai_stream_delta(message: str, history: List, hybrid_retriever, cohort_ke
260
  if not success:
261
  yield "Đã xảy ra lỗi hệ thống hoặc quá tải. Vui lòng thử lại sau giây lát!"
262
  return
263
-
264
- if context_docs:
265
  yield "\n\n---\n\n"
266
  yield "## 📚 Tài liệu tham khảo\n\n"
267
  seen_sources = set()
 
216
  prompt = create_advanced_prompt(question, context, question_type, topic_hint)
217
 
218
  logger.info("Đang tạo câu trả lời cuối cùng ...")
219
+ generated_text = ""
220
  success = False
221
  for _ in range(len(api_manager.groq_keys) if api_manager.groq_keys else 1):
222
  try:
 
231
  for chunk in stream:
232
  token = chunk.choices[0].delta.content
233
  if token:
234
+ generated_text += token
235
  yield token
236
  success = True
237
  break
 
251
  response = model.generate_content(prompt, stream=True)
252
  for chunk in response:
253
  if chunk.text:
254
+ generated_text += chunk.text
255
  yield chunk.text
256
  success = True
257
  break
 
262
  if not success:
263
  yield "Đã xảy ra lỗi hệ thống hoặc quá tải. Vui lòng thử lại sau giây lát!"
264
  return
265
+ is_refusal = "Xin lỗi, tôi là trợ lý" in generated_text or "không thể tư vấn" in generated_text
266
+ if context_docs and not is_refusal:
267
  yield "\n\n---\n\n"
268
  yield "## 📚 Tài liệu tham khảo\n\n"
269
  seen_sources = set()