結構化輸出
3 秒看懂
結構化輸出讓大語言模型(LLM)不再只吐自然語言,而是能直接產出符合指定格式(如 JSON、XML、pydantic 模型、資料庫記錄)的精確資料。它使模型輸出從“人看”升級為“機器可處理”,是 LLM 落地業務系統的關鍵橋樑:自動化提取、工具呼叫、報表填充、生成 API 引數,一站完成,不再需要脆弱的後處理解析與重試。
3 分鐘產業解釋
在 LLM 應用中,非結構化文本易導致“形似 JSON 實則解析失敗”、欄位缺失、型別錯誤等生產事故。結構化輸出技術通過訓練或推論時的約束,確保生成的每個 token 都嚴格遵循預期的模式定義(Schema)。核心價值在於將不確定的生成過程轉變為可靠的資料生產管線。
產業落地分三層:
- 格式對齊:通過提示詞要求模型輸出 JSON,並配合後處理修復,這是最早期低成本方案。
- 約束解碼:在生成過程中即時遮蔽違反 Schema 的 token,將合法輸出率提至近乎 100%,代表如 OpenAI 的 Structured Outputs、開源專案 Outlines、SGLang 的 constrained decoding。
- 訓練注入:用大量 Schema 及其對應資料微調模型,使其內化格式表達習慣,如 function calling 微調版、Gorilla、CodeLlama 的結構化生成等。
目前,約束解碼已成為主流交付手段,因為它無需重新訓練模型,且可保證形式正確性,正在被雲端廠商和開源架構快速整合。延遲開銷通常控制在個位數毫秒級,對業務幾乎“無感”。結構化輸出是建置智慧代理(Agent)的基石,所有工具呼叫本質上都依賴它來生成準確的函式引數。
15 分鐘專家深入
結構化輸出不等於“把模型輸出當字串再解析”——那是早期走彎路的思路。真正的結構化輸出需要 端到端的保證:從機率最高的 token 開始,解碼器只考慮那些能讓當前序列繼續符合目標 Schema 的備選 token,直到生成完一個完整且合法的資料單元。
這背後涉及形式語言和自動機理論。一個 JSON Schema 可被編譯為有限狀態機(FSM),而生成模型每步的輸出 logits 只在 FSM 的合法轉移範圍內做 softmax,其餘 token 的 logit 設為 -inf。狀態機根據已生成字元逐步遷移,如:
- 期望
{"name": "→ 狀態要求輸出字串內容,直到遇到非轉義的"; - 生成巢狀物件時,狀態記錄當前深度;
- 針對
oneOf/anyOf等複雜關鍵字,狀態機會在多個分支間動態回溯。
此技術有兩個關鍵難題:一是如何高效建置覆蓋所有 JSON 語法(以及正則、上下文無關約束)的極快索引,二是如何將其與 LLM 的 GPU 推論流水線深度融合,避免每步都額外做狀態查詢。開源架構 Outlines 和 SGLang 通過編譯期將 Schema 轉化為索引表(或 trie),在 CUDA kernel 層面實現 token masking,使得額外開銷幾乎不可感知(通常 < 1 ms per token,具體數值因實現而異,公開 benchmark 顯示效能損失在 5% 以內)。
另一種路線是 語法引導生成(如 Guidance、LMQL),通過高階 DSL 書寫生成流程,由直譯器介入選擇可用的 token 集合,更靈活,但最佳化難度高,延遲波動較大。
此外,基於訓練的方法(如 CodeGen2.0、OpenAI 的 function calling 模型)雖然不提供 100% 的正確性保證,卻在複雜指令理解與 Schema 變化的泛化能力上更優。產業級實踐常將兩者結合:先用訓練過的基礎模型理解業務意圖,再通過約束解碼鎖定輸出格式。
技術原理(最深)
核心機制:限定解碼空間,使自迴歸生成每一步只能在 Schema 推導的合法 token 子集中選擇。
以 JSON 為例,工作流程如下:
輸入: prompt + schema
↓
編譯 Schema → 下推自動機(PDA) / 上下文無關文法(CFG)
↓
初始化狀態 S0(包括棧狀態)
↓
生成迴圈(for each token):
獲取原始 logits L (vocab_size)
計算合法 token 掩碼 M = legal_tokens(state) // 用狀態機匯出
寫 L'[i] = L[i] 如果 M[i]=1,否則 -inf
取樣/貪心得到 next_token
更新 state = transition(state, next_token)
↓
結束 → 輸出完整 token 序列,保證被 schema 接受
關鍵引數與實現方案:
- 索引建置:Schema → 正規表示式(如 JSON Schema 有規範的正則對應,對於 recursive schema 利用 CFG 近似),然後用 Aho-Corasick 或 trie 建置能從任意字首找出所有合法續寫 token 的資料結構。典型文獻《Outlines: Fast and Accurate Structured Generation》中,將 token-id 到字串的模式提前雜湊,實際查詢僅需 O(1)。
- 多種約束型別:
- Regex 模式:生成電話號碼、郵箱等。
- JSON / Pydantic:物件屬性順序、必填/可選、型別、列舉……
- Context-Free Grammar:處理巢狀括號、XML/HTML 等。
- 核心融合:如 SGLang 將 token masking 操作放在 decoding kernel 內部,利用共享記憶體並行查表和寫入 mask,避免 PCIe 往返。據其開源報告(截止 2025 年 3 月),在 LLaMA-70B 上連續生成 JSON 物件,延遲差異小於 3%。
ASCII 示意流程(簡化版)
+--------+ +-------------------+ +-------------------+
| Prompt | ---> | 編譯後的 Schema | ---> | 合法 token 掩碼 |
+--------+ | (狀態機,trie) | | (vocab 大小的位元)|
+-------------------+ +---------+---------+
|
v
+---------+---------+
| Logits 處理器 |
| (masking + softmax)|
+---------+---------+
|
v
下一個 token (必然合法)
技術演進史
- 2019‑2022 試水期:GPT‑3 等模型通過 few‑shot 提示要求輸出 JSON,後處理用 eval/json.loads 兜底,成功率波動大(60%‑95%,據多家企業實測)。
- 2022‑2023 訓練側突破:Code‑LLaMA、StarCoder 等程式碼模型誕生,天然對格式敏感;OpenAI 推出 function calling(2023 年 6 月),通過指令微調 + 系統提示,讓模型學會輸出符合預期模式的 JSON,但仍偶有格式錯誤。
- 2023 Q4 約束解碼開源潮:Outlines、Guidance、LMQL、SGLang 等專案公開了基於自動機的解碼方案,將 JSON 生成成功率推至 >99.9%,並整合到 vLLM、TGI 等推論架構。
- 2024 年商業化里程碑:OpenAI 釋出 Structured Outputs(2024 年 8 月),在 API 層原生支援傳入 JSON Schema,並保證輸出 100% 合法;Anthropic 在 Claude 中強化 tool use 的強約束;Google Gemini 推出 controlled generation。至此,結構化輸出成為旗艦模型標配。
- 後續趨勢(2025 至今):約束機制與多模態輸出結合(如生成特定結構的影像標註),以及“分級保證”——弱約束(建議格式)到強約束(必須合法)動態切換,以適應不同業務風險偏好。
技術路線對比(量化表)
下表中數字因缺乏統一基準,均標註為“估算/定性”(基於社群開源報告及企業實踐反饋)。
| 維度 | 約束解碼 (Outlines/SGLang) | 語法引導引擎 (Guidance/LMQL) | 微調/訓練注入 (function calling 模型) | 純提示 + 後處理修復 |
|---|---|---|---|---|
| 格式正確性 | ≈100%(理論保證) | 高(受引擎實現限制,約 95‑99%) | 較高(95‑99%,依賴模型訓練資料覆蓋) | 低(80‑95%) |
| 複雜 schema 支援 | 完備(遞迴、引用、oneOf 等) | 弱(DSL 表達能力有限) | 強(模型理解力) | 幾乎不可行 |
| 額外推論延遲 | 極低(< 5% 總延遲,據 SGLang 報告) | 中等(10‑30% 延遲增長) | 幾乎無額外延遲 | 輕微(後處理開銷) |
| 適應新 schema | 無需訓練,即換即用 | 需修改 DSL 指令碼 | 需重新微調或依賴泛化能力 | 修改提示詞即可 |
| 易用性/接入成本 | 需整合推論架構,有一定工程門檻 | 中等,需學習 DSL | 低(切換 API model 即可) | 極低,無額外依賴 |
| 適用場景 | 格式敏感業務(票據、API 引數、日誌) | 研究、複雜控制流程 | 工具呼叫、開放域但格式要求適中的場景 | 原型驗證、非生產系統 |
資料來源:[Outlines 論文及社群 benchmark]/[SGLang 開發團隊報告]/[OpenAI、Anthropic 產品文件 2024‑2025],量化值為綜合估算。
上下游
上游:
- 基礎模型:GPT‑4o、Claude 3、Gemini、LLaMA 3、Qwen 等,提供強大的語義理解和指令跟隨能力。
- 推論架構:vLLM、TGI、TensorRT‑LLM、SGLang,負責高效生成,並提供約束解碼外掛介面。
- Schema 規範與工具:JSON Schema 規範、Pydantic、Zod、TypeScript interfaces,業務側用於定義資料結構。
- 編譯技術:正規表示式引擎、上下文無關解析器(如 lark、peg.js),用於將 Schema 轉譯成狀態機。
下游:
- RPA / 企業自動化:發票提取、合同要素解析,自動填入 SAP、Salesforce 等系統。
- AI Agent 架構:LangChain、AutoGen、CrewAI,依靠結構化輸出進行可靠的工具呼叫與狀態傳遞。
- 資料工程:LLM 作為 ETL 核心,輸出嚴格的資料庫格式,直接寫入數倉。
- 合規與風控:生成監摘要、審計日誌等需嚴格欄位對齊的報告。
關鍵指標
- Schema 合規率:正確生成且完全遵循 schema 的響應比例,生產級目標 > 99.9%。
- 延遲開銷:引入約束解碼相比純文本生成額外增加的毫秒數或百分比,衡量計算效率。
- 首次 Token 生成時間 (TTFT) 增量:約束可能延長首 token 出現時間,需控制在可接受範圍(如 < 20 ms)。
- Schema 複雜度的可擴充套件性:支援巢狀深度、列舉數量、組合關鍵字的能力上限。
- 泛化誤差:對未見過的 schema 或提示變化的適應能力,主要通過訓練型方案評估。
供需與市場資料
由於獨立的“結構化輸出”市場規模尚未有權威機構單獨劃撥,市場評價多巢狀在 LLM 平台與中介軟體範疇內。據多家風投與技術諮詢機構的定性分析(2024‑2025):
- 需求端:超過 80% 的企業 LLM 應用場景(如客服工單自動填單、合年增率對、資料轉 Excel)都要求輸出確定性結構,結構化輸出已成企業採納 LLM 的技術前提。
- 供給端:頭部模型 API 已將結構化輸出作為基本特性免費或低溢價提供,壓低了下游創業公司的“純包裝”空間;但在垂直領域(醫療、法律、工業)的深度定製、私有化部署仍存在缺口。
- 開源方案興起降低使用門檻,但後期運維與穩定性保障成為雲端廠商和 MLOps 服務商的增值入口。
具體市場規模尚無公開估算資料,【未充分揭露】。
代表公司與資本對映
(融資與估值資訊來自公開資料,截至 2025 年一季度)
- OpenAI:Structured Outputs 內嵌於 ChatGPT 和 API,2024 年完成數十億美元融資,估值超 1000 億美元。
- Anthropic:Claude Tool Use 具備強約束輸出能力,從 Google、Spark Capital 等累計融資超過 70 億美元。
- Meta:開源 LLaMA 及周邊,社群約束解碼外掛繁榮,無直接營收。
- Google (Gemini):通過 Vertex AI 提供 controlled generation,與雲端生態繫結。
- SGLang(加州大學伯克利分校等):開源約束解碼架構,無獨立融資,但注入到多家雲端廠商產品。
- Outlines(獨立研發團隊):高效約束生成庫,在開發者社群廣泛採用,尚未揭露融資。
- LangChain、LlamaIndex:中介軟體商,將結構化輸出打包進架構,LangChain 已獲紅杉等投資,估值約 2.5 億美元(估算)。
- Vellum、Braintrust:LLM 評測與部署平台,聚焦企業級結構化輸出與監控,早期融資階段。
投資邏輯
- 平台型巨頭受益於標準化:模型即服務(MaaS)公司通過內建結構化輸出,提升企業使用者留存和 token 消耗量,客戶遷移成本進一步升高。
- 垂直場景解決方案仍有金礦:通用保證只是“語法正確”,業務需“語義正確 + 領域合規”。能為特定行業提供訓練資料、微調、校驗全鏈路的服務商將獲得溢價。
- 推論基礎設施的最佳化故事:約束解碼對 GPU 利用率和延遲的極致最佳化是算力效率的新戰場,相關效能提升(如 SGLang 的 kernel 創新)會直接影響毛利率。
- 開源對簡單中介軟體的降維打擊:純粹將 OpenAI 約束輸出 API 做轉賣的商業模式難以持久,投資需關注有無資料壁壘或專有微調能力。
常見誤讀糾偏(≥2)
誤讀 1:“只要要求模型輸出 JSON,然後解析,出錯了就重試,一樣能用。”
糾偏:解析後重試在形式自由、容錯度高的場景勉強可用,但對複雜巢狀、必填欄位或高吞吐場景,重試可能帶來指數級延遲,且無法保證最終正確率。約束解碼從數學上杜絕了語法錯誤,才是生產級基礎。
誤讀 2:“結構化輸出就是 function calling,模型能自動選擇工具。”
糾偏:function calling 是結構化輸出的一個子集應用,側重選擇函式並填參。真正的結構化輸出還包括靜態 Schema 提取(如從合同提取實體)、列舉分類、無“函式”概念的資料模版生成等,適用範圍更廣。
學習路徑
- 先理解 JSON Schema 標準及 Pydantic 資料模型定義。
- 閱讀 Outlines 官方文件和論文《Outlines: Fast and Accurate Structured Generation》,領會編譯、狀態機與 token masking 的結合。
- 實踐使用 SGLang 或 vLLM 的約束生成例子,測量延遲跟正確率。
- 研究 Guidance/LMQL 的 DSL 思維,思考與程式化流程的結合。
- 關注 OpenAI 和 Anthropic 的官方部落格,理解產品側的權衡與迭代方向。
- 拓展到多模態 & 多步 Agent 場景:如何在不同步驟間傳遞結構化上下文。
一句話總結
結構化輸出將 LLM 從“說人話”升級為“說機器話”,通過約束解碼或訓練保證格式恆對,是智慧代理時代資料管道的語法契約。
延伸閱讀與來源
由於即時檢索錯誤(HTTP 403),本頁未列出具體網路連結。推薦查詢以下關鍵資料:
- OpenAI 官方部落格《Introducing Structured Outputs in the API》(2024‑08)
- Outlines 專案及論文(GitHub 倉庫 dottxt-ai/outlines)
- SGLang 論文《Efficient Structured Generation for Large Language Models》
- Anthropic 開發者文件“Tool use”章節
- 社群基準測試:structured-generation-benchmark(GitHub)
- 技術部落格:Lilian Weng 的“Controllable Text Generation”,解釋約束解碼原理
本頁所有量化資料均為定性估算,具體數值以官方最新發布為準。