Automation trước, AI sau: chỉ dùng LLM ở bước cần “phán đoán”
Tóm tắt
Bước có quy tắc rõ (lọc, chuyển đổi định dạng, gọi API, tính toán) → dùng logic thường: rẻ, nhanh, ổn định, dễ test. Bước cần hiểu ngôn ngữ, phân loại mơ hồ, tóm tắt, soạn thảo → dùng LLM. Kết quả: chi phí thấp hơn, ít lỗi khó đoán hơn.
Khi có LLM trong tay, rất dễ rơi vào cám dỗ “cho AI làm hết”: AI đọc email, AI lọc spam, AI tính tiền hoàn, AI quyết định gửi cho ai. Kết quả thường là một hệ thống đắt, chậm và thỉnh thoảng sai theo những cách khó đoán. Nguyên tắc ngược lại hiệu quả hơn nhiều: tự động hoá bằng logic thường trước, chỉ dùng LLM ở những bước thật sự cần “phán đoán”.
Hai loại bước trong mọi quy trình
| Bước deterministic (quy tắc rõ) | Bước cần phán đoán | |
|---|---|---|
| Ví dụ | Lọc theo người gửi, đổi định dạng ngày, gọi API, tính toán, so khớp mã | Hiểu ý định trong email, phân loại mơ hồ, tóm tắt, soạn câu trả lời |
| Công cụ | if/else, regex, SQL, code, node có sẵn của n8n | LLM |
| Chi phí | Gần như 0 | Token mỗi lần chạy |
| Tốc độ | Mili-giây | Giây |
| Độ ổn định | 100% lặp lại được, test được | Có xác suất, cần eval |
Ví dụ: xử lý email yêu cầu hoàn tiền
| Bước | Dùng | Vì sao |
|---|---|---|
| Bỏ qua email tự động, newsletter, spam | Rule | Header và người gửi đủ để quyết định, không tốn token |
| Đọc nội dung, xác định khách muốn gì | LLM | Ngôn ngữ tự nhiên, cách viết đa dạng |
| Trích mã đơn hàng | Regex trước, LLM dự phòng | Mã có định dạng cố định; chỉ hỏi LLM khi regex không tìm thấy |
| Tra đơn trong database | Code / API | Dữ liệu có cấu trúc |
| Tính số tiền hoàn, kiểm tra hạn đổi trả | Code | Tiền không được phép “gần đúng” |
| Soạn thư trả lời lịch sự | LLM | Cần văn phong theo ngữ cảnh |
| Duyệt hoàn tiền trên ngưỡng | Người | Rủi ro tài chính |
Trong 7 bước, chỉ 2–3 bước cần LLM. Phần còn lại rẻ hơn, nhanh hơn và kiểm thử được bằng unit test thông thường.
Vì sao cách này tốt hơn?
- Chi phí: mỗi bước chuyển từ LLM sang code là bớt một lượt gọi model cho mọi bản ghi.
- Độ tin cậy: lỗi của LLM khó đoán; lỗi của code có stack trace và tái hiện được.
- Dễ debug: khi kết quả sai, bạn biết khoanh vùng ở bước nào.
- Dễ thay model: phần LLM nhỏ, rõ ràng → đổi model hay prompt không ảnh hưởng phần còn lại.
Đây cũng là tinh thần trong bài “Building effective agents” của Anthropic: tìm giải pháp đơn giản nhất có thể, chỉ thêm độ phức tạp khi đo được rằng nó cải thiện kết quả. Nhiều bài toán chỉ cần một lần gọi LLM được thiết kế tốt kèm retrieval và ví dụ — chưa cần tới agent.
Bốn câu hỏi kiểm tra cho từng bước
- Viết được if/else, regex hoặc SQL cho nó không? Có → đừng dùng AI.
- Sai một lần thì thiệt hại bao nhiêu? Cao (tiền, pháp lý, khách hàng lớn) → cần người duyệt, AI chỉ đề xuất.
- Đầu ra có cần cấu trúc cố định không? Có → ép JSON schema (structured outputs) và validate.
- Có dữ liệu mẫu để đánh giá không? Chưa → chuẩn bị 50–100 ví dụ gán nhãn tay trước khi đưa vào chạy thật.
Mẫu kiến trúc “bánh mì kẹp”
[Code: lọc, chuẩn hoá đầu vào]
↓
[LLM: hiểu / phân loại / soạn thảo] → JSON theo schema
↓
[Code: validate, tra cứu, tính toán, route]
↓
[Người: duyệt nếu rủi ro cao / độ tin cậy thấp]
LLM bị “kẹp” giữa hai lớp code: lớp trước cắt giảm và làm sạch đầu vào, lớp sau kiểm tra và thực thi. Đầu ra LLM không bao giờ đi thẳng tới hành động có hậu quả.
Áp dụng thế nào?
- Dev: Rà workflow hiện có: bước nào đang gọi LLM mà có thể thay bằng rule? Bắt đầu từ bước lọc đầu vào — thường tiết kiệm nhiều token nhất.
- Tech Lead: Yêu cầu sơ đồ workflow tô màu rõ “phần deterministic” và “phần AI” trong design review.
- PM: Khi ước lượng dự án automation, tách hai phần. Phần AI cần thêm thời gian cho bộ dữ liệu đánh giá, chỉnh prompt và xử lý ngoại lệ — đừng ước lượng như code thường.
Nguồn & tham khảo
- Building effective agents — Anthropic (Erik Schluntz, Barry Zhang)
- Structured outputs — Claude Docs