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 — Thiết kế Prompt phân loại cho ra JSON ổn định

Đã đọc 0/9 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.

Tầng Classify là trái tim của agent. Bài này dạy bạn viết prompt để LLM phân loại chính xác và trả về JSON đọc máy được — mọi lần.

Ba nguyên tắc của prompt phân loại tốt

  • Đóng khung lựa chọn — cho LLM danh sách category cố định, cấm bịa loại mới.
  • Ép định dạng đầu ra — yêu cầu JSON đúng schema, dùng structured output nếu API hỗ trợ.
  • Cho ví dụ (few-shot) — 2–3 ví dụ mẫu tăng độ chính xác vượt trội so với chỉ mô tả suông.

Cấu trúc prompt hệ thống mẫu

Bạn là bộ phân loại email cho một shop thời trang online.
Phân loại email vào ĐÚNG MỘT category trong danh sách:
- don_hang: hỏi/đặt/theo dõi đơn
- khieu_nai: lỗi sản phẩm, giao sai/thiếu, đòi hoàn tiền
- hoa_don: hóa đơn nhà cung cấp, thanh toán
- noi_bo: email từ đồng nghiệp @congty.vn
- spam: quảng cáo, newsletter không liên quan

Priority: khan | binh_thuong | cho_duoc
Quy tắc khẩn: có deadline < 48h, khách giận, hoặc mất tiền/mất khách.

CHỈ trả về JSON theo schema, KHÔNG giải thích thêm:
{"category":"","priority":"","action":"","owner":"","confidence":0.0,"reason":""}

Ví dụ few-shot nhúng vào prompt

Email: "Áo giao bị rách, tôi muốn đổi trong hôm nay"
→ {"category":"khieu_nai","priority":"khan","action":"draft_reply",
   "owner":"cskh","confidence":0.93,"reason":"lỗi sản phẩm + gấp"}

Email: "Giảm giá 50% cuối tuần này!"
→ {"category":"spam","priority":"cho_duoc","action":"archive",
   "owner":"none","confidence":0.97,"reason":"quảng cáo"}

Dùng structured output / function calling

Nếu API hỗ trợ (Anthropic tool use, OpenAI JSON mode), hãy định nghĩa schema và bắt buộc model tuân theo. Điều này loại bỏ hoàn toàn lỗi parse:

tools = [{
  "name": "classify_email",
  "input_schema": {
    "type": "object",
    "properties": {
      "category": {"enum": ["don_hang","khieu_nai","hoa_don","noi_bo","spam"]},
      "priority": {"enum": ["khan","binh_thuong","cho_duoc"]},
      "confidence": {"type": "number"}
    },
    "required": ["category","priority","confidence"]
  }
}]

Dùng enum khiến model KHÔNG THỂ trả loại ngoài danh sách — an toàn hơn nhiều so với tin vào văn bản.

Các bước xây prompt

  • Viết danh sách category kèm mô tả 1 dòng mỗi loại (từ Bài 1).
  • Viết quy tắc priority thành câu rõ ràng, có ngưỡng thời gian.
  • Ép JSON schema với enum cho các trường phân loại.
  • Thêm 3–5 ví dụ few-shot phủ các trường hợp khó (mơ hồ, đa loại).
  • Yêu cầu confidence + reason để phục vụ tầng Decide và audit.
  • Đặt nhiệt độ (temperature) thấp (0–0.2) cho ổn định, ít "sáng tạo".

Checklist prompt

  • [ ] Category đóng (enum), không cho bịa.
  • [ ] Quy tắc priority có ngưỡng cụ thể.
  • [ ] Bắt buộc JSON schema.
  • [ ] Có few-shot phủ ca khó.
  • [ ] Có confidence + reason.
  • [ ] Temperature thấp.

Xử lý ca mơ hồ

Email vừa là đơn hàng vừa khiếu nại ("tôi đặt đơn mới và cả than phiền đơn cũ")? Hãy dạy prompt: ưu tiên category có action mạnh hơn (khiếu nại > đơn hàng), và ghi reason nêu rõ tính hai mặt để người duyệt biết. Đừng để model tự ý tạo category "hỗn hợp".

Sai lầm thường gặp

  • Category mở, để model tự nghĩ ra loại. Kết quả: mỗi lần một tên khác nhau, không thể tự động hóa bước sau. Luôn dùng enum.
  • Không cho ví dụ. Chỉ mô tả suông khiến model đoán sai các ca biên. Few-shot rẻ và hiệu quả nhất.
  • Để temperature cao, model trả kết quả dao động — cùng email hai lần ra hai category. Hạ về 0–0.2.
  • Parse văn xuôi bằng regex. Mong manh, vỡ khi model thêm một câu. Dùng structured output.
  • Nhồi cả email 5000 từ vào prompt. Cắt còn 1500–2000 ký tự quan trọng nhất; tiêu đề + đoạn đầu thường đủ để phân loại.
Bài sau: dùng kết quả phân loại để gắn nhãn và ưu tiên tự động trong hộp thư.

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