Kế 15: Vây Thành Ép Hàng — Constraints đặt ràng buộc
Kế 15 Binh pháp AI: Dùng grammar constraints ép AI output đúng format 100%, tránh lỗi JSON/XML hallucination. Không cần 'làm ơn', chỉ cần tường thành.
Định nghĩa
Vây Thành Ép Hàng là chiến thuật dùng grammar-constrained decoding (ràng buộc ngữ pháp) để ép buộc AI phải sinh output đúng format ngay từ token đầu tiên — thay vì nhờ vả "làm ơn trả về JSON" rồi mới đứng tim chờ đợi xem nó có thêm thắt dấu phẩy thừa hay không. Đây là cách biến AI từ "họa sĩ tự do" thành "thợ đục gỗ làm theo khuôn" với độ chính xác 100% về mặt cú pháp.
Giải thích chi tiết
Cơ chế "Vây Thành" — Grammar Constrained Decoding
Khi bạn prompt "trả kết quả dạng JSON", AI hiểu đó là một "đề nghị lịch sự" — nó có thể tuân thủ, cũng có thể không. Nó vẫn sẽ tự do predict token tiếp theo dựa trên phân bố xác suất. Nếu token "}" có xác suất thấp hơn token "Certainly!", nó sẽ merrily viết: "Certainly! Here is the JSON you requested..." rồi mới đến dấu ngoặc nhọn — đó là lỗi hallucination định dạng.
Grammar-constrained decoding xây tường thành quanh những lối đi sai. Nó biên dịch JSON Schema hoặc XML Schema của bạn thành một Finite State Machine (FSM) — con đường duy nhất hợp lệ. Tại mỗi bước generate token, hệ thống sẽ mask (che) tất cả các token không hợp lệ, đặt probability của chúng về 0. AI không còn "lựa chọn" viết sai nữa — nó chỉ có thể đi qua cổng thành duy nhất còn mở.
Via Negativa — Nói Không Thay Vì Nói Có
Kế này áp dụng nguyên lý Via Negativa (qua phủ định): Cấm cái sai dễ hơn chỉ đích xác cái đúng. Thay vì positive preference ("phải có field 'title'"), bạn dùng negative constraint ("không được phá vỡ JSON grammar").
Cấu trúc bất đối xứng này làm nên sức mạnh của kế Vây Thành:
- Positive: Như bắn tên vào đích nhỏ giữa không gian khổng lồ — dễ miss
- Negative: Như xây hào rào quanh vực sâu — dễ làm, robust, AI chỉ cần "không đi vào hào"
Khi bạn cấm AI được phép mở bằng chữ "Certainly" hoặc bất kỳ whitespace nào trước dấu {, nó buộc phải bắt đầu bằng { — không cần nói "làm ơn".
Tại Sao Không Thể Tin Vào "Xin Làm Ơn"
LLM là autocomplete machines, không phải parsers. Prompt-based JSON (nhờ vả) thất bại ~5-15% trong production với các lỗi tinh vi:
- Trailing commas sau phần tử cuối cùng
- Keys bị hallucinate (tự thêm field không có trong schema)
- Unclosed brackets
- Thêm explanation text trước hoặc sau JSON block
Constraint-based decoding loại bỏ 100% lỗi syntax. Bạn không dạy AI "đừng nói nhiều", bạn cắt đứt khả năng sinh ra "Certainly!" ngay từ token đầu tiên bằng cách set probability của những token đó về 0.
Ví dụ thực tế
Trích xuất hóa đơn sang JSON chuẩn
Bạn cần AI đọc một đoạn text hóa đơn lộn xộn và xuất ra JSON với các trường: invoice_number, date, total_amount, items (array).
Cách thông thường (Prompt-based):
Trích xuất thông tin hóa đơn này sang JSON:
[paste text]
Lưu ý: invoice_number là string, total_amount là number.Kết quả: 9/10 lần đúng, nhưng lần thứ 10 AI trả về:
Sure! Here is the extracted information:
{
"invoice_number": "INV-2024",
"total_amount": 1500.00,
}Lỗi: trailing comma, thêm text thừa, có thể thiếu field items.
Áp dụng Kế 15 (Constraint-based): Dùng thư viện Outlines hoặc API OpenAI Structured Outputs với JSON Schema cứng:
{
"type": "object",
"properties": {
"invoice_number": {"type": "string"},
"total_amount": {"type": "number"},
"items": {"type": "array", "items": {"type": "string"}}
},
"required": ["invoice_number", "total_amount"]
}Kết quả: 100% valid JSON, không trailing comma, không text thừa, field nào không có trong schema sẽ bị chặn ngay từ đầu.
Sinh code API với type safety
Bạn cần AI viết function Python với type hints chuẩn và xử lý lỗi đúng cách.
Constraint: Bạn cung cấp Pydantic model hoặc Python function signature dưới dạng grammar. AI buộc phải sinh code tuân thủ interface này — không thể tự ý thêm parameter không khai báo, không thể return type sai.
Kết quả: Code chạy được ngay lần đầu, không cần fix lỗi syntax hay type mismatch sau khi generate.
Form đăng ký người dùng với validation
Trong chatbot thu thập thông tin, bạn cần AI trả về XML hoặc JSON với strict schema:
emailphải đúng format (regex constraint)agephải là integer từ 18-100 (range constraint)- Không được thiếu field nào
Grammar constraint đảm bảo AI không thể sinh age: "twenty" (string) hay bỏ quên email — ngay lập tức bị chặn và AI phải sửa lại trong khi generate.
Ứng dụng
Sinh viên
Làm bài tập lập trình có test case chặt: Dùng constrained decoding để AI chỉ sinh code trong phạm vi syntax cho phép (ví dụ: chỉ dùng vòng lặp for, không dùng list comprehension), đảm bảo output pass tất cả test case đầu vào.
Người đi làm (Data Analyst, Developer)
- Tự động hóa báo cáo tài chính: Xuất dữ liệu từ PDF sang Excel/JSON với schema cố định, không lo lỗi format làm hỏng công thức VLOOKUP bên dưới.
- CRM Integration: AI trích xuất lead từ email rồi push vào Salesforce/HubSpot qua API — yêu cầu JSON schema chuẩn của CRM, không chấp nhận hallucination field.
Doanh nghiệp (Engineering Team)
- API Contracts: AI generate SDK client code từ OpenAPI Spec — dùng constraint đảm bảo sinh đúng các endpoint, không thiếu parameter bắt buộc.
- Data Pipeline: ETL jobs yêu cầu output Parquet/Avro với schema registry — constraint decoding ngăn AI tạo column sai kiểu dữ liệu làm pipeline crash.
So sánh
| Đặc điểm | Prompt-based (Yêu cầu lịch sự) | Constraint-based (Vây Thành Ép Hàng) |
|---|---|---|
| Cơ chế | Dựa vào "ý chí tuân thủ" của AI | Dựa vào ràng buộc vật lý (mask logits) |
| Độ tin cậy syntax | ~92-95% | 100% |
| Lỗi thường gặp | Trailing comma, thêm text thừa, sai type | Không có lỗi syntax |
| Chi phí | Thấp (1 lần gọi API) | Cao hơn 10-30% (FSM overhead) |
| Semantic correctness | Không đảm bảo | Không đảm bảo (vẫn có thể sinh nội dung sai, nhưng format đúng) |
| Tools hỗ trợ | ChatGPT thuần | Outlines, SGLang, OpenAI Structured Outputs, Instructor |
Kết luận: Prompt-based như cửa mở — AI có thể đi lối khác nếu "thấy hay". Constraint-based như vây thành — AI chỉ có một lối thoát duy nhất: đúng format bạn định sẵn. Dùng constraint khi bạn cần machine-readable output (JSON, XML, Code), dùng prompt tự do khi bạn cần human-readable creativity (blog, thư, thơ).
Bài viết liên quan
Cùng cụm (Kỹ thuật tinh chỉnh Output)
Kế 13: Mượn Xác Hoàn Hồn
Giao AI vai trò chuyên gia để output khác hẳn
Kế 14: Dụ Địch Vào Ổ Phục Kích
Chain-of-Thought bắt AI suy nghĩ từng bước
Kế 16: Thanh Đông Kích Tây
Negative Prompting — nói cho AI biết KHÔNG làm gì
Đọc tiếp
- Kế 32: Bày Trận Structured Output — Đi sâu vào JSON Schema và business applications
- Kế 16: Thanh Đông Kích Tây — Via Negativa trong prompt engineering (liên hệ chặt chẽ với kỹ thuật negative constraints ở Kế 15)
- Kế 1: Chia Để Trị — Khi constraint quá phức tạp, hãy chia nhỏ task thay vì ép một lúc
Kế 14: Dụ địch vào ổ phục kích — Chain-of-Thought bắt AI suy nghĩ từng bước
Kế 14 Binh pháp AI: Bắt AI liệt kê suy luận từng bước trước khi đưa ra kết luận, giảm sai sót logic và tăng độ chính xác trên bài toán phức tạp.
Kế 16: Thanh Đông kích Tây — Negative prompting định nghĩa bằng phủ định
Kế 16 Binh pháp AI: Dùng negative prompting (Via Negativa) để loại trừ lỗi thay vì chỉ định tích cực. Giảm hallucination, tránh clichés, tạo output chính xác.