生成與推論

Structured Output 結構化輸出是什麼?用一份 schema 綁住 AI 的回答格式

Structured Output(結構化輸出)是先定義一份資料結構,也就是 schema,再要求模型嚴格依照這個結構回答,通常是 JSON。它解決的是「模型講得很好,但程式接不住」的問題:有了固定的欄位名稱、型別與必填規則,輸出就能直接進資料庫、進表單、進下一個流程,不必再寫一堆字串處理去猜它這次寫成什麼樣。
Structured Output 結構化輸出是什麼?用一份 schema 綁住 AI 的回答格式:文章重點卡

Structured Output 結構化輸出是什麼?用一份 schema 綁住 AI 的回答格式

只要你開始把 AI 接進流程,就會遇到這個問題:它每次回答的排版都不太一樣,昨天寫成條列,今天變成一段話,程式根本接不住。

結構化輸出就是把這件事鎖死的做法。內容還是它想,但格式由你決定。

你將學到什麼

定義

先定義資料結構,再要求模型嚴格照這個結構回答。

白話比喻

像把問答改成填表,欄位是你印好的,對方只能填格子。

為什麼要用

輸出能被程式直接接走,不必寫字串處理去猜格式。

跟誰容易搞混

格式規範是「請你用某種排版」,結構化輸出是「照這份結構回答」。

定義

Structured Output 中文叫結構化輸出,指的是先定義好一份資料結構,也就是 schema,再要求模型嚴格依照這個結構回答。實務上最常用的格式是 JSON。

它處理的不是內容品質,而是可接性。模型講得再好,如果每次的排版都不一樣,後面的程式就接不住。

白話比喻

像把開放式問答改成填表。你印好一張表格,欄位是固定的,對方只能把答案填進格子裡。

問答的內容還是他寫的,但收回來的時候你不用重讀一遍再整理,因為每一份表格長得都一樣。

一份 schema 大概長這樣

{
  "intent": "string",
  "customer_name": "string",
  "amount": "number | null",
  "priority": "high | medium | low",
  "needs_human": "boolean"
}

重點在三件事:欄位名稱、型別,以及可以列舉的欄位給固定選項。這三樣定清楚,模型的發揮空間就被限制在你想要的範圍內。

跟一般的格式要求差在哪

項目一般格式要求結構化輸出
怎麼下指令請用條列式、請寫成表格請依照這份 schema 回傳
管的是什麼呈現排版,給人看資料結構,給程式接
穩定度每次可能不太一樣欄位固定,可預期
後續處理常常要人工整理或寫規則解析可直接寫進資料庫或送進下一步

實際用例

把一封客訴信轉成工單,欄位包含客戶名稱、問題分類、緊急程度、是否需要真人接手。輸出結構固定,就能直接開單,不必人工轉貼。

多智慧體系統更依賴它,因為總調度要靠固定結構才知道該把任務丟給誰,這正是 Prompt Parsing 提示詞解析 的核心做法。最終寫進資料庫的那一步,做的就是 CRUD 增刪查改

常見誤解最大的誤解是以為格式對了就代表答案對了。結構化輸出保證的是欄位齊全、型別正確,內容是不是事實它管不到,該查證的還是要查。另一個常踩的坑是沒有為「查不到」留位置,schema 裡每個欄位都必填時,模型為了填滿就會編一個值出來,反而製造出更難發現的錯誤。
本文源起本文為酒Ann 的 AI 名詞彙編系列,用白話把常見名詞一次講清楚。歡迎追蹤 酒Ann 的 Facebook

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

結構化輸出和 JSON Mode 是同一件事嗎?
很接近但不完全相同。JSON 輸出模式保證回傳的是合法的 JSON,結構化輸出更進一步,還會綁住欄位名稱、型別與必填規則。前者管語法,後者管內容結構。
定義 schema 時要注意什麼?
欄位名稱要語意清楚、型別要明確、必填與選填要分清楚,能列舉的欄位就給固定選項。另外務必為「查不到」的情況留一個明確的表示方式,否則模型會傾向硬編一個值填進去。
用了結構化輸出,內容就一定正確嗎?
不會。它保證的是格式,不是事實。欄位齊全、型別正確的回答,內容照樣可能是錯的,該做的來源查核一樣不能省。