Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 8 — Vận hành thực tế: index freshness, cập nhật và giám sát

Đã đọc 0/9 mục · còn khoảng 3 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

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_at trong 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ết khóa. Bạn giờ có thể xây một agent RAG hoàn chỉnh: chunk đúng cách, đo bằng recall@k, rerank để chính xác, agentic để linh hoạt, và vận hành để giữ tươi mới lâu dài.

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