Xây xong agent mới là một nửa. Nửa còn lại là vận hành nó an toàn trong đời thực, phát hiện lỗi sớm, và cải thiện dần. Bài này biến prototype thành một hệ thống đáng tin.
Triển khai theo giai đoạn (rollout)
Đừng bật full ngay. Đi theo 4 giai đoạn, mỗi giai đoạn vài ngày:
- Shadow mode: agent phân loại và ghi log, KHÔNG hành động gì trên inbox. Bạn so kết quả agent với phán đoán của mình.
- Label-only: bật gắn nhãn + ưu tiên (an toàn nhất).
- Draft + forward nội bộ: bật soạn nháp và chuyển tiếp trong công ty.
- Mở rộng: tăng số email/lần, thêm category, cân nhắc auto-reply cho ca chuẩn hóa.
Chỉ số cần đo
- Accuracy phân loại = số phân loại đúng / tổng (mục tiêu > 90%)
- Escalation precision = escalate đúng / tổng escalate
- Draft acceptance = nháp gửi mà không sửa / tổng nháp
- Coverage = email agent xử lý / tổng email
- False archive rate = email quan trọng bị ẩn nhầm (mục tiêu ~0)
False archive rate là chỉ số an toàn tối quan trọng: bỏ sót một email quan trọng tệ hơn nhiều so với phân loại sai nhẹ.
Vòng lặp cải thiện dựa trên log
1. Mỗi tuần export log các quyết định.
2. Lọc ca sai (con người sửa nhãn / xóa nháp / phân loại khác).
3. Nhóm lỗi theo pattern (vd "email tiếng Anh bị nhầm spam").
4. Thêm ca sai thành ví dụ few-shot mới HOẶC sửa quy tắc.
5. Chạy lại trên tập test, xác nhận không hồi quy.
6. Deploy prompt mới, tiếp tục theo dõi.
Đây là cách agent "học": không phải tự nó thông minh lên, mà bạn dùng dữ liệu lỗi để tinh chỉnh liên tục.
Giám sát vận hành
- Log mọi quyết định (Bài 2): email_id, category, action, confidence, executed, timestamp.
- Cảnh báo bất thường: nếu bỗng dưng 80% email bị gán 1 category, có thể prompt/model hỏng — báo ngay.
- Giới hạn tốc độ: trần số hành động/giờ để một lỗi không spam hàng trăm nháp.
- Báo cáo hằng ngày: email tóm tắt "hôm nay agent xử lý X, escalate Y, cần duyệt Z".
- Xử lý lỗi API: retry có backoff; nếu LLM/Gmail lỗi, để email nguyên trạng, không mất dữ liệu.
Ví dụ: ghi log một quyết định
def log_decision(db, email_id, result, executed):
db.execute(
"INSERT INTO agent_log(email_id,category,priority,action,"
"confidence,executed,ts) VALUES(?,?,?,?,?,?,datetime('now'))",
(email_id, result["category"], result["priority"],
result["action"], result["confidence"], executed))
Khung SLO an toàn trước khi mở rộng
Chỉ nới quyền cho agent khi đạt các ngưỡng:
- [ ] Accuracy phân loại > 90% trên 2 tuần liên tục.
- [ ] False archive rate ~ 0.
- [ ] Draft acceptance > 70% (nháp dùng được mà ít sửa).
- [ ] Không sự cố escalate sai email nhạy cảm.
- [ ] Kill switch đã test, tắt được trong 1 phút.
Checklist vận hành
- [ ] Bắt đầu shadow mode, không hành động.
- [ ] Có kill switch tắt nhanh.
- [ ] Log đầy đủ mọi quyết định.
- [ ] Rate limit chống spam khi lỗi.
- [ ] Báo cáo hằng ngày + cảnh báo bất thường.
- [ ] Vòng lặp review log hằng tuần.
Sai lầm thường gặp
- Bật full quyền ngay ngày đầu. Không có shadow mode nghĩa là lỗi đầu tiên xảy ra trên inbox thật với hậu quả thật. Luôn shadow trước.
- Không có kill switch. Khi agent phát điên (bug, model đổi hành vi), bạn cần tắt trong vài giây, không phải sửa code gấp.
- Không log. Không có log thì không cải thiện được, cũng không giải trình được khi có khiếu nại.
- Không rate limit. Một vòng lặp lỗi có thể tạo 500 nháp hoặc forward 500 lần trước khi bạn kịp phản ứng.
- Chỉ đo accuracy, bỏ qua false archive. Một agent 95% đúng nhưng thỉnh thoảng ẩn email hợp đồng quan trọng vẫn là thất bại.
- Coi agent là "làm xong để đó". Ngôn ngữ, khách hàng, loại email thay đổi theo thời gian; không review định kỳ thì độ chính xác trôi dần (drift).
Tổng kết khóa học
Bạn đã đi trọn vòng: hiểu triage → kiến trúc 6 tầng → kết nối inbox → prompt phân loại → gắn nhãn/ưu tiên → soạn nháp an toàn → định tuyến/escalation → vận hành và cải thiện. Nguyên tắc xuyên suốt: agent đề xuất, con người kiểm soát; bắt đầu bảo thủ, nới quyền dần theo dữ liệu tin cậy. Giờ hãy áp dụng lên một hộp thư test của chính bạn.