詳細解釋
要求 LLM 生成符合特定結構(JSON Schema、Pydantic 模型)的輸出,而非自由文本。這對於需要將 LLM 輸入解析為程序數據的應用至關重要。
傳統方法的問題:
- 提示工程:「請以 JSON 格式返回」不一定可靠,模型可能輸出解釋文字再跟 JSON,或 JSON 語法錯誤
- 後處理:正則表達式提取容易出錯
- 驗證:需額外檢查輸出是否符合預期結構
結構化輸出技術:
- 受限解碼:修改採樣過程,僅允許符合語法的 token(如必須先輸出 {)
- 語法引導:CFG(Context-Free Grammar)限制輸出空間
- 輪詢修復:生成 → 驗證 → 若錯誤則重試(可能多次)
支持結構化輸出的平台:
- OpenAI:response_format={"type": "json_object"},或函數調用模式
- Anthropic:工具使用模式實際上強制結構化
- Ollama:format 參數指定 JSON schema
- Instructor:開源庫,包裝任何 LLM 實現結構化輸出
應用場景:
- API 調用:生成結構化的工具參數
- 數據提取:從文本提取姓名、日期、金額到 JSON
- 表單填寫:根據對話自動填充醫療問診表
- 配置生成:生成 YAML/TOML 配置文件
示例:提取發票信息 → 必須包含 {vendor, amount, date, items[]},每個字段有類型約束。
挑戰:複雜嵌套結構(深度 >3)的可靠性仍有限;強制結構可能降低輸出質量(為了符合語法犧牲內容)。