Structured Output(結構化輸出)
又稱:結構化輸出 · JSON 輸出 · JSON mode · schema 輸出 · 結構化回應
要求模型不回自由文字,而是回一段符合你指定格式(通常是一個 JSON schema)的資料,讓下游程式能直接解析、不用再猜。
你會在什麼時候遇到它
任何「AI 之後要接自動化」的場景都靠它。模型回一段散文,你的程式沒法可靠地取出欄位;回一個結構固定的 JSON,才能直接存進資料庫、觸發下一步。沒有它,AI 的輸出就停在「給人看」,進不了「給機器用」。
打個比方
像點餐。自由文字是客人用說的:「我要那個辣的、不要蔥」,廚房得猜。結構化輸出是一張固定欄位的點餐單:辣度=中、加蔥=否,廚房照單做,不會錯意。差別不在內容,在「格式是否固定到能自動處理」。
最小範例
// 你要的 schema(簡化):
{
"type": "object",
"properties": {
"company": { "type": "string" },
"revenue_million": { "type": "number" },
"is_profitable": { "type": "boolean" }
},
"required": ["company", "revenue_million", "is_profitable"]
}
// 模型被約束後回的東西(可直接 json.loads 解析):
{ "company": "某科技公司", "revenue_million": 25000.5, "is_profitable": true }看兩個地方。第一,required 列出「一定要有」的欄位,模型不能漏。第二,每個欄位有 type,所以 revenue_million 一定是數字(不會回「約兩萬五」這種沒法算的文字)。下游程式因此可以放心解析,不用寫一堆容錯。
最常搞錯的地方
- 只在 prompt 裡寫「請回 JSON」就以為穩了。模型仍可能加解釋文字、用錯引號、漏欄位。要可靠,得用 API 的 JSON mode/structured output 功能或 schema 約束,並在程式端再做一次校驗。
- 以為結構化輸出等於「內容正確」。它只保證格式對(是合法 JSON、欄位齊全),不保證裡面的數字是真的。模型照樣能把一個編造的數字,規規矩矩地填進正確的 schema。