LLM & NLP

Context rot và "lost in the middle": context dài không phải lúc nào cũng tốt

Tóm tắt

Lost in the Middle (2023) cho thấy model tìm tốt nhất ở đầu và cuối context; Context Rot của Chroma (18 model) cho thấy chất lượng giảm khi input dài ra kể cả với việc đơn giản. Đưa ít nhưng đúng, dọn nhiễu và kiểm thử ở độ dài thật.

Cửa sổ ngữ cảnh của LLM đã lên tới hàng trăm nghìn, thậm chí hàng triệu token. Cám dỗ rất lớn: cứ nhồi hết tài liệu vào, model sẽ tự tìm. Nhưng hai nghiên cứu đáng đọc cho thấy điều ngược lại: model không dùng đều mọi phần của context, và chất lượng giảm dần khi input dài ra, kể cả với tác vụ rất đơn giản. Hiện tượng này được gọi là context rot (ngữ cảnh "mục" dần).

Nghiên cứu 1: Lost in the Middle (2023)

Liu và cộng sự (2023) thử hai tác vụ: trả lời câu hỏi từ nhiều tài liệu, và truy xuất giá trị theo khoá trong danh sách key–value dài. Họ thay đổi vị trí của thông tin cần tìm trong context.

  • Kết quả có dạng chữ U: model làm tốt nhất khi thông tin nằm ở đầu hoặc cuối context.
  • Khi thông tin nằm ở giữa, hiệu năng giảm rõ rệt.
  • Hiện tượng xuất hiện cả ở các model được quảng cáo là "long-context".

Nghiên cứu 2: Context Rot (Chroma, 2025)

Nhóm nghiên cứu của Chroma kiểm tra 18 model của Anthropic, OpenAI, Google và Alibaba với các tác vụ có kiểm soát:

Phát hiệnÝ nghĩa
Input dài hơn làm giảm độ tin cậy, kể cả tác vụ chép lại hay truy xuất đơn giảnKhông thể giả định "có trong context = được dùng"
Câu hỏi càng ít trùng từ/ý với đoạn cần tìm, hiệu năng càng giảm nhanh theo độ dàiBenchmark "kim đáy bể" (khớp từ khoá) quá dễ so với thực tế
Đoạn gây nhiễu (giống nhưng sai) làm giảm độ chính xác; nhiều đoạn nhiễu thì giảm thêmTài liệu phiên bản cũ, bản nháp trong context rất nguy hiểm
Văn bản đệm bị xáo trộn lại cho kết quả tốt hơn văn bản mạch lạcCấu trúc context ảnh hưởng theo cách khó đoán, phải đo
LongMemEval: prompt tập trung (~300 token) thắng prompt đầy đủ (~113k token) ở mọi họ modelChọn lọc ngữ cảnh đúng phần thường thắng đưa hết vào

Báo cáo cũng ghi nhận các họ model phản ứng khác nhau khi gặp nhiễu: model Claude ít ảo giác nhất và hay từ chối trả lời khi không chắc, trong khi GPT ảo giác nhiều nhất trong thí nghiệm.

Chiến thuật chống context rot

  1. Chọn lọc trước khi nạp: dùng truy xuất (RAG) hoặc bước lọc để chỉ đưa phần liên quan.
  2. Đặt đúng chỗ: tài liệu dài lên đầu, câu hỏi và chỉ dẫn quan trọng ở cuối.
  3. Loại bỏ nhiễu: xoá phiên bản cũ, bản trùng, log không liên quan; đánh dấu rõ nguồn nào có hiệu lực.
  4. Cấu trúc hoá: bọc từng tài liệu trong thẻ có tên và metadata để model định vị.
  5. Trích trước, trả lời sau: yêu cầu model trích các đoạn liên quan rồi mới lập luận.
  6. Dọn context trong phiên dài: với agent, xoá kết quả tool cũ hoặc tóm tắt định kỳ thay vì để phình mãi.

Rủi ro và lưu ý

  • Kết quả phụ thuộc model và tác vụ: đây là xu hướng, không phải con số cố định. Model mới có thể cải thiện; hãy tự đo.
  • Cắt quá tay cũng hỏng: lọc quá mạnh làm mất thông tin cần thiết. Cân bằng bằng eval.
  • Chi phí kép: context dài vừa đắt hơn vừa có thể kém chính xác hơn, nên "nhồi cho chắc" là lựa chọn tệ cả hai mặt.

Áp dụng thế nào?

  • Dev: Kiểm thử ở đúng độ dài input thật của sản phẩm, đặt thông tin cần tìm ở nhiều vị trí khác nhau, xem độ chính xác có giảm ở giữa không.
  • Tech Lead: Đưa "ngân sách context" vào thiết kế: mỗi loại dữ liệu được phép chiếm bao nhiêu token, ưu tiên gì khi vượt.
  • PM: Đừng quảng bá tính năng bằng "đọc được 1 triệu token". Hãy đo và hứa trên chất lượng trả lời ở độ dài thực tế.

Nguồn & tham khảo

  1. Lost in the Middle: How Language Models Use Long Contexts — Liu et al. (arXiv)
  2. Context Rot: How Increasing Input Tokens Impacts LLM Performance — Chroma Research