Agent chỉ hữu ích khi hiểu khách thật sự muốn gì — dù họ gõ sai chính tả, viết tắt, hay hỏi lòng vòng. "Bn 1 hộp bánh z", "còn hàng hong shop", "xuất VAT dc k" đều là tiếng Việt đời thực agent phải hiểu. Bài này xây phần "Não".
Hai cách nhận diện intent
- Từ khóa (rule-based): nhanh, rẻ, nhưng cứng. Dùng cho intent rõ ràng.
- LLM phân loại: linh hoạt, hiểu ngôn ngữ tự nhiên, chi phí token thấp nếu dùng model rẻ (DeepSeek, GPT-4o-mini).
Prompt phân loại intent (dùng model rẻ)
Bạn là bộ phân loại ý định cho tiệm bánh. Đọc tin nhắn khách và trả về JSON.
Các intent hợp lệ: HOI_GIA, DAT_HANG, HOI_HOA_DON, HOI_SHIP, KHIEU_NAI, KHAC.
Quy tắc:
- Chỉ trả JSON, không giải thích.
- Nếu không chắc, chọn KHAC.
Ví dụ:
Input: "còn bánh trung thu ko shop" → {"intent":"HOI_GIA","sanpham":"bánh trung thu"}
Input: "lấy 2 hộp, xuất hóa đơn cty" → {"intent":"DAT_HANG","soluong":2,"can_hoa_don":true}
Input: "{{text_khach}}"
Ép LLM trả JSON có cấu trúc là chìa khóa: agent parse ra để hành động, không đoán mò.
Giữ ngữ cảnh hội thoại (state)
Khách hiếm khi nói đủ trong một tin. Ví dụ:
Khách: "cho 2 hộp bánh trung thu"
Agent: "Dạ 2 hộp = 640k. Anh cho em địa chỉ ship ạ"
Khách: "123 Lê Lợi" ← tin này vô nghĩa nếu agent quên đơn đang đặt
Agent phải nhớ trạng thái đơn theo userId. Lưu vào một bảng session (Google Sheet, Redis, hoặc DB nhẹ):
{
"userId": "user_zalo_id",
"state": "CHO_DIA_CHI",
"cart": [{"sp":"bánh trung thu","sl":2,"gia":320000}],
"can_hoa_don": false,
"updatedAt": 1719300000
}
Các bước triển khai
- Định nghĩa danh sách intent đóng (5-7 cái là đủ cho SME).
- Viết prompt phân loại trả JSON, kèm 3-5 ví dụ tiếng Việt đời thực.
- Thêm bước rule-based bắt từ khóa rõ ràng trước khi gọi LLM (tiết kiệm token).
- Tạo bảng session lưu trạng thái theo
userId. - Mỗi tin đến: nạp session → xác định intent + state → quyết định bước tiếp.
- Đặt timeout session (ví dụ 2 giờ không nhắn thì reset cart).
Khung tư duy: Máy trạng thái (State Machine)
Hội thoại đặt hàng = chuỗi trạng thái: MOI → CHON_SP → CHO_SO_LUONG → CHO_DIA_CHI → CHO_XAC_NHAN → XONG. Mỗi trạng thái agent chỉ hỏi/nhận đúng thứ cần. Đây là cách biến hội thoại lộn xộn thành quy trình kiểm soát được.
Sai lầm thường gặp
- Intent mở vô hạn: cho LLM tự nghĩ intent → không parse nổi. Luôn dùng danh sách đóng.
- Không ép JSON: LLM trả văn xuôi, agent không đọc được. Yêu cầu JSON + validate, retry nếu sai.
- Quên state, hỏi lại từ đầu: khách bực vì phải lặp lại. Bắt buộc lưu session theo userId.
- Nhồi cả lịch sử chat vào prompt: tốn token, chậm, dễ nhiễu. Chỉ đưa state cần thiết + vài tin gần nhất.
- Không có nhánh KHIEU_NAI → người: agent cố xử lý khiếu nại và làm hỏng việc. Intent nhạy cảm phải chuyển người ngay.
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