Structured Output: Bắt AI trả JSON, schema chuẩn
Hướng dẫn ép buộc AI trả về JSON chuẩn xác với schema, giúp kết nối API và xây dựng ứng dụng production mà không cần regex parsing.
Định nghĩa
Structured Output là kỹ thuật buộc AI trả về dữ liệu theo định dạng có cấu trúc (thường là JSON) thay vì văn bản tự do, thông qua việc cung cấp schema rõ ràng để đảm bảo tính nhất quán và khả năng parse tự động.
Giải thích chi tiết
Vấn đề với "Text tự do"
Khi bạn yêu cầu AI "trả về JSON", không có gì đảm bảo AI sẽ trả đúng format. AI có thể:
- Thêm markdown code block
```jsonvào đầu và cuối - Viết lời giải thích trước hoặc sau JSON
- Sử dụng single quote thay vì double quote
- Bỏ sót field bắt buộc hoặc sai kiểu dữ liệu
Việc parse text bằng regex hoặc string manipulation dễ gây lỗi khi production, đặc biệt khi dữ liệu đầu vào phức tạp.
JSON Schema là gì
JSON Schema là bản mô tả cấu trúc dữ liệu, định nghĩa:
- Các field có mặt (properties)
- Kiểu dữ liệu (string, number, boolean, array, object)
- Field nào bắt buộc (required)
- Mô tả cho từng field để AI hiểu ngữ cảnh
Ví dụ schema cho hóa đơn:
{
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"}
}
}
},
"total": {"type": "number"}
},
"required": ["items", "total"]
}Các phương pháp structured output
JSON Mode
OpenAI và nhiều provider hỗ trợ response_format: {type: "json_object"}. Mode này đảm bảo output là valid JSON, nhưng không validate theo schema cụ thể.
Strict Structured Output Với GPT-4o và Claude 3.5 Sonnet trở lên, bạn có thể cung cấp schema và hệ thống sẽ:
- Validate output trước khi trả về
- Tự động sửa lỗi format nếu có thể
- Trả về lỗi nếu không thể generate đúng schema
Function Calling Thực chất cũng là structured output nhưng gói trong "tool call". AI trả về arguments dưới dạng JSON theo function schema. Khác biệt là semantic: function calling mang nghĩa "hành động", còn structured output mang nghĩa "trả lời có cấu trúc".
Ví dụ thực tế
Trích xuất thông tin hóa đơn
Bạn có ảnh hóa đơn cần nhập vào hệ thống kế toán:
Schema:
{
"supplier": "string",
"date": "string (ISO 8601)",
"items": [{"name": "string", "qty": "number", "unit_price": "number"}],
"total_amount": "number",
"tax_id": "string"
}Code (OpenAI):
from openai import OpenAI
client = OpenAI()
response = client.beta.chat.completions.parse(
model="gpt-4o",
messages=[
{"role": "system", "content": "Trích xuất thông tin hóa đơn từ ảnh"},
{"role": "user", "content": [
{"type": "image_url", "image_url": {"url": "https://example.com/invoice.jpg"}}
]}
],
response_format={
"type": "json_schema",
"json_schema": {
"name": "invoice_extraction",
"strict": true,
"schema": {...} # schema ở trên
}
}
)
invoice_data = response.choices[0].message.parsed
# invoice_data là object Python, không cần json.loads()Code (Anthropic):
import anthropic
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
tools=[{
"name": "extract_invoice",
"description": "Trích xuất thông tin hóa đơn",
"input_schema": {...} # schema ở trên
}],
tool_choice={"type": "tool", "name": "extract_invoice"},
messages=[{"role": "user", "content": [{"type": "image", "source": {...}}]}]
)
invoice_data = message.content[0].inputLưu ý: Anthropic dùng "tool use" để đạt structured output, trong khi OpenAI có mode riêng.
Phân loại ticket hỗ trợ khách hàng
Tự động phân loại email hỗ trợ:
{
"category": {"enum": ["billing", "technical", "feature_request", "complaint"]},
"priority": {"type": "integer", "minimum": 1, "maximum": 5},
"sentiment": {"enum": ["positive", "neutral", "negative"]},
"summary": {"type": "string", "maxLength": 100},
"required_action": {"type": "string"}
}Kết quả parse trực tiếp vào CRM mà không cần xử lý trung gian.
Ứng dụng
Developer xây dựng tích hợp hệ thống Khi cần kết nối AI với database hoặc API bên thứ ba, structured output đảm bảo data integrity. Bạn không cần viết logic xử lý lỗi phức tạp cho mỗi trường hợp AI "nói lung tung".
Data Analyst tự động hóa báo cáo Trích xuất dữ liệu từ văn bản không cấu trúc (hợp đồng, báo cáo tài chính) thành bảng Excel hoặc dashboard. Schema giúp định nghĩa rõ các dimension và metric cần extract.
Startup xây dựng sản phẩm AI-native Trong các ứng dụng như tự động điền form, generate code, hoặc tạo cấu hình hệ thống, structured output là lớp interface giữa AI và business logic của bạn. Nó biến AI từ "chatbot" thành "backend service".
Kỹ sư nền tảng (Platform Engineer) Khi xây dựng pipeline ETL với AI, structured output giúp downstream processing ổn định. Bạn có thể dùng JSON để trigger các bước tiếp theo trong workflow một cách deterministically.
So sánh
| Đặc điểm | Text tự do | JSON Mode | Strict Structured Output |
|---|---|---|---|
| Định dạng đầu ra | Văn bản tự nhiên | Valid JSON | Valid JSON + đúng schema |
| Validation | Không | Syntax JSON | Schema + kiểu dữ liệu |
| Độ tin cậy production | Thấp | Trung bình | Cao |
| Độ phức tạp setup | Không cần setup | Thêm response_format | Định nghĩa schema chi tiết |
| Use case phù hợp | Chatbot, content creation | API integration đơn giản | Hệ thống mission-critical |
| Provider hỗ trợ | Tất cả | OpenAI, Gemini, Groq | OpenAI (gpt-4o), Anthropic (qua tool use) |
Kết luận: Nếu bạn chỉ cần AI "trả lời cho vui", text tự do đủ dùng. Nhưng khi AI là một node trong hệ thống tự động — nơi output sẽ đi vào database hoặc trigger hành động tiếp theo — strict structured output là bắt buộc. JSON Mode là bước đệm, nhưng schema validation mới là điểm cuối giúp bạn ngủ ngon.
Bài viết liên quan
Cùng cụm
Function Calling: Cho AI dùng tools
Hiểu cách AI gọi hàm qua JSON arguments, nền tảng cho việc tích hợp với external APIs
Thiết kế Tool cho AI: Tên, mô tả, parameters
Nguyên tắc đặt tên và mô tả parameters để AI gọi tool chính xác, liên quan trực tiếp đến schema design
Model Context Protocol (MCP)
Tiêu chuẩn kết nối tool giữa AI và external systems, sử dụng structured output làm message format
Multi-tool Orchestration
Khi AI cần dùng nhiều tool cùng lúc, structured output giúp phân biệt các tool calls khác nhau
Đọc tiếp
Context Engineering thực chiến
Áp dụng structured output vào các tình huống production thực tế với RAG và memory
Tool & Permission Design
Lên Level 2: Thiết kế quyền hạn và sandbox cho tool khi AI có khả năng thực thi structured commands
Function Calling: Cho AI dùng tools
Hướng dẫn Function Calling - cách cho AI gọi API, truy vấn database và thực hiện hành động thay vì chỉ trả về text. Từ lý thuyết đến code OpenAI, Anthropic.
Thiết kế Tool cho AI: Tên, mô tả, parameters
Cách đặt tên tool, viết description và thiết kế parameters để AI gọi chính xác. Best practice từ OpenAI, Anthropic và thực chiến Function Calling.