生活分享
結構化輸出(Structured Outputs)是什麼:讓 AI 照固定格式交資料
結構化輸出讓模型依 JSON Schema 產生固定欄位的資料,程式才能直接讀取。內容區分提示詞要求 JSON、JSON 模式與 schema 限制三種做法,用虛構報名信示範缺值與拒答的處理,整理三家官方文件列出的限制,並說明格式合法不等於內容正確。
閱讀時間約 6 分鐘

結構化輸出(Structured Outputs)是讓模型依事先定好的欄位結構回答,產出程式能直接讀取的資料。它管的是形狀:欄位名稱、型別與可選值落在你寫的 JSON Schema 之內,欄位裡的值對不對是另一件事。
這不是有單一標準定義的名詞:三家官方文件都用它,但實作各自不同,本文以 OpenAI、Anthropic 與 Google 在 2026 年 10 月 3 日的文件為準,文中的 schema 與輸出都是未實測的示例。
三種做法:要求、JSON 模式、schema 限制
第一種是在提示詞裡寫「請輸出 JSON」,完全靠模型照做。第二種是 JSON 模式,OpenAI 的文件說它保證輸出可解析,但不保證符合任何特定 schema。第三種是依 JSON Schema 限制輸出,Anthropic 的文件說明做法是把 schema 編譯成文法來約束輸出,稱為約束式解碼(constrained decoding)。
| 做法 | 文件能保證的 | 仍然沒保證的 |
|---|---|---|
| 提示詞要求 JSON | 沒有 API 層的保證,靠模型照指示 | 語法錯誤、缺必填欄位、型別不一致 |
| JSON 模式 | 輸出可解析為 JSON,少數邊緣情況要自行偵測 | 欄位與型別;OpenAI 文件明說不保證符合 schema |
| schema 限制 | 輸出符合你提供的 schema,限於支援的子集 | 欄位值是否正確、拒答與截斷時的輸出;Anthropic 另說 enum 大小寫不保證 |
保證可分三層:第一層合法 JSON,第二層符合 schema,第三層內容正確。前兩層是供應商功能的範圍,OpenAI 與 Anthropic 的文件仍寫了例外;第三層永遠要靠你自己驗證。
JSON Schema:只需要認得這幾個關鍵字
JSON Schema 是用 JSON 寫成的結構描述,規範說它用來定義 JSON 資料的結構,驗證程式拿它比對實際資料。json-schema.org 標示的現行版本 2020-12 以 Internet-Draft 形式發布,不是 RFC;什麼算合法 JSON 另由 RFC 8259 規定,只管語法。示例主要用下面五個關鍵字,另有 items(陣列元素的規則)與 description(欄位說明)。
- type:指定型別,可寫成陣列表示「字串或 null」。
- properties:列出每個欄位的規則。
- required:列出一定要出現的欄位。
- enum:限定值只能取自清單。
- additionalProperties:決定清單以外的欄位能否存在。
規範有三個預設容易誤會:required 省略等於沒有必填欄位,additionalProperties 省略時多出來的欄位照樣通過;format(如 date)預設只是註解,驗證程式不一定檢查。
示例:從報名信擷取姓名、日期、人數
虛構情境:社區手作課收到一封信,「你好,我是王小美,想幫社團報名下週六的手作課,大概六個人。」要擷取姓名、日期與人數。信裡只有「下週六」,模型不一定知道信哪天寄的,日期最容易出事。
{
"type": "object",
"properties": {
"name": { "type": ["string", "null"], "description": "報名者姓名;信裡沒寫就填 null" },
"event_date": { "type": ["string", "null"], "description": "活動日期,格式 YYYY-MM-DD;信裡沒有明確年月日就填 null" },
"headcount": { "type": ["integer", "null"], "description": "報名人數;信裡沒寫就填 null" },
"missing": { "type": "array", "items": { "type": "string", "enum": ["name", "event_date", "headcount"] } }
},
"required": ["name", "event_date", "headcount", "missing"],
"additionalProperties": false
}設計有三處刻意:欄位都允許 null,讓「信裡沒寫」有合法出口;missing 用 enum 記下缺了什麼;欄位全列進 required(OpenAI 的要求),並關閉 additionalProperties(OpenAI 與 Anthropic 都要求)。schema 只對照文件檢查過,沒有送進任何 API。預期輸出如下。
{
"name": "王小美",
"event_date": null,
"headcount": 6,
"missing": ["event_date"]
}預期結果是姓名王小美、人數 6、日期 null、missing 只列 event_date。「大概六個人」變成整數 6,格式允許,卻丟掉了「大概」,要不要追問由報名規則決定。
若輸出出現完整年月日,JSON 合法、schema 也通過,但日期是模型推出來的,信裡沒寫,要靠第三層擋下:比對收信日期、確認是週六。OpenAI 的文件也提醒,輸入與 schema 完全無關時,模型仍會盡力符合 schema,可能編出內容,建議提示詞寫明這時回傳空參數或固定句子。
缺值、拒答與截斷怎麼接
收到回應後的順序:先看停止原因,再解析,再驗證,最後才寫入。
- 停止原因:模型可能因安全理由拒答,或寫到長度上限被截斷。OpenAI 與 Anthropic 都會在回應裡標出這類情況,Anthropic 拒答時還照樣回 200 成功狀態碼,所以不能只看請求有沒有成功。帶著這類訊號的輸出不該直接解析。
- 解析:失敗就停下並保留原文,不要補括號硬修。
- 驗證:先依 schema 檢查,再套業務規則:日期是否晚於收信日、人數是否在名額內、姓名是否出現在原信;欄位為 null 或 missing 非空,就轉人工追問,不要替它補值。
缺值是設計好的正常路徑;拒答時,官方文件提醒輸出可能不符合 schema,要分開處理。重試要設上限,缺漏的資訊不會因為重送就變有資料。
三家文件列出的限制
以下是 2026 年 10 月 3 日讀到的頁面,更動快,請以當天文件為準。三家都只支援 JSON Schema 的子集;規範讓不認得的關鍵字通過,OpenAI 與 Anthropic 則說用到不支援的寫法會報錯。
- OpenAI:所有欄位都要列進 required,選填用含 null 的型別模擬;每個物件都要關閉 additionalProperties;allOf、not、if 等組合寫法不支援。
- Anthropic:API 不支援遞迴 schema,也不支援 minimum、maximum、minLength、maxLength 這類數值與長度限制。
- Google:列出支援的型別與關鍵字,過大或巢狀過深的 schema 可能被拒絕,並建議一律驗證值;這一頁沒寫拒答或截斷的訊號。
同一個 minimum(數值下限),Google 列為支援,Anthropic 的 API 不支援。想讓 schema 跨供應商通用只能取交集,數值範圍留給自己的驗證程式。
和工具呼叫、提示詞串接的分工
工具呼叫和回答格式差在用途,三家文件都這樣切:工具呼叫是模型請你的程式做事,回答格式管模型最後回答的形狀。不過 OpenAI 與 Anthropic 的「結構化輸出」兩邊都涵蓋:開啟 strict 後,工具參數同樣依 schema 限制。參數形狀合法仍要驗證內容,詳見工具呼叫(Tool Calling)工具呼叫(Tool Calling)是什麼:模型如何請程式做事工具呼叫是模型依工具說明產生結構化請求,交由程式執行,再讀取結果的流程;產生參數不等於操作已成功。本文用借用社區器材的情境,說明工具名稱、輸入格式、查詢與寫入的差異,以及為什麼合法 JSON 仍可能包含錯誤內容。附完整往返圖與故障判讀表,幫你看懂代理何時只是提議,何時才有真正的外部結果。閱讀全文。
提示詞串接(Prompt Chaining)提示詞串接(Prompt Chaining)是什麼提示詞串接把一項工作拆成數次模型呼叫,讓前一步的輸出成為後一步的輸入,並在中間加入檢查。本文以社團會議紀錄轉成待辦通知為例,說明如何分配每一步的責任、保留來源、處理缺漏與阻止錯誤往後傳,並比較串接、單次長提示詞與代理迴圈的差別。讀完能設計一條短而可驗證的工作流程,判斷多步驟是否真的帶來價值。閱讀全文把工作拆成連續的模型呼叫,結構化輸出是步驟間的交接契約:上一步輸出符合 schema,驗證通過才交給下一步。實作看模型之間交接資料:JSON Schema 與結構化輸出模型之間交接資料:JSON Schema 與結構化輸出把交接寫成 JSON Schema,上游模型的輸出先驗證再送下游,是讓多模型流程穩定下來的做法。本篇對照 OpenAI、Anthropic、Google 三家結構化輸出參數放在請求的哪個欄位,再用 jsonschema 套件示範驗證、失敗重試,以及下游只讀取驗證過欄位的完整流程,附兩段可以直接改寫的 Python 程式。閱讀全文,來源是 PDF 時看API 檔案與 JSON:結構化輸出及驗證API 檔案與 JSON:結構化輸出及驗證Gemini API 可以讀取 PDF,再把結果整理成指定的 JSON 結構。本篇用虛構活動公告示範檔案輸入、欄位設計與本地驗證。學完後,你會知道「收到合法 JSON」與「內容確實來自檔案」是兩件需要分別檢查的事,並能保留缺漏資訊而不讓模型自行補齊。閱讀全文。
相鄰的詞可以從AI 名詞總索引AI 名詞總索引:從 Loop Engineering 到生成式 AI想看懂 Loop Engineering、Harness Engineering、Context Engineering、RAG、MCP 與其他 AI 名詞,可以從這份總索引開始。依 2026 年 9 月查證範圍,把這些概念分組整理,每個詞連到白話專文,附依任務安排的閱讀路徑、容易混淆的層次,以及原始論文和官方定義的查核方式。閱讀全文找到。
同主題延伸閱讀
生活分享
世界模型(World Model)是什麼:讓 AI 預測「接下來會怎樣」
世界模型指 AI 內部用來預測「這樣做之後會怎樣」的模型,但這個詞至少有三種用法:強化學習代理在想像中練習用的環境模型、LeCun 主張預測抽象表示的架構路線,以及能隨操作即時生成畫面的互動環境。內容用示例說明怎麼在想像中規劃,並列出大型語言模型有沒有世界模型的正反研究,附讀新聞時的檢查問題。
生活分享
視覺語言模型(VLM)是什麼:讓 AI 讀圖片、再用文字回答
視覺語言模型(VLM)能同時接收圖片與文字,再用文字回答。內容拆解視覺編碼器、連接層與語言模型三段結構,說明 CLIP、Flamingo、LLaVA 三篇論文各補上哪一塊,並和多模態 AI、文字生圖分清楚;也整理它常犯的錯:數錯數量、搞混位置、說出圖裡沒有的東西,附上讀收據時逐行核對的步驟。
生活分享
溫度(Temperature)是什麼:AI 回答變化程度的取樣參數
溫度(temperature)是文字生成時調整取樣的參數,讓模型從下一個 token 的機率分布裡抽得更集中或更分散。用假想的台南早餐示例算出低溫與高溫的差別,說明 top-p 的來源和它與 top-k 的差別,並依官方文件與論文指出:調低溫度不代表更準,設成 0 也不保證每次相同,部分模型還不開放調整。
生活分享
合成資料(Synthetic Data)是什麼:兩種用途、品質控管與模型崩潰
合成資料是由演算法或模型產生、模仿真實資料特徵的資料,常見用途有兩種:訓練模型,以及在隱私需求下替代真資料。內容依 Self-Instruct、模型崩潰研究(替換與累積資料的差別)與 NIST、ICO 的隱私文件,說明做法、抽查流程,以及它不能保證的事。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算
資料來源
- JSON Schema:Specification(json-schema.org 的規範總覽頁,標示現行版本 2020-12) · 查證日期:
- JSON Schema 2020-12:Core(規範原文,Internet-Draft) · 查證日期:
- JSON Schema 2020-12:Validation(驗證關鍵字,Internet-Draft) · 查證日期:
- RFC 8259:JSON 資料交換格式(IETF 標準) · 查證日期:
- OpenAI:Structured model outputs(官方開發者指南,含 JSON mode) · 查證日期:
- Anthropic:Structured outputs(Claude Platform 官方文件) · 查證日期:
- Google:Structured outputs(Gemini API 官方文件) · 查證日期: