Trích xuất mới chỉ là "đọc được". Giá trị thật của agent nằm ở kiểm tra: phát hiện hóa đơn lệch tổng, hợp đồng có điều khoản bất lợi, báo cáo sai số học. Đây là nơi agent chuyển từ "máy gõ" thành "trợ lý biết nghĩ".
Ba tầng kiểm tra
- Kiểm tra định dạng — MST đủ 10/13 số? Ngày hợp lệ, không phải tương lai?
- Kiểm tra số học —
tien_hang + thue_vat == tong_tien? Tổng dòng == tổng cuối? - Kiểm tra nghiệp vụ — nhà cung cấp có trong danh sách duyệt? Số tiền có vượt hạn mức cần phê duyệt cấp cao?
Validate bằng code — rõ ràng và kiểm toán được
def validate_invoice(inv, approved_msts, limit=20_000_000):
issues = []
if inv["mst_nguoi_ban"] not in approved_msts:
issues.append(("NCC_LA", "MST không nằm trong danh sách duyệt"))
if inv["tien_hang"] and inv["thue_vat"]:
tinh = inv["tien_hang"] + inv["thue_vat"]
if abs(tinh - inv["tong_tien"]) > 1: # cho phép lệch 1 đồng làm tròn
issues.append(("LECH_TONG", f"Tính {tinh} != ghi {inv['tong_tien']}"))
if inv["tong_tien"] and inv["tong_tien"] > limit:
issues.append(("VUOT_HANMUC", "Cần phê duyệt cấp cao"))
return issues
Mỗi vấn đề có mã (LECH_TONG) và mô tả — sau này gom thành báo cáo và định tuyến xử lý.
Kiểm tra điều khoản hợp đồng — nơi LLM tỏa sáng đúng chỗ
Hợp đồng là văn bản tự do; luật cứng không bắt được "điều khoản gia hạn tự động". Đây là chỗ dùng LLM, nhưng theo cách có kiểm soát: đưa ra một danh sách điều khoản rủi ro cần soi, yêu cầu model chỉ ra CÓ/KHÔNG kèm trích dẫn nguyên văn.
Rà soát hợp đồng dưới đây theo checklist rủi ro.
Với mỗi mục: trả "co"/"khong", và nếu "co" phải trích NGUYÊN VĂN câu trong hợp đồng.
Không có trích dẫn nguyên văn = coi như "khong".
CHECKLIST:
- gia_han_tu_dong: hợp đồng tự động gia hạn nếu không báo trước?
- phat_cham_tra: mức phạt chậm thanh toán vượt 8%/năm?
- don_phuong_cham_dut: bên kia được đơn phương chấm dứt?
- gioi_han_trach_nhiem: có điều khoản miễn/giới hạn trách nhiệm bất lợi?
Bắt buộc trích dẫn nguyên văn là mẹo chống bịa: nếu model không dẫn được câu thật, coi như không có điều khoản đó.
Khung tư duy: quy tắc quyết định, AI chỉ gợi ý
Ranh giới vàng: quyết định pass/fail luôn do quy tắc code, LLM chỉ đóng vai "đèn pin" soi chỗ đáng ngờ. Không bao giờ để câu trả lời tự do của LLM trực tiếp quyết định ghi sổ. Mọi phát hiện của LLM phải quy về một mã vấn đề và một người duyệt.
Các bước xây tầng kiểm tra
- Liệt kê mọi quy tắc cứng thành hàm code trả về danh sách vấn đề có mã.
- Với hợp đồng, soạn checklist điều khoản rủi ro cụ thể theo ngành.
- Ép LLM trả CÓ/KHÔNG kèm trích dẫn nguyên văn.
- Gộp mọi vấn đề (code + LLM) vào một danh sách chung.
- Ánh xạ mỗi mã vấn đề sang một làn xử lý (Xanh/Vàng/Đỏ).
- Ghi log mọi vấn đề để kiểm toán về sau.
Checklist kiểm tra
- [ ] Kiểm tra định dạng (MST, ngày) bằng code
- [ ] Kiểm tra số học tổng/dòng bằng code (không dùng LLM tính)
- [ ] Đối chiếu danh sách nhà cung cấp/hạn mức
- [ ] Checklist điều khoản rủi ro cho hợp đồng
- [ ] Mọi phát hiện LLM đều có trích dẫn nguyên văn
Sai lầm thường gặp
- Nhờ LLM cộng trừ — nó sai một cách tự tin. Dùng code cho mọi phép tính.
- Checklist điều khoản chung chung — "có điều gì bất lợi không" cho kết quả vô dụng. Phải liệt kê từng điều khoản cụ thể.
- Không lưu trích dẫn — người duyệt không biết cảnh báo dựa vào đâu, mất niềm tin vào agent.
- Để cảnh báo vàng tự chuyển thành ghi sổ — mỗi cờ Vàng phải chặn tự động cho tới khi người duyệt.