Spaces:
Runtime error
Runtime error
update prompt
Browse files- rag/analyze_and_expand.py +16 -7
- 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
|
| 36 |
-
|
| 37 |
-
-
|
| 38 |
-
|
| 39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
2. Loại "outlier" (Ngoài lề):
|
| 41 |
-
-
|
|
|
|
| 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 vì nhắc đến Bách Khoa; Bạn biết tôi là ai -> Outlier vì câu hỏi cá 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 có 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()
|