Spaces:
Runtime error
Runtime error
Commit
·
fc0cc58
1
Parent(s):
e332ed5
update: re-rank docs
Browse files
utils/AdvancedLawRetriever.py
CHANGED
@@ -181,13 +181,50 @@ class AdvancedLawRetriever(BaseRetriever):
|
|
181 |
contents_to_rank = [item["structured_content"] for item in docs_for_reranking]
|
182 |
|
183 |
try:
|
184 |
-
#
|
185 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
186 |
except Exception as e:
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
|
|
|
|
|
|
|
|
191 |
|
192 |
# Lấy lại các Document gốc theo thứ tự đã được re-rank
|
193 |
final_reranked_docs = []
|
|
|
181 |
contents_to_rank = [item["structured_content"] for item in docs_for_reranking]
|
182 |
|
183 |
try:
|
184 |
+
# Kiểm tra nếu không có ứng viên nào để re-rank
|
185 |
+
if not final_candidates_for_rerank:
|
186 |
+
logger.warning("No candidates found for re-ranking. Returning empty list.")
|
187 |
+
return []
|
188 |
+
|
189 |
+
logger.info(f"Applying Cross-Encoder re-ranking to {len(final_candidates_for_rerank)} candidates...")
|
190 |
+
|
191 |
+
# SỬ DỤNG PHƯƠNG THỨC .compress_documents()
|
192 |
+
# Đây là phương thức chính của CrossEncoderReranker trong LangChain.
|
193 |
+
# Nó nhận danh sách Document và một chuỗi query, sau đó trả về
|
194 |
+
# danh sách Document đã được sắp xếp lại và lọc theo top_n.
|
195 |
+
reranked_docs = self.reranker.compress_documents(
|
196 |
+
documents=final_candidates_for_rerank,
|
197 |
+
query=rewritten_query
|
198 |
+
)
|
199 |
+
|
200 |
+
# `reranked_docs` bây giờ là một danh sách các tài liệu tốt nhất,
|
201 |
+
# đã được lọc theo `top_n` bạn đã cấu hình trong get_reranker_compressor (mặc định là 4).
|
202 |
+
logger.info(f"Re-ranking complete. Found {len(reranked_docs)} relevant documents.")
|
203 |
+
|
204 |
+
# Thêm log chi tiết để debug
|
205 |
+
# ---- LOGGING ĐỂ DEBUG ----
|
206 |
+
logger.info("--- Top documents after re-ranking ---")
|
207 |
+
for i, doc in enumerate(reranked_docs):
|
208 |
+
doc_info = {
|
209 |
+
"content_preview": doc.page_content[:200] + "...",
|
210 |
+
"metadata": doc.metadata,
|
211 |
+
# CrossEncoderReranker sẽ thêm điểm số vào metadata
|
212 |
+
"relevance_score": doc.metadata.get('relevance_score')
|
213 |
+
}
|
214 |
+
logger.info(f"Doc {i+1}: {doc_info}")
|
215 |
+
# ---- KẾT THÚC LOGGING ----
|
216 |
+
|
217 |
+
return reranked_docs
|
218 |
+
|
219 |
except Exception as e:
|
220 |
+
import traceback
|
221 |
+
logger.error(f"An unexpected error occurred during re-ranking: {e}\n{traceback.format_exc()}")
|
222 |
+
|
223 |
+
# Fallback an toàn: Trả về kết quả từ VectorDB mà không re-rank,
|
224 |
+
# lấy theo số lượng top_k của retriever ban đầu.
|
225 |
+
logger.warning("Falling back to returning top results from vector search without re-ranking.")
|
226 |
+
# Giả sử bạn có self.default_k được cấu hình
|
227 |
+
return final_candidates_for_rerank[:getattr(self, 'default_k', 4)]
|
228 |
|
229 |
# Lấy lại các Document gốc theo thứ tự đã được re-rank
|
230 |
final_reranked_docs = []
|