Ngữ cảnh dài không giết chết RAG — nó chỉ thay đổi vai trò của RAG
Cứ mỗi lần một mô hình ra mắt cửa sổ ngữ cảnh lớn hơn, lại xuất hiện đúng một bài viết quen thuộc: RAG chết rồi, cứ nhét hết vào prompt là xong. Lập luận đó đã được đưa ra ở mốc 128K, ở 200K, ở một triệu token, và sẽ lại được đưa ra ở mười triệu.
Nghe thì hợp lý, và tôi đã chứng kiến vài đội thật sự làm theo. Chuyện xảy ra sau đó lặp lại đủ nhiều để thành một quy luật: bản thử nghiệm rất đẹp, hóa đơn đầu tiên thì không, và đến tháng thứ hai họ lặng lẽ dựng lại một lớp truy xuất — kém tiện hơn cái mà họ đã bỏ qua lúc đầu.
Ngữ cảnh dài thật sự hữu ích. Nó chỉ không làm được đúng việc mà mọi người kỳ vọng.
Kho tài liệu của bạn không vừa, và không hề sát nút
Bắt đầu bằng ràng buộc nhàm chán nhất. Một triệu token nghe khổng lồ cho đến khi bạn đặt một thứ có thật lên bàn cân.
| Kho tài liệu | Số token ước lượng |
|---|---|
| Một hợp đồng dài | ~30K |
| Một năm Slack của một đội | ~5M |
| 2.885 biểu mẫu và hướng dẫn của IRS (kho demo của chúng tôi) | ~40M |
| SharePoint của một công ty tầm trung | 100M–1B+ |
Kho tài liệu đứng sau /demo trên trang này lớn gấp khoảng bốn mươi lần một cửa sổ triệu
token, mà nó chỉ là bốn nghìn file PDF — một con số làm tròn so với những gì một công ty
200 người tích lũy sau một thập kỷ dùng ổ đĩa chung.
Vậy nên “cứ nhét hết vào prompt” đã bị loại ngay từ bước đầu với phần lớn doanh nghiệp. Câu hỏi đáng quan tâm không phải là có chọn ra một tập con hay không, mà là chọn như thế nào. Và chọn ra tập con liên quan trong một kho tài liệu chính là định nghĩa của truy xuất. Bạn không được phép bỏ qua nó. Bạn chỉ được chọn làm nó cho tử tế hay làm nó một cách tình cờ.
Chi phí mỗi câu hỏi mới là thứ kết thúc tranh luận
Giả sử kho tài liệu của bạn vừa vặn. Nói 500K token, và bạn nhét toàn bộ vào mỗi truy vấn.
Với mức giá tầm trung của các mô hình hàng đầu — tạm tính 3 đô mỗi triệu token đầu vào, và hãy kiểm tra giá hiện tại vì chúng thay đổi liên tục — đó là 1,50 đô mỗi câu hỏi. Một pipeline truy xuất gửi tám đoạn văn tốt thì tốn khoảng 8K token: chừng 2,4 xu.
| Cách làm | Token đầu vào/truy vấn | Chi phí/truy vấn | 16.000 truy vấn/tháng |
|---|---|---|---|
| Nhét cả kho tài liệu | 500.000 | ~1,50 đô | ~24.000 đô |
| Truy xuất 8 đoạn | 8.000 | ~0,024 đô | ~384 đô |
Chênh lệch sáu mươi lần, trên cùng một mô hình.
Phản biện thường gặp là prompt caching, và đó là phản biện xác đáng — cache một tiền tố tĩnh cắt giảm đáng kể chi phí cho các lần lặp lại. Nhưng nó chỉ giúp khi kho tài liệu ổn định, cache đang nóng, và mọi người dùng đều hỏi trên cùng bộ tài liệu. Đổi một file là trả lại từ đầu. Có phân quyền tài liệu theo từng người dùng là không thể dùng chung cache. Im lặng một giờ là TTL lấy đi. Caching biến một con số tàn nhẫn thành một con số chỉ đơn thuần là tệ, trong điều kiện thuận lợi.
Độ chính xác suy giảm trước khi cửa sổ đầy
Các bài kiểm tra “cây kim trong đống cỏ” đi kèm mỗi mô hình mới là có thật, và các mô hình vượt qua rất thuyết phục. Chúng cũng là phiên bản dễ nhất có thể của bài toán: một dữ kiện nguyên văn, cắm giữa văn bản độn, tìm lại bằng khớp chính xác.
Câu hỏi thật không giống vậy chút nào. Nó cần bốn dữ kiện từ ba tài liệu, trong đó một cái mâu thuẫn với cái khác vì nó từ năm 2023, và câu trả lời đúng phụ thuộc vào việc nhận ra cái nào còn hiệu lực. Hiệu năng trên kiểu suy luận nhiều dữ kiện đó bắt đầu tụt từ rất lâu trước khi bạn chạm giới hạn ngữ cảnh — và nó tụt ở giữa cửa sổ nhiều hơn ở hai đầu.
Đây là phần thường bị xem nhẹ: ngữ cảnh không liên quan không hề miễn phí. Mỗi tài liệu trong prompt có vẻ liên quan đến câu hỏi là một thứ gây nhiễu mà mô hình phải loại trừ. Nhồi đầy cửa sổ bằng tất cả những gì bạn có không cho mô hình thêm chất liệu; nó cho mô hình thêm cơ hội trả lời từ nhầm trang. Tôi đã thấy câu trả lời dựa trên truy xuất thắng câu trả lời dựa trên toàn bộ kho tài liệu, cùng mô hình, cùng bộ câu hỏi, đơn giản vì bản truy xuất chứa ít lựa chọn sai hơn.
Độ trễ mà người dùng cảm nhận được
Thời gian đến token đầu tiên tỉ lệ với đầu vào. Một prompt 500K token mất vài giây để nạp trước khi chữ đầu tiên xuất hiện. Một prompt 8K token gần như tức thì.
Với một công cụ nội bộ mà người ta dùng bốn mươi lần mỗi ngày, khác biệt đó quyết định công cụ trở thành thói quen hay thành thứ chỉ mở ra khi bắt buộc. Không ai gửi phiếu hỗ trợ ghi “trợ lý chậm sáu giây”. Họ chỉ ngừng dùng.
Điều thật sự quan trọng: trích dẫn nguồn
Hỏi một mô hình ngữ cảnh dài về một đống 400 trang tài liệu, bạn nhận được một đoạn văn. Hỏi một hệ thống truy xuất, bạn nhận được một đoạn văn cộng với bốn đoạn trích này, từ những tài liệu này, ở những trang này.
Nếu bạn làm trong lĩnh vực có quy định chặt — luật, y tế, thuế, tài chính — khác biệt đó chính là toàn bộ sản phẩm. Một câu trả lời không ai kiểm chứng được thì không phải là kết quả dùng được; nó chỉ là một gợi ý. Và truy xuất còn cho bạn gần như miễn phí phần hạ tầng xung quanh: phân quyền tài liệu theo người dùng được thực thi ngay ở bước truy xuất, một file mới có thể tìm thấy ngay khi được lập chỉ mục thay vì phải chờ dựng lại prompt, và một nhật ký ghi rõ nguồn nào tạo ra câu trả lời nào.
Bạn có thể yêu cầu một mô hình ngữ cảnh dài trích dẫn nguồn. Nó sẽ trích. Một số trích dẫn sẽ trỏ tới những số trang không hề nói điều nó khẳng định, và bạn sẽ không biết là cái nào nếu không kiểm tra tất cả.
Điều tôi thật sự xây dựng hiện nay
Không phải chọn một trong hai. Ngữ cảnh dài đã thay đổi hình dạng của truy xuất, và thay đổi đó là có thật:
Truy xuất rộng hơn, chia đoạn lớn hơn. Khi ngân sách ngữ cảnh chỉ là 8K token, bạn đưa vào ba đoạn nhỏ rồi cầu may. Với cửa sổ lớn, bạn có thể đưa 8–15 đoạn rộng rãi kèm nguyên phần mục xung quanh. Ranh giới chia đoạn không còn là chỗ dễ vỡ nhất của hệ thống. Đây là một cải thiện chất lượng thực chất, và nó đến trực tiếp từ cửa sổ lớn hơn.
Vẫn xếp hạng lại, vẫn cắt bớt. Thu hồi rộng, rồi dùng cross-encoder để sắp xếp, rồi gửi đi một nhúm tốt nhất. Cửa sổ cho phép bạn hào phóng; nó không có nghĩa là bạn nên bừa bãi.
Bỏ qua truy xuất khi đơn vị công việc là một tài liệu. “Tóm tắt hợp đồng này”, “so sánh hai hồ sơ này”, “review PR này” — cả tài liệu vừa cửa sổ, rõ ràng là liên quan, và chia đoạn nó chỉ làm mất cấu trúc. Truy xuất ở đây là chi phí thừa. Đây mới là chỗ ngữ cảnh dài giỏi một cách không thể bàn cãi.
Quy tắc tôi sẽ đưa cho một đội trong một câu: nếu câu hỏi nói về một tài liệu đã biết, hãy dùng cửa sổ; nếu câu hỏi nói về kho tài liệu của bạn, hãy dùng truy xuất. Phần lớn câu hỏi trong kinh doanh thuộc loại thứ hai, và đó là lý do lớp truy xuất cứ mãi không chết.
Tóm lại
Ngữ cảnh dài là một cái ống dẫn tốt hơn, không phải thứ thay thế cho việc biết nên đưa gì vào ống. Nó làm các hệ thống truy xuất tốt lên — đoạn lớn hơn, nhiều đoạn hơn, ranh giới bớt mong manh — và làm công việc trên một tài liệu đơn lẻ dễ hơn hẳn. Thứ nó không làm được là khiến câu hỏi “trong 40 triệu token của tôi, phần nào quan trọng cho truy vấn này?” biến mất.
Câu hỏi đó chính là truy xuất. Nó luôn luôn là truy xuất. Cửa sổ chỉ vừa đủ rộng để việc trả lời nó cho tử tế trở nên rẻ.
Nếu bạn muốn thấy khác biệt thay vì đọc về nó, demo trên trang này chạy truy xuất lai trên 2.885 biểu mẫu IRS và chỉ trả lời từ những gì nó truy xuất được — kèm theo các đoạn trích đã dùng cho mỗi khẳng định.