RAG chạy tốt hôm nay không có nghĩa tốt tháng sau. Tài liệu thay đổi, chính sách cập nhật, câu hỏi người dùng dịch chuyển. Bài này về vận hành RAG trong production: giữ index tươi mới, cập nhật đúng cách, và giám sát để phát hiện xuống cấp.
Index freshness — vì sao quan trọng
Nếu quy chế sửa hôm qua mà index vẫn giữ bản cũ, agent sẽ tự tin trả lời sai theo bản cũ. Đây là lỗi nguy hiểm nhất trong vận hành vì agent trả lời trôi chảy, người dùng tin, nhưng nội dung đã lỗi thời.
Chiến lược cập nhật index
- Full reindex: xây lại toàn bộ định kỳ. Đơn giản, chậm, tốn — hợp khi dữ liệu nhỏ.
- Incremental update: chỉ cập nhật tài liệu thay đổi. Cần theo dõi thay đổi.
- Upsert theo document_id: khi một tài liệu đổi, xóa hết chunk cũ của nó rồi nạp chunk mới.
def update_document(doc_id, new_text):
client.delete("docs", points_filter={"key": "doc_id", "match": {"value": doc_id}})
for i, chunk in enumerate(chunk_document(new_text)):
client.upsert("docs", [make_point(doc_id, i, chunk)])
Phát hiện tài liệu thay đổi
- Lưu hash nội dung mỗi tài liệu khi index.
- Định kỳ quét nguồn, so hash: khác → reindex tài liệu đó.
- Lưu
updated_attrong metadata để agent ưu tiên bản mới và cảnh báo bản cũ.
if sha256(new_text) != stored_hash[doc_id]:
update_document(doc_id, new_text)
stored_hash[doc_id] = sha256(new_text)
Xử lý tài liệu hết hiệu lực
Đừng chỉ thêm bản mới mà quên bản cũ. Đánh dấu active=False hoặc xóa chunk của tài liệu đã thu hồi, và filter active=True khi retrieval (Bài 6). Nếu không, agent trộn lẫn chính sách cũ và mới.
Giám sát chất lượng trong production
- Log mọi truy vấn: câu hỏi, chunk retrieval, điểm rerank, câu trả lời.
- Theo dõi tỉ lệ "không tìm thấy": tăng đột biến → index thiếu nội dung mới.
- Chạy lại gold set định kỳ (regression test): recall@5 tụt → có gì đó hỏng.
- Thu phản hồi người dùng (đúng/sai) gắn với chunk đã dùng để tìm điểm yếu.
log.write({
"q": question, "rewritten": query,
"retrieved_ids": ids, "rerank_scores": scores,
"answer": answer, "citations": sources, "ts": now()
})
Khung tư duy vận hành: 4 vòng lặp sức khỏe
- Tươi mới (freshness): tài liệu đổi → index đổi trong bao lâu?
- Đúng đắn (correctness): recall@5 trên gold set còn ổn không?
- Bao phủ (coverage): tỉ lệ "không tìm thấy" có tăng?
- Tin cậy (trust): phản hồi người dùng đúng/sai xu hướng ra sao?
Checklist vận hành production
- [ ] Có cơ chế phát hiện tài liệu thay đổi (hash) + cập nhật incremental.
- [ ] Xóa/vô hiệu hóa chunk của tài liệu hết hiệu lực; retrieval filter
active. - [ ] Metadata
updated_atđể ưu tiên và cảnh báo nội dung cũ. - [ ] Log đầy đủ query → retrieval → answer để debug.
- [ ] Regression test recall@k định kỳ, có cảnh báo khi tụt.
- [ ] Thu và soi phản hồi người dùng để vá điểm yếu.
Sai lầm thường gặp
- Index một lần rồi quên: tài liệu đổi, index không đổi, agent trả lời theo bản cũ đầy tự tin.
- Chỉ thêm, không xóa: bản cũ và mới cùng tồn tại, retrieval trộn lẫn → mâu thuẫn.
- Không có regression test: đổi model/chunk vô tình làm tụt recall mà không ai biết.
- Không log: khi agent trả lời sai, không tái hiện được để sửa.
- Bỏ qua tỉ lệ "không tìm thấy": chỉ số này tăng là tín hiệu sớm cho biết index đã lỗi thời hoặc thiếu nội dung.
Học xong bài này rồi?
Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu,
và học hết khóa thì có chứng chỉ.
Lưu tiến độ của tôi