Product Management
Đăng nhập
ESC

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

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

Bài 7 — Vận hành: cập nhật tài liệu, phiên bản và giám sát

Đã đọc 0/11 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.

Agent Q&A không phải dự án "làm xong rồi thôi". Tài liệu công ty thay đổi liên tục; nếu index không theo kịp, agent trả lời thông tin cũ — nguy hiểm hơn cả không có agent. Bài này về vận hành.

Thách thức: đồng bộ index với nguồn

Khi HR sửa chính sách phép từ 14 lên 16 ngày, agent phải trả lời 16 ngay, và không còn trả về chunk cũ nói 14.

Bước 1: Chọn cơ chế cập nhật

  • Theo lịch (scheduled re-index): chạy cron mỗi đêm/tuần quét nguồn, cập nhật chunk thay đổi. Đơn giản, phù hợp đa số.
  • Theo sự kiện (event-driven): webhook từ Google Drive/Confluence kích hoạt re-index đúng tài liệu vừa sửa. Cập nhật gần thời gian thực.
  • Thủ công: nút "đồng bộ ngay" cho owner sau khi sửa tài liệu quan trọng.

Bước 2: Cập nhật tăng dần (incremental), đừng làm lại toàn bộ

Tính hash nội dung mỗi tài liệu; chỉ re-embed cái đã đổi. Nhớ xóa chunk cũ của tài liệu đó trước khi nạp chunk mới — nếu không, chunk cũ ở lại và gây mâu thuẫn.

def sync(doc):
    h = content_hash(doc.text)
    if h == store.get_hash(doc.id):
        return "unchanged"
    store.delete_by_doc(doc.id)          # xóa chunk cũ TRƯỚC
    chunks = chunk_and_embed(doc)
    store.upsert_many(chunks)
    store.set_hash(doc.id, h)
    return "reindexed"

Bước 3: Quản lý phiên bản và ngày hiệu lực

  • Mỗi chunk mang version và effective_date.
  • Retrieval mặc định lọc lấy bản hiện hành.
  • Khi cần audit "chính sách hồi tháng 3 là gì?", giữ bản cũ ở trạng thái archived và cho phép truy vấn có chủ đích.

Bước 4: Giám sát (monitoring) khi chạy thật

Ghi log mỗi truy vấn: câu hỏi, chunk lấy về, câu trả lời, có abstain không, phản hồi 👍/👎 của người dùng. Theo dõi:

  • Tỷ lệ 'không tìm thấy' tăng đột biến → có nguồn bị hỏng/thiếu.
  • Câu hỏi không trả lời được → khoảng trống tài liệu (content gap) cần bổ sung.
  • Phản hồi 👎 → ứng viên cho vòng cải thiện (bài 6).
  • Độ trễ và chi phí token.

Bước 5: Vòng phản hồi đóng

Gom câu hỏi bị 👎 hoặc abstain thành hàng đợi content gap, chuyển cho owner tài liệu bổ sung, rồi re-index. Agent "tự tốt lên" nhờ quy trình này, không phải nhờ phép màu.

Khung tư duy: vòng đời tài liệu trong RAG

Tạo/Sửa tài liệu → phát hiện thay đổi (hash/webhook)
  → xóa chunk cũ → re-chunk + embed → cập nhật index
  → giám sát truy vấn → phát hiện gap → quay lại Sửa

Ví dụ: cập nhật bảng giá

Sales đổi giá gói Basic 200k → 250k. Nếu chỉ upsert chunk mới mà quên xóa chunk 200k, retrieval có thể trả về chunk cũ, agent báo giá sai cho khách. Đúng quy trình: delete_by_doc trước, upsert sau, kiểm tra bằng một câu hỏi vàng "giá gói Basic?".

Checklist vận hành

  • [ ] Có cơ chế phát hiện thay đổi (hash hoặc webhook).
  • [ ] Xóa chunk cũ trước khi nạp chunk mới của cùng tài liệu.
  • [ ] Retrieval lọc bản hiện hành theo version/effective_date.
  • [ ] Log truy vấn + phản hồi 👍/👎.
  • [ ] Có hàng đợi content gap và người chịu trách nhiệm bổ sung.
  • [ ] Chạy lại golden set sau mỗi lần re-index lớn.

Sai lầm thường gặp

  • Không xóa chunk cũ → thông tin lỗi thời sống dai, trả lời mâu thuẫn.
  • Re-index toàn bộ mỗi lần → tốn kém, chậm; hãy làm incremental.
  • Không giám sát → không biết agent đang sai cho tới khi có sự cố.
  • Bỏ qua content gap → cùng câu hỏi thất bại lặp lại mãi.
  • Không gắn version → không audit được "chính sách lúc đó là gì".
Bài 8: gói mọi thứ thành một hệ thống hoàn chỉnh và triển khai an toàn.

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