Product Management
Đăng nhập
ESC

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

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

Bài 4 — Dạy agent hiểu ý định khách và giữ ngữ cảnh

Đã đọc 0/7 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 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).
Thực chiến: kết hợp cả hai. Rule bắt trước các trường hợp hiển nhiên, LLM xử lý phần còn lại.

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.
Bài sau: nối agent tới "nguồn sự thật" — tra giá, tồn kho, ghi đơn qua tools.

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