📖 Nội dung bài học
Video này đang được xử lý. Vui lòng quay lại sau và tải lại trang.
Tóm tắt
Phương pháp truy xuất hỗn hợp (hybrid retrieval) mà chúng ta đã xây dựng hoạt động khá tốt, nhưng vẫn còn một vài điểm chưa hoàn thiện. Khi bạn tìm kiếm các thuật ngữ cụ thể hoặc sử dụng từ viết tắt, kết quả có thể không được sắp xếp hoàn hảo. Ví dụ, khi hỏi "Đội kỹ thuật đã làm gì với INC-2023-Q4-011?", hệ thống có thể trả về phần an ninh mạng trước, mặc dù phần kỹ thuật phần mềm mới là nội dung liên quan trực tiếp đến truy vấn đó.
Re-ranking dựa trên LLM
Re-ranking bổ sung thêm một bước hậu xử lý (post-processing) sau khi hợp nhất kết quả từ vector index và BM25 index của bạn. Khái niệm này rất đơn giản: lấy các kết quả tìm kiếm được và yêu cầu Claude sắp xếp lại chúng dựa trên độ liên quan với câu hỏi của người dùng.

Quy trình hoạt động như sau:
- Chạy tìm kiếm hỗn hợp (hybrid search) như bình thường (vector + BM25)
- Hợp nhất các kết quả như trước
- Chuyển các kết quả đã hợp nhất vào một hàm re-ranker
- Hàm re-ranker gửi mọi thứ đến Claude với một prompt cụ thể
- Claude trả về danh sách các tài liệu liên quan nhất đã được sắp xếp lại
System Prompts
Prompt cho việc re-ranking được thiết kế để rõ ràng và cụ thể. Bạn cung cấp cho Claude câu hỏi của người dùng và tất cả các tài liệu có vẻ liên quan, sau đó yêu cầu một nhiệm vụ đơn giản: trả về các tài liệu liên quan nhất theo thứ tự độ liên quan giảm dần.
Cấu trúc prompt điển hình sẽ như sau:
Nhiệm vụ của bạn là tìm các tài liệu liên quan nhất đến câu hỏi của người dùng.
<user_question>
Chuyện gì đã xảy ra với INC-2023-Q4-011?
</user_question>
Đây là các tài liệu có thể liên quan:
<documents>
<document>Phần 10...</document>
<document>Phần 2...</document>
<document>Phần 7...</document>
<document>Phần 6...</document>
</documents>
Trả về 3 tài liệu liên quan nhất, theo thứ tự độ liên quan giảm dần.
Cân nhắc về hiệu suất
Yêu cầu Claude trả về toàn bộ các đoạn văn bản (text chunks) sẽ không hiệu quả - bạn sẽ phải chờ Claude sao chép một lượng lớn văn bản. Thay vào đó, hãy gán cho mỗi đoạn văn bản một ID duy nhất trước đó. Sau đó yêu cầu Claude chỉ trả về các ID đó theo đúng thứ tự.
Cách tiếp cận này nhanh hơn nhiều vì Claude chỉ cần trả về một danh sách đơn giản như ["1p5g", "51n3", "ab83"] thay vì sao chép toàn bộ các phần của tài liệu.
Triển khai
Hàm re-ranker được gọi tự động bởi retriever của bạn sau bước tìm kiếm hỗn hợp ban đầu. Đây là cấu trúc cơ bản:
def reranker_fn(docs, query_text, k):
# Định dạng tài liệu kèm ID
joined_docs = "\n".join([
f"<document><document_id>{doc['id']}</document_id>"
f"<document_content>{doc['content']}</document_content></document>"
for doc in docs
])
# Tạo prompt với câu hỏi của người dùng và tài liệu
prompt = f"""Bạn sắp được cung cấp một bộ tài liệu...
{query_text}
{joined_docs}
"""
# Lấy phản hồi từ Claude và phân tích các ID tài liệu
result = chat(messages, stop_sequences=["```"])
return json.loads(result["text"])["document_ids"]
Kết quả
Khi bạn kiểm tra re-ranker với các truy vấn như "Đội kỹ thuật đã làm gì với INC-2023-Q4-011?", bạn sẽ thấy các kết quả liên quan hơn nằm ở trên cùng. Claude hiểu ngữ cảnh và có thể xác định rằng một truy vấn về đội kỹ thuật nên ưu tiên phần kỹ thuật phần mềm hơn các phần khác chỉ đơn thuần đề cập đến sự cố.
Sự đánh đổi ở đây rất rõ ràng: re-ranking làm tăng độ trễ (latency) vì bạn cần chờ phản hồi từ Claude, nhưng nó cải thiện đáng kể độ chính xác của tìm kiếm bằng cách tận dụng khả năng hiểu ngữ cảnh và độ liên quan của Claude.
Tải xuống
🔁 Bài học liên quan
- Bài tiếp: Contextual retrieval
- Bài trước: A multi-search RAG pipeline
- Cùng section: Overview of Claude Models · Accessing the API · Making a request
- Thuộc lộ trình: Path C
- Docs tham khảo: Glossary · Skills atlas · By use-case
📚 Nguồn & ghi nhận
- Bài học gốc Anthropic Academy: https://anthropic.skilljar.com/claude-in-amazon-bedrock/276775
- © 2025 Anthropic. Chỉ dùng cho mục đích giáo dục, fair-use.
- Crawl: 2026-04-23 · Chuẩn hoá: 2026-05-01