你給大模型指定了 JSON 模式,但它還是會漏掉字段、亂填數值,怎么辦?
Thoughtworks 技術雷達第 34 期(2026 年 4 月)把“大模型結構化輸出”直接放進 Adopt 環——這不是“評估”或“試用”,而是業界現在就該做的事。換句話說,讓模型返回符合預定格式的 JSON,已經從探索階段進入成熟實踐。但翻過這頁紙的人都知道,愿望和落地之間還隔著兩條溝:一條是把模式翻譯成模型能讀懂的自然語言提示,另一條是給模型的輸出做邊界校驗。
![]()
有人會說,OpenAI 的 response_format: { type: "json_object" } 允許直接傳模式,服務器會幫我們完成翻譯,不需要自己動手。可如果你用的是 Anthropic、OpenRouter、本地 llama.cpp 的裸 API,或者在精細控制提示詞時必須手寫那一段說明,那么你很可能體驗過下述場景:模型信誓旦旦地返回了 JSON,打開一看卻少了一個 required 字段;枚舉值“positive”被寫成“POSITIVE”;整數范圍從 0?1 變成了 0?100——這還是在你反復叮囑“只輸出 JSON”之后。
上述問題并非偶然。即使開了結構化輸出,模型仍會錯覺枚舉值、漏填必填字段、突破最大值限制,這就是現實。所以才有開發者做了一個不到 500 行的純 JavaScript 工具,把從 JSON 模式到自然語言提示的轉換、示例輸出的生成、輸出對原始模式的校驗都透明地擺在一起,不依賴任何大模型接口,也不帶構建步驟。你可以直接在瀏覽器里粘貼一份 JSON Schema,看到對應的提示片段長什么樣,再拿樣例輸出去驗證。演示地址:https://sen.ltd/portfolio/schema-prompt/,代碼倉庫:https://github.com/sen-ltd/schema-prompt。
這個工具把“給模型一個模式”拆成兩件獨立的事。第一件是模式到提示的轉化。大模型并不會直接讀 JSON Schema 的原生語法——type、properties、required 這些關鍵字必須被重新表達為結構化的自然語言要點,模型才能遵循。工具做了一套遞歸翻譯:枚舉變成 [one of: ...] 這種記號,讓模型直接面對候選值而不是解析枚舉定義;數字范圍用“≥ 0, ≤ 1”這樣的 Unicode 比較符,穿透分詞器不會變形;required 字段明確標注“(required)”,optional 也標上,因為實踐中必填是最容易被忽略的信號,需要雙重提醒。嵌套的對象和數組會縮進展開,數組的元素類型單獨一行注明“(each item)”,末尾再跟一句“Use null for fields you cannot determine. Do not invent data.”——這條抑制幻覺的咒語,沒有它,模型會鎮定地為你編出那些它根本推斷不出來的字段。
第二件是輸出驗證。哪怕提示寫得滴水不漏,獲取到的 JSON 依然可能缺失 required 字段,或者把字符串塞進要求 number 的位置。工具直接在返回體邊界上卡一道檢查,把這類運行時漂移轉化為類型化的錯誤,提醒你“缺失 sentiment 字段”“confidence 值 1.2 超出最大值”。這一步平時被 Instructor、Pydantic AI、Outlines 等庫封裝起來了,而當你直接調裸 API 時,就得自己寫,現在工具把它直觀地攤開。
一份簡單的情緒與置信度模式輸入,在工具里會生成這樣一段提示:“Return a JSON object that conforms to the following structure. Fields: sentiment: string [one of: ["positive","negative","neutral"]] (required) — Overall sentiment of the input text; confidence: number [≥ 0, ≤ 1] (required) — Confidence score, 0–1; keywords: array [max 5 items] (optional) — (each item): string [length ≥ 1] (optional).”你立刻能察覺枚舉值被顯式列出、數值區間用比較符、必填與可選都寫清楚了,而且嵌套數組的項目限制也單獨說明。對照原始 Schema,你不會再漏看任何約束。
正方強調行業應該直接采納結構化輸出,這沒錯;反方拿幻覺和字段缺失打臉,也沒錯。真正的問題從來不是結構化的方向不對,而是從“有規范”到“規范被執行”之間存在太多隱性的翻譯和校驗步驟。這個工具沒有發明新的抽象,只是把那條藏在庫和文檔后面的路徑照得清清楚楚。對于還在裸調接口、需要確信“提示到底是怎樣送到模型面前”的開發者來說,這種透明感比任何包裝都更有用。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.