Structured Output
Structured Output
Phân biệt 'yêu cầu JSON bằng lời' (best-effort) và Structured Outputs (ép buộc bằng constrained decoding) — khi nào cần độ tin cậy 100%.
Nắm vững nguyên lý và khái niệm nền tảng trước khi đi vào công cụ thực tế.
Áp dụng quy trình từng bước, case study thực chiến và template mẫu có sẵn.
Kiểm tra checklist hoàn thành, né tránh các sai lầm kinh điển để vận hành bền vững.
Nắm vững các khái niệm nền tảng, cơ chế hoạt động và mô hình tư duy cốt lõi.
1. Mục tiêu học tập
Sau bài này, bạn có thể:
2. Khái niệm cốt lõi
- Structured Output — tính năng API ép buộc phản hồi AI tuân theo 1 JSON Schema cụ thể, đảm bảo output luôn hợp lệ và parse được.
- Cơ chế: constrained decoding — sinh theo “ngữ pháp” khiến model chỉ có thể sinh token khớp schema, khác hẳn cách “prompt-based” (chỉ yêu cầu model cố gắng theo định dạng).
- Không phải đặc thù 1 vendor: cả Anthropic (Structured Outputs) và OpenAI (
response_format) đều có tính năng tương đương — đây là khái niệm cấp ngành.
3. Tại sao nội dung này quan trọng
- Yêu cầu JSON bằng lời văn (bài 14) không đảm bảo tuyệt đối. Nếu kết quả được 1 hệ thống khác xử lý tự động, 1 lần JSON lỗi cú pháp có thể làm sập cả quy trình.
- Hiểu khác biệt “yêu cầu” và “ép buộc” giúp chọn đúng công cụ theo mức độ rủi ro.
- Cầu nối quan trọng từ “dùng AI qua chat” sang “dùng AI như 1 thành phần trong hệ thống tự động” — nền tảng cho Level 8.
4. Cơ chế hoạt động
Theo Anthropic, Structured Outputs gồm 2 thành phần: JSON outputs (output_config.format — ép response tuân theo JSON Schema) và Strict tool use (strict: true — validate schema cho tool khi AI gọi tool).
Không có Structured Outputs, model có thể sinh JSON lỗi cú pháp, thiếu trường, sai kiểu dữ liệu — buộc lập trình viên viết thêm logic retry. Với Structured Outputs, lỗi này về nguyên tắc không thể xảy ra vì constrained decoding chặn từ gốc.
OpenAI mô tả cùng ý tưởng: bản nâng cấp của “JSON mode” cũ, đảm bảo thêm tuân thủ đúng schema.
Giới hạn kỹ thuật: KHÔNG hỗ trợ schema đệ quy; KHÔNG hỗ trợ ràng buộc số học (minimum, maximum, độ dài chuỗi); có giới hạn quy mô theo thời điểm; nếu AI từ chối vì lý do an toàn, output có thể không khớp schema — an toàn luôn ưu tiên hơn tuân thủ schema.
5. Mental model
Hình dung như “nhờ ai đó điền tờ khai” (yêu cầu bằng lời) so với “đưa họ 1 tờ mẫu in sẵn ô trống” (Structured Outputs): yêu cầu bằng lời — người điền có thể quên 1 mục, viết sai định dạng. Structured Outputs — về mặt vật lý người điền không thể bỏ sót ô nào, vì cấu trúc đã định sẵn.
Quy trình thực thi từng bước, case study cụ thể và bộ prompt/template áp dụng ngay.
6. Hướng dẫn từng bước
output_config.format ở Anthropic, response_format ở OpenAI) — bước kỹ thuật, cần code.7. Ví dụ thực tế
Hệ thống tự động trích xuất thông tin liên hệ từ email khách hàng (tên, email, gói dịch vụ, có yêu cầu demo không) để đưa vào CRM. Chỉ yêu cầu “trả lời bằng JSON gồm các trường này” (bài 14) có thể khiến 1 số email cấu trúc bất thường trả về JSON thiếu trường hoặc sai kiểu ("có" thay vì true). Với Structured Outputs, schema quy định rõ 4 trường bắt buộc và đúng kiểu, output luôn parse được.
8. Prompt/template/workflow
{ "type": "object", "properties": { "ten_truong_1": {"type": "string"}, "ten_truong_2": {"type": "boolean"}, "ten_truong_3": {"type": "number"} }, "required": ["ten_truong_1", "ten_truong_2", "ten_truong_3"], "additionalProperties": false}Nguyên tắc: liệt kê đủ mọi trường bắt buộc trong required, cân nhắc additionalProperties: false.
9. Visual hoặc diagram cần thiết
10. Bài tập thực hành
- Nghĩ ra 1 tác vụ trích xuất thông tin (ví dụ: trích tên/giá/danh mục từ mô tả sản phẩm).
- Viết 1 JSON Schema tối giản theo khung ở mục 8.
- Thử yêu cầu AI trả lời theo schema đó chỉ bằng lời văn với 3-5 input khác nhau, quan sát có lần nào JSON lỗi/thiếu trường không.
Checklist kiểm tra mức độ sẵn sàng, nhận diện các bẫy sai lầm và nguyên tắc vàng vận hành.
11. Checklist
12. Lỗi thường gặp
(Suy luận từ nguyên tắc trong [S62, S63], không phải khảo sát lỗi người dùng đã ghi nhận chính thức.)
15. Best practices
16. Nội dung nâng cao (không bắt buộc)
- Anthropic hỗ trợ định nghĩa schema bằng kiểu dữ liệu bản địa (Pydantic cho Python, Zod cho TypeScript).
- Grammar biên dịch cho schema được cache 24 giờ ở phía Anthropic — thay đổi schema làm mất cache và tăng độ trễ.
⚠️ 13. Giới hạn & khi nào KHÔNG nên áp dụng
- Nếu kết quả chỉ để con người đọc trực tiếp, yêu cầu bằng lời (bài 14) thường đã đủ.
- Đây là tính năng ở tầng API/kỹ thuật, không phải thứ bật/tắt trong giao diện chat thông thường.
- Với schema quá phức tạp, tính năng có giới hạn.
🔐 14. An toàn & quản trị (Safety/Governance)
An toàn luôn được ưu tiên hơn tuân thủ schema — nếu AI cần từ chối trả lời, nó sẽ từ chối dù điều đó phá vỡ schema. Bất kỳ hệ thống nào dùng Structured Outputs để xử lý tự động phải có logic kiểm tra riêng cho stop_reason: "refusal" trước khi giả định output luôn parse được.
📚 17. Nguồn tham khảo
Structured Outputs, Claude Platform Docs (Anthropic) · Structured model outputs, OpenAI API Docs (OpenAI).