Bỏ qua đến nội dung chính

Contextual retrieval

📖 Nội dung bài học

[

chi tiết

2
tải về Kích cỡ chữ

Tóm tắt

Truy xuất theo ngữ cảnh (Contextual retrieval) là một kỹ thuật giúp cải thiện độ chính xác của pipeline RAG bằng cách giải quyết một vấn đề cơ bản: khi bạn chia nhỏ một tài liệu thành các đoạn (chunks), mỗi chunk sẽ mất đi mối liên hệ với ngữ cảnh rộng hơn của tài liệu đó.

Ý tưởng cơ bản rất đơn giản. Sau khi chia nhỏ tài liệu nguồn thành các chunk, bạn yêu cầu Claude thêm ngữ cảnh vào từng chunk trước khi lưu trữ vào cơ sở dữ liệu retrieval. Bước tiền xử lý này giúp "định vị" từng chunk trong toàn bộ tài liệu lớn.

Cách thức hoạt động

Với mỗi chunk văn bản, bạn gửi cả chunk đó và tài liệu nguồn gốc cho Claude với một prompt như sau:

Write a short and succinct snippet of text to situate this chunk within the 
overall source document for the purposes of improving search retrieval of the chunk.

Here is the original source document:
<document>
{source_text}
</document>

Here is the chunk we want to situate within the whole document:
<chunk>
{text_chunk}
</chunk>

Answer only with the succinct context and nothing else.

Claude có thể tạo ra ngữ cảnh như: "Phần này trích từ một báo cáo lớn về một nhóm đa ngành. Nó bao gồm đề cập đến INC-2023-04-011, mã này cũng được nhắc đến trong phần Phân tích An ninh mạng."

Sau đó, bạn kết hợp ngữ cảnh vừa tạo với văn bản chunk gốc để tạo thành một "chunk đã được bổ sung ngữ cảnh" (contextualized chunk) và lưu vào các index vector và BM25.

Xử lý tài liệu lớn

Nếu tài liệu nguồn của bạn quá lớn, không thể đưa vừa vào một prompt duy nhất, bạn có thể cung cấp một tập hợp ngữ cảnh rút gọn thay vì toàn bộ tài liệu.

Đối với bất kỳ chunk nào bạn đang bổ sung ngữ cảnh, hãy bao gồm:

  • Một vài chunk từ đầu tài liệu (thường chứa phần tóm tắt hoặc lời mở đầu)
  • Các chunk ngay trước chunk mục tiêu (cung cấp ngữ cảnh cục bộ)

Cách tiếp cận này cung cấp cho Claude đủ thông tin để tạo ra ngữ cảnh có ý nghĩa mà không làm quá tải prompt với toàn bộ tài liệu.

Ví dụ triển khai

Dưới đây là một ví dụ triển khai cơ bản của hàm contextual retrieval:

def add_context(text_chunk, source_text):
    prompt = f"""
    Write a short and succinct snippet of text to situate this chunk within the 
    overall source document for the purposes of improving search retrieval of the chunk.
    
    Here is the original source document:
    <document>
    {source_text}
    </document>
    
    Here is the chunk we want to situate within the whole document:
    <chunk>
    {text_chunk}
    </chunk>
    
    Answer only with the succinct context and nothing else.
    """
    
    messages = []
    add_user_message(messages, prompt)
    result = chat(messages)
    
    return result["text"] + "\n" + text_chunk

Khi xử lý các chunk của tài liệu, bạn sẽ lặp qua từng chunk và tạo các phiên bản đã được bổ sung ngữ cảnh:


for i, chunk in enumerate(chunks):
    # Xây dựng ngữ cảnh từ các chunk đầu tiên và các chunk liền trước
    context_parts = []
    context_parts.extend(chunks[:min(num_start_chunks, len(chunks))])
    
    start_idx = max(0, i - num_prev_chunks)
    context_parts.extend(chunks[start_idx:i])
    
    context = "\n".join(context_parts)
    
    contextualized_chunk = add_context(chunk, context)
    retriever.add_document({"content": contextualized_chunk})

Kết quả mong đợi

Ngữ cảnh được tạo ra cung cấp thông tin giá trị về cấu trúc và mối quan hệ trong tài liệu. Ví dụ, Claude có thể mô tả một chunk là "Phần 2 của Đánh giá Nghiên cứu Đa ngành Hàng năm, chi tiết về các nỗ lực kỹ thuật phần mềm nhằm giải quyết vấn đề ổn định trong Dự án Phoenix. Nó nằm sau phần Phương pháp luận và trước phần Phân tích Tài chính, thuộc một báo cáo toàn diện bao gồm mười lĩnh vực nghiên cứu trong tổ chức."

Ngữ cảnh bổ sung này giúp hệ thống retrieval hiểu rõ hơn không chỉ nội dung của từng chunk mà còn cách nó khớp vào cấu trúc tài liệu lớn hơn và liên quan như thế nào đến các phần khác. Mặc dù bạn có thể không thấy sự cải thiện rõ rệt với các tài liệu đơn giản, nhưng contextual retrieval ngày càng trở nên giá trị khi tài liệu của bạn phức tạp hơn với các tham chiếu chéo và sự phụ thuộc lẫn nhau giữa các phần.

Tải về

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?