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 — Bước nâng cấp đầu tiên: LLM trích xuất & phân loại cho RPA

Đã đọ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.

Đây là nâng cấp cho ROI cao nhất, rủi ro thấp nhất: để LLM biến input "bẩn" (phi cấu trúc) thành dữ liệu sạch có cấu trúc, rồi trả về cho RPA xử lý bằng quy tắc cũ. Không cần agent tự trị, chỉ là một lệnh gọi thông minh.

Bài toán mẫu

Bot phân loại email hỗ trợ khách hàng. Trước đây RPA dùng từ khóa: email chứa "hoàn tiền" → nhóm Refund. Nhưng khách viết "tôi muốn lấy lại tiền đã đóng" thì trượt. Ta thay bước phân loại từ khóa bằng LLM.

Các bước xây dựng

  • Định nghĩa schema output rõ ràng: quyết định chính xác các trường và giá trị hợp lệ trước khi viết prompt.
  • Viết prompt có ràng buộc chặt: liệt kê danh mục cho phép, ép trả JSON, cấm bịa.
  • Đặt temperature=0 để ổn định.
  • Validate output so với schema (enum, kiểu dữ liệu) ngay tại service.
  • Thêm confidence & fallback: nếu LLM không chắc, gắn cờ để chuyển con người.
  • Trả kết quả cho RPA để chạy tiếp quy tắc cũ.

Prompt mẫu (phân loại + trích xuất)

Bạn là bộ phân loại ticket. CHỈ trả JSON đúng schema, không giải thích.
Schema:
{
  "category": one of ["Refund","Shipping","Technical","Other"],
  "amount": number | null,
  "urgency": one of ["low","medium","high"],
  "confidence": number 0..1
}
Quy tắc: nếu không chắc category, đặt "Other" và confidence thấp.
Nội dung ticket:
---
{ticket_text}
---

Validate + fallback trong service

ALLOWED = {"Refund","Shipping","Technical","Other"}

def handle(text):
    data = json.loads(call_llm(build_prompt(text)))
    # kiểm tra schema
    if data.get("category") not in ALLOWED:
        return route_human(text, reason="bad_category")
    if data.get("confidence", 0) < 0.6:
        return route_human(text, reason="low_confidence", hint=data)
    return data   # đủ tin cậy → RPA xử lý tiếp

Nguyên tắc: confidence thấp thì đẩy cho người, đừng để bot đoán bừa những case quan trọng.

Đo chất lượng trước khi bật đại trà

  • Lấy 100–200 mẫu thật đã có nhãn đúng (do người gán).
  • Chạy LLM trên tập này, so sánh nhãn.
  • Tính accuracy theo từng category (có category yếu?).
  • Xem các case sai: sửa prompt, thêm ví dụ, hoặc siết ngưỡng confidence.
  • Chỉ rollout khi đạt ngưỡng chấp nhận (ví dụ ≥ 95% ở category quan trọng).

Khung tư duy: "LLM đề xuất, RPA quyết định"

Ở bước này LLM không được tự hành động với hệ thống thật. Nó chỉ đề xuất dữ liệu có cấu trúc. RPA/quy tắc mới là bên thực thi. Cách này giữ toàn bộ tính audit và an toàn của RPA, chỉ thêm khả năng đọc hiểu.

Checklist rollout bước trích xuất

  • [ ] Schema output cố định, có validate enum/kiểu
  • [ ] Có trường confidence + ngưỡng fallback về người
  • [ ] Đã test trên tập mẫu có nhãn, đạt accuracy mục tiêu
  • [ ] Có che PII trước khi gửi lên LLM (nếu cần)
  • [ ] Có log để review định kỳ các case low-confidence
  • [ ] Feature flag để tắt, rơi về phân loại từ khóa cũ

Sai lầm thường gặp

  • Prompt không ràng buộc danh mục: LLM tự chế category mới, RPA không xử lý được.
  • Không có ngưỡng confidence: bot xử lý cả những case nó "đoán", gây lỗi âm thầm.
  • Bỏ qua bước đo accuracy: bật đại trà rồi mới phát hiện sai 20% ở category quan trọng.
  • Cho LLM hành động trực tiếp ngay ở bước này: trộn lẫn "đọc hiểu" và "thực thi" làm mất kiểm soát; hãy tách rõ đề xuất vs quyết định.
  • Gửi dữ liệu nhạy cảm không che: rủi ro tuân thủ/PII.
Bài 5 sẽ nâng lên một bậc: cho phép LLM gọi tool để tự lấy thêm dữ liệu và hành động — bước đầu của agentic thậ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