Gắn nhãn (labeling) là hành động an toàn nhất của agent — nó không gửi gì ra ngoài, không thể làm phiền ai. Vì thế đây là tính năng đầu tiên nên bật thật. Bài này biến kết quả JSON từ Bài 4 thành nhãn và mức ưu tiên hiển thị trong inbox.
Thiết kế hệ thống nhãn
Dùng nhãn có tiền tố để nhóm gọn trong Gmail:
AI/Category/DonHang
AI/Category/KhieuNai
AI/Category/HoaDon
AI/Priority/Khan
AI/Priority/BinhThuong
AI/Action/CanDuyet
Tiền tố AI/ giúp bạn dễ lọc, dễ tắt, và biết ngay nhãn nào do agent tạo. Priority tách riêng khỏi Category để một email mang nhiều nhãn theo nhiều trục.
Ví dụ: gắn nhãn qua Gmail API
def ensure_label(service, name):
labels = service.users().labels().list(userId="me").execute()["labels"]
for l in labels:
if l["name"] == name:
return l["id"]
created = service.users().labels().create(
userId="me", body={"name": name}).execute()
return created["id"]
def apply_labels(service, msg_id, result):
cat_id = ensure_label(service, f"AI/Category/{result['category']}")
pri_id = ensure_label(service, f"AI/Priority/{result['priority']}")
service.users().messages().modify(
userId="me", id=msg_id,
body={"addLabelIds": [cat_id, pri_id]}
).execute()
Ưu tiên bằng cách nào
Gắn nhãn là một chuyện; giúp con người thấy cái khẩn trước là chuyện khác. Ba cơ chế:
- Star/gắn sao email
priority=khan(Gmail API: thêm nhãnSTARRED). - Chuyển email
cho_duocra khỏi Inbox (bỏ nhãnINBOX) để inbox chỉ còn việc thật. - Tạo báo cáo tóm tắt buổi sáng: một email tự gửi cho bạn liệt kê "3 email khẩn cần xử lý hôm nay".
Khung ưu tiên: ma trận Impact × Urgency
| Khẩn | Không khẩn | |
|---|---|---|
| Ảnh hưởng cao | Xử lý NGAY (sao đỏ) | Lên lịch |
| Ảnh hưởng thấp | Ủy quyền/nhanh gọn | Lưu trữ/bỏ qua |
Các bước triển khai
- Tạo trước bộ nhãn một lần (idempotent — hàm
ensure_labelkhông tạo trùng). - Map kết quả JSON → nhãn: một hàm thuần, dễ test.
- Gắn nhãn cho 20 email test, KHÔNG gửi gì, KHÔNG xóa gì.
- Rà soát tay: mở inbox, xem nhãn đúng bao nhiêu %. Ghi lại ca sai.
- Tinh chỉnh prompt dựa trên ca sai rồi chạy lại — vòng lặp cải thiện.
- Khi đạt độ chính xác chấp nhận được (vd >85%), bật ưu tiên (sao/chuyển inbox).
Checklist
- [ ] Nhãn có tiền tố
AI/để dễ quản lý và tắt. - [ ] Hàm tạo nhãn idempotent (không trùng).
- [ ] Category và Priority tách trục.
- [ ] Đã đo độ chính xác trên tập test.
- [ ] Chỉ gắn nhãn ở giai đoạn đầu, chưa gửi/xóa.
Bắt đầu bảo thủ, nới dần
Giai đoạn 1: chỉ gắn nhãn (agent không đụng gì ngoài dán nhãn). Giai đoạn 2: thêm gắn sao email khẩn. Giai đoạn 3: chuyển email rác ra khỏi inbox. Mỗi giai đoạn chạy vài ngày, kiểm tra, rồi mới nới. Đây là triết lý "human trust builds gradually".
Sai lầm thường gặp
- Cho agent lưu trữ/xóa ngay từ đầu. Nếu phân loại sai, email quan trọng biến mất khỏi tầm mắt. Chỉ gắn nhãn trước, ẩn/xóa sau khi đã tin tưởng.
- Nhãn không idempotent, mỗi lần chạy tạo thêm nhãn trùng tên rác đầy tài khoản.
- Trộn nhiều trục vào một nhãn như
KhieuNai-Khan, khiến số nhãn bùng nổ theo tổ hợp. Tách Category và Priority. - Không đo độ chính xác mà đã bật hành động mạnh. Luôn có giai đoạn "chỉ gắn nhãn để quan sát".
- Đặt tên nhãn tùy hứng mỗi email (do prompt trả tên tự do). Nhãn phải từ enum cố định — nối tiếp bài học structured output.