Đây là bước có giá trị cao nhất nhưng rủi ro nhất. Nguyên tắc vàng: agent soạn NHÁP (draft), con người bấm gửi. Draft nằm trong hộp thư chờ bạn duyệt — không có email nào tự bay đi.
Vì sao luôn là draft, không auto-send
- LLM có thể hiểu sai ngữ cảnh, hứa điều công ty không làm được.
- Một câu trả lời sai gửi cho khách/sếp gây hậu quả thật, không rút lại được.
- Draft giữ human-in-the-loop: bạn duyệt trong 5 giây thay vì viết trong 5 phút — vẫn tiết kiệm 90% thời gian mà an toàn.
Cấu trúc prompt soạn nháp
Tách biệt hoàn toàn khỏi prompt phân loại. Prompt draft cần ngữ cảnh nghiệp vụ:
Bạn soạn NHÁP trả lời cho CSKH shop thời trang. Giọng: lịch sự, ngắn gọn, tiếng Việt.
QUY TẮC:
- KHÔNG hứa hoàn tiền/đền bù cụ thể — chỉ nói sẽ kiểm tra và phản hồi.
- KHÔNG bịa thông tin đơn hàng, mã giảm giá, chính sách.
- Nếu thiếu thông tin, hỏi lại khách lịch sự.
- Kết bằng: "Trân trọng, Bộ phận CSKH".
- Nếu email nhạy cảm (pháp lý, đe dọa, báo chí): KHÔNG soạn, trả về {"skip":true}.
Email khách: <nội dung>
Ví dụ đầu ra tốt
Email: "Đơn #4821 thiếu 1 áo, tôi cần gấp."
Nháp agent tạo:
Chào anh/chị,
Cảm ơn anh/chị đã báo. Em rất tiếc về việc đơn #4821 giao thiếu.
Em đang kiểm tra với kho và sẽ phản hồi phương án trong hôm nay.
Anh/chị vui lòng cho em xin ảnh phiếu giao hàng để em xử lý nhanh hơn ạ.
Trân trọng, Bộ phận CSKH
Lưu ý: không hứa cụ thể, xin thêm thông tin, giọng đúng — nhưng con người vẫn duyệt trước khi gửi.
Ví dụ: tạo draft qua Gmail API
import base64
from email.mime.text import MIMEText
def create_draft(service, to, subject, body, thread_id):
msg = MIMEText(body, "plain", "utf-8")
msg["to"] = to
msg["subject"] = "Re: " + subject
raw = base64.urlsafe_b64encode(msg.as_bytes()).decode()
service.users().drafts().create(
userId="me",
body={"message": {"raw": raw, "threadId": thread_id}}
).execute()
Dùng threadId để nháp nằm đúng luồng hội thoại, không tạo thread mới rời rạc.
Các bước triển khai
- Chỉ tạo draft cho category có action
draft_replyvàconfidenceđủ cao. - Chèn guardrail trong prompt: cấm hứa, cấm bịa, skip email nhạy cảm.
- Gắn nhãn
AI/Action/CanDuyetcho email có nháp để bạn biết chỗ duyệt. - Tạo draft trong đúng thread bằng
threadId. - Không bao giờ gọi
messages().send()tự động ở giai đoạn này. - Rà soát 10 nháp đầu, chấm điểm chất lượng, tinh chỉnh prompt.
Khung guardrail cho nội dung nháp
- Không cam kết tài chính cụ thể (số tiền, thời gian giao).
- Không tiết lộ dữ liệu nội bộ/khách khác.
- Không xác nhận điều chưa kiểm chứng.
- Có lối thoát an toàn: thiếu thông tin thì hỏi lại.
- Nhạy cảm thì
skipvà chuyển người.
Checklist soạn nháp
- [ ] Chỉ tạo draft, không auto-send.
- [ ] Prompt draft tách khỏi prompt phân loại.
- [ ] Guardrail cấm hứa/bịa/skip nhạy cảm.
- [ ] Draft nằm đúng thread.
- [ ] Có nhãn báo "cần duyệt".
- [ ] Đã rà soát chất lượng thủ công.
Sai lầm thường gặp
- Bật auto-send sớm. Một câu trả lời sai gửi khách là khủng hoảng. Luôn draft trước, gửi tay.
- Không có guardrail, LLM tự ý hứa "hoàn tiền 100% ngay" — công ty gánh hậu quả. Cấm hứa cụ thể trong prompt.
- Dùng chung prompt phân loại để soạn thư. Phân loại và viết là hai việc khác nhau, cần hai prompt riêng.
- Tạo draft không kèm threadId, nháp lạc khỏi hội thoại, khó tìm khi duyệt.
- Để agent soạn cho email pháp lý/HR/báo chí. Những loại này phải
skipvà chuyển người thật — rủi ro quá cao để tự động. - Không giới hạn theo confidence, soạn cả cho email agent không chắc loại — nháp lạc đề, mất công duyệt hơn tự viết.
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