Deep Dive: Structured outputs
Tổng quan Reliability
Structured outputs là kỹ thuật reliability quan trọng nhất trong agentic systems. Khi downstream cần dữ liệu machine-readable, ta không còn “nói chuyện” với model mà đang định nghĩa một giao thức.
Điểm mạnh của structured outputs không chỉ là parsing. Nó còn giảm bề mặt prompt injection vì model không được tự do bịa thêm command text ngoài schema.
Trong thực hành hiện đại, structured outputs xuất hiện cùng function calling, tool choice và strict mode. Đây là lớp làm cho output không chỉ đúng mà còn có thể dùng ngay trong code.
| Chế độ | Tác dụng | Điểm cần nhớ |
|---|---|---|
| JSON Schema | Mô tả shape output | Phải rõ required và enum |
| Strict mode | Ép adherence mạnh hơn | Một số schema feature không hỗ trợ |
| Allowed tools | Giới hạn action space | Giảm tool misuse |
Cơ chế Mechanics
Với OpenAI, strict mode hiện dựa trên structured outputs và yêu cầu như `additionalProperties: false` cùng danh sách `required` đầy đủ. Với Gemini, structured output cũng dùng JSON Schema nhưng với một tập support khác.
Ở mức thiết kế hệ thống, điểm quan trọng là output space hữu hạn. Khi model chỉ được phép trả về một schema rõ ràng, downstream code không còn phải đoán xem model “muốn nói gì”.
Strict schema sketch
{
"type": "object",
"properties": {
"decision": { "type": "string", "enum": ["approve", "reject"] },
"reason": { "type": "string" }
},
"required": ["decision", "reason"],
"additionalProperties": false
}Khi dùng Fit
Structured outputs là mặc định tốt cho extraction, classification, routing, audit logging, function calling và mọi workflow có action thật phía sau.
Nếu task cần output sáng tạo, constrained output có thể bó model quá nhiều. Khi đó cần cân bằng giữa schema và không gian sáng tạo.
Ưu điểm
- Parseable và deterministic hơn
- Tốt cho tool calling và automation
- Giảm freeform channels cho injection
Nhược điểm
- Schema quá chặt có thể giảm linh hoạt
- Một số schema feature không được support
- Thiết kế schema cần kỷ luật
Failure modes Risk
Các lỗi thường gặp
- Schema drift giữa prompt và downstream parser.
- Model bị bó tay vì schema quá chặt.
- Output hợp schema nhưng sai business logic.
- Tool call vẫn cần approvals và validation phía sau.
So sánh Compare
| Technique | Khác biệt | Khi nào chọn |
|---|---|---|
| Freeform prompting | Model tự do diễn đạt | Chỉ phù hợp khi downstream đọc tay |
| JSON mode | Cố gắng ra JSON | Khi cần output máy đọc nhưng chưa cần schema chặt |
| Function calling | Tool arguments theo schema | Khi output là action/tool use |