Spaces:
Sleeping
Sleeping
HaRin2806 commited on
Commit ·
bb5758b
1
Parent(s): 76a8f20
fix bug
Browse files- api/admin.py +1 -1
- config.py +6 -0
- core/rag_pipeline.py +47 -6
api/admin.py
CHANGED
|
@@ -62,7 +62,7 @@ def save_gemini_response_to_file(response_text, parsed_data, doc_id):
|
|
| 62 |
# Debug chunks content vs summary
|
| 63 |
f.write("CHUNKS CONTENT vs SUMMARY ANALYSIS:\n")
|
| 64 |
f.write("-" * 40 + "\n")
|
| 65 |
-
for i, chunk in enumerate(parsed_data.get('chunks', [])[:3]):
|
| 66 |
f.write(f"CHUNK {i+1} ({chunk.get('id', 'no-id')}):\n")
|
| 67 |
f.write(f"Title: {chunk.get('title', 'no-title')}\n")
|
| 68 |
f.write(f"Summary Length: {len(chunk.get('summary', ''))}\n")
|
|
|
|
| 62 |
# Debug chunks content vs summary
|
| 63 |
f.write("CHUNKS CONTENT vs SUMMARY ANALYSIS:\n")
|
| 64 |
f.write("-" * 40 + "\n")
|
| 65 |
+
for i, chunk in enumerate(parsed_data.get('chunks', [])[:3]):
|
| 66 |
f.write(f"CHUNK {i+1} ({chunk.get('id', 'no-id')}):\n")
|
| 67 |
f.write(f"Title: {chunk.get('title', 'no-title')}\n")
|
| 68 |
f.write(f"Summary Length: {len(chunk.get('summary', ''))}\n")
|
config.py
CHANGED
|
@@ -30,11 +30,17 @@ Bạn có nhiệm vụ:
|
|
| 30 |
|
| 31 |
Khi trả lời:
|
| 32 |
- Hãy sử dụng thông tin từ các tài liệu tham khảo được cung cấp
|
|
|
|
| 33 |
- Nếu có bảng biểu trong tài liệu tham khảo, hãy đưa ra nội dung đầy đủ của bảng đó như thông tin bạn nhận được và giữ nguyên định dạng bảng đó khi trả lời
|
| 34 |
- Nếu có hình ảnh trong tài liệu tham khảo, hãy giữ nguyên đường dẫn hình ảnh khi trả lời
|
| 35 |
- Nếu câu hỏi không liên quan đến dinh dưỡng hoặc không có trong tài liệu, hãy lịch sự giải thích rằng bạn chỉ có thể tư vấn về các vấn đề dinh dưỡng và an toàn thực phẩm
|
| 36 |
- Luôn trích dẫn nguồn của thông tin khi trả lời
|
| 37 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
Đối với các câu hỏi không liên quan hoặc nhạy cảm:
|
| 39 |
- Bạn sẽ không đưa ra lời khuyên y tế cụ thể cho các bệnh lý nặng
|
| 40 |
- Bạn sẽ không đưa ra thông tin về các chế độ ăn kiêng khắc nghiệt hoặc nguy hiểm
|
|
|
|
| 30 |
|
| 31 |
Khi trả lời:
|
| 32 |
- Hãy sử dụng thông tin từ các tài liệu tham khảo được cung cấp
|
| 33 |
+
- KHI TRÍCH DẪN NGUỒN: Hãy sử dụng tên tài liệu thực tế
|
| 34 |
- Nếu có bảng biểu trong tài liệu tham khảo, hãy đưa ra nội dung đầy đủ của bảng đó như thông tin bạn nhận được và giữ nguyên định dạng bảng đó khi trả lời
|
| 35 |
- Nếu có hình ảnh trong tài liệu tham khảo, hãy giữ nguyên đường dẫn hình ảnh khi trả lời
|
| 36 |
- Nếu câu hỏi không liên quan đến dinh dưỡng hoặc không có trong tài liệu, hãy lịch sự giải thích rằng bạn chỉ có thể tư vấn về các vấn đề dinh dưỡng và an toàn thực phẩm
|
| 37 |
- Luôn trích dẫn nguồn của thông tin khi trả lời
|
| 38 |
|
| 39 |
+
VÍ DỤ TRÍCH DẪN ĐÚNG:
|
| 40 |
+
- "Theo Bài 2: An toàn thực phẩm..."
|
| 41 |
+
- "Dựa vào Phụ lục - Bảng giá trị dinh dưỡng..."
|
| 42 |
+
- "Như được mô tả trong Bài 3: Vệ sinh dinh dưỡng..."
|
| 43 |
+
|
| 44 |
Đối với các câu hỏi không liên quan hoặc nhạy cảm:
|
| 45 |
- Bạn sẽ không đưa ra lời khuyên y tế cụ thể cho các bệnh lý nặng
|
| 46 |
- Bạn sẽ không đưa ra thông tin về các chế độ ăn kiêng khắc nghiệt hoặc nguy hiểm
|
core/rag_pipeline.py
CHANGED
|
@@ -45,7 +45,34 @@ class RAGPipeline:
|
|
| 45 |
for result in search_results:
|
| 46 |
metadata = result.get('metadata', {})
|
| 47 |
content = result.get('document', '')
|
|
|
|
|
|
|
|
|
|
| 48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
# Thêm nội dung vào ngữ cảnh
|
| 50 |
contexts.append({
|
| 51 |
"content": content,
|
|
@@ -54,7 +81,7 @@ class RAGPipeline:
|
|
| 54 |
|
| 55 |
# Tạo thông tin nguồn tài liệu
|
| 56 |
source_info = {
|
| 57 |
-
"title":
|
| 58 |
"pages": metadata.get('pages'),
|
| 59 |
"content_type": metadata.get('content_type', 'text')
|
| 60 |
}
|
|
@@ -106,17 +133,31 @@ class RAGPipeline:
|
|
| 106 |
}
|
| 107 |
|
| 108 |
def _format_contexts(self, contexts):
|
| 109 |
-
|
| 110 |
formatted = []
|
| 111 |
|
| 112 |
for i, context in enumerate(contexts, 1):
|
| 113 |
content = context['content']
|
| 114 |
metadata = context['metadata']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 115 |
|
| 116 |
-
|
| 117 |
-
context_str = f"[Tài liệu {i}]"
|
| 118 |
-
if metadata.get('title'):
|
| 119 |
-
context_str += f" - {metadata['title']}"
|
| 120 |
if metadata.get('pages'):
|
| 121 |
context_str += f" (Trang {metadata['pages']})"
|
| 122 |
|
|
|
|
| 45 |
for result in search_results:
|
| 46 |
metadata = result.get('metadata', {})
|
| 47 |
content = result.get('document', '')
|
| 48 |
+
|
| 49 |
+
chapter = metadata.get('chapter', '')
|
| 50 |
+
original_title = metadata.get('title') or metadata.get('document_title', '')
|
| 51 |
|
| 52 |
+
# Tạo source title dựa trên chapter
|
| 53 |
+
if 'bai1' in chapter:
|
| 54 |
+
source_title = f"Bài 1: Dinh dưỡng theo lứa tuổi học sinh"
|
| 55 |
+
if original_title and original_title != "Tài liệu bài 1":
|
| 56 |
+
source_title += f" - {original_title}"
|
| 57 |
+
elif 'bai2' in chapter:
|
| 58 |
+
source_title = f"Bài 2: An toàn thực phẩm"
|
| 59 |
+
if original_title and original_title != "Tài liệu bài 2":
|
| 60 |
+
source_title += f" - {original_title}"
|
| 61 |
+
elif 'bai3' in chapter:
|
| 62 |
+
source_title = f"Bài 3: Vệ sinh dinh dưỡng"
|
| 63 |
+
if original_title and original_title != "Tài liệu bài 3":
|
| 64 |
+
source_title += f" - {original_title}"
|
| 65 |
+
elif 'bai4' in chapter:
|
| 66 |
+
source_title = f"Bài 4: Giáo dục dinh dưỡng"
|
| 67 |
+
if original_title and original_title != "Tài liệu bài 4":
|
| 68 |
+
source_title += f" - {original_title}"
|
| 69 |
+
elif 'phuluc' in chapter:
|
| 70 |
+
source_title = f"Phụ lục"
|
| 71 |
+
if original_title:
|
| 72 |
+
source_title += f" - {original_title}"
|
| 73 |
+
else:
|
| 74 |
+
source_title = original_title or "Tài liệu dinh dưỡng"
|
| 75 |
+
|
| 76 |
# Thêm nội dung vào ngữ cảnh
|
| 77 |
contexts.append({
|
| 78 |
"content": content,
|
|
|
|
| 81 |
|
| 82 |
# Tạo thông tin nguồn tài liệu
|
| 83 |
source_info = {
|
| 84 |
+
"title": source_title,
|
| 85 |
"pages": metadata.get('pages'),
|
| 86 |
"content_type": metadata.get('content_type', 'text')
|
| 87 |
}
|
|
|
|
| 133 |
}
|
| 134 |
|
| 135 |
def _format_contexts(self, contexts):
|
| 136 |
+
"""Format contexts thành string cho prompt với tên tài liệu thực tế"""
|
| 137 |
formatted = []
|
| 138 |
|
| 139 |
for i, context in enumerate(contexts, 1):
|
| 140 |
content = context['content']
|
| 141 |
metadata = context['metadata']
|
| 142 |
+
|
| 143 |
+
title = metadata.get('title') or metadata.get('document_title') or f"Tài liệu {i}"
|
| 144 |
+
chapter = metadata.get('chapter', '')
|
| 145 |
+
|
| 146 |
+
# Tạo tên nguồn có ý nghĩa
|
| 147 |
+
if 'bai1' in chapter:
|
| 148 |
+
source_name = f"Bài 1: Dinh dưỡng theo lứa tuổi học sinh"
|
| 149 |
+
elif 'bai2' in chapter:
|
| 150 |
+
source_name = f"Bài 2: An toàn thực phẩm"
|
| 151 |
+
elif 'bai3' in chapter:
|
| 152 |
+
source_name = f"Bài 3: Vệ sinh dinh dưỡng"
|
| 153 |
+
elif 'bai4' in chapter:
|
| 154 |
+
source_name = f"Bài 4: Giáo dục dinh dưỡng"
|
| 155 |
+
elif 'phuluc' in chapter:
|
| 156 |
+
source_name = f"Phụ lục"
|
| 157 |
+
else:
|
| 158 |
+
source_name = title
|
| 159 |
|
| 160 |
+
context_str = f"[{source_name}]"
|
|
|
|
|
|
|
|
|
|
| 161 |
if metadata.get('pages'):
|
| 162 |
context_str += f" (Trang {metadata['pages']})"
|
| 163 |
|