洞察AI約 4 分鐘閱讀

讓企業 AI 穩定輸出結構化資料:Schema 約束、驗證與修復

企業 AI 的輸出只要會進入資料庫、API 或工作流程,「看起來像 JSON」就不夠。可靠的做法是把模型視為不穩定的資料來源,透過明確契約、驗證與修復機制控制風險。

先把 Schema 當成系統契約,而不是提示詞附件

企業應用常要求模型從郵件、客服對話、報價單或維修紀錄中產生 JSON,接著寫入 CRM、ERP、工單系統或資料庫。真正的風險不只是 JSON 語法錯誤,更常見的是欄位缺漏、型別漂移、列舉值失控、日期格式不一致,以及模型自行加入下游不認識的欄位。人工閱讀時這些差異不明顯,進入自動化流程後卻可能造成錯誤路由、資料污染或 API 失敗。

因此,Schema 應由資料消費端的需求反推。先確認哪些欄位是必要值、哪些可以為 null、哪些只能使用固定列舉,以及不同版本如何相容。像「沒有資料」與「模型無法判斷」通常不該共用空字串;前者可用 null,後者則可搭配狀態欄位或原因碼。金額應拆成數值與幣別,日期應指定格式與時區,識別碼則應保持字串,避免前導零或長整數在不同語言中被改寫。

若平台支援 JSON Schema、函式呼叫或受限解碼,應優先使用,但不要把它們視為完整保證。不同模型與供應商只支援部分 Schema 關鍵字,對 format、pattern、oneOf 或複雜條件的執行程度也可能不同。上線前必須確認實際支援範圍,並保留應用層驗證。

可靠管線需要生成、驗證與業務規則三層防線

第一層是生成約束:限制模型只能輸出符合指定形狀的資料,關閉額外欄位,降低溫度,並提供清楚的欄位說明。第二層是語法與 Schema 驗證:確認輸出可解析,而且 required、type、enum、長度與巢狀結構全部符合契約。第三層是業務驗證:檢查 Schema 無法充分表達的規則,例如結束時間不得早於開始時間、訂單總額應能由明細計算,或客戶代碼必須存在於主資料。

實作時,建議將下列決策直接寫入契約與測試,而不是只放在提示詞裡:

  • 缺值語意:區分 null、空字串、空陣列與未知狀態,避免下游自行猜測。
  • 列舉策略:需要穩定路由的欄位使用受控 enum;開放描述則放在另一個文字欄位。
  • 數值與單位:數值、幣別、百分比基準與計量單位分開儲存,不讓模型輸出「約十萬」之類混合值。
  • 來源證據:重要欄位附上來源片段、文件頁碼或訊息識別碼,方便追查,但不可把模型產生的引文誤當原始證據。
  • 信心與狀態:不要只依賴模型自評分數;搭配可驗證條件、缺值清單與人工覆核狀態更實用。

修復要分層處理,不能無限重試

驗證失敗後,第一步應採用確定性的修復,例如移除 Markdown 包裝、統一可安全轉換的日期格式,或將已知別名映射到正式列舉值。只有在轉換不會改變語意時才應自動修復;把任意文字強制轉成數字,或猜測缺少的客戶代碼,都可能製造比拒絕資料更危險的結果。

第二步才是模型修復。將原始輸出、Schema 與精簡的驗證錯誤交給模型,要求只修正違規部分,不重新解讀整份來源。修復後必須重新執行完整驗證,且設定明確的重試上限。若仍失敗,就應進入隔離佇列、人工覆核或降級流程,而不是持續呼叫模型。對會觸發付款、刪除、權限變更或對外通知的資料,即使通過 Schema,也應保留額外核准。

也要避免「靜默修復」。系統應記錄原始輸出、修復後資料、驗證錯誤、使用的 Schema 版本、模型版本與處理結果。這些資訊不一定都適合長期保存;若內容包含個資或商業機密,應先遮罩敏感欄位,並依資料政策設定保存期限。

用失敗樣本與版本治理維持長期穩定

結構化輸出不是一次設定後就永遠可靠。模型版本、提示詞、來源文件格式與業務欄位都會變動,因此測試集應包含真實世界的困難輸入:缺頁文件、表格錯位、中英混合、同名欄位、否定句、互相衝突的內容,以及完全找不到答案的情況。測試不只要確認 JSON 可解析,也要比較關鍵欄位的語意是否正確。

Schema 也需要版本化。新增可選欄位通常較安全;重新命名欄位、改變型別或縮小 enum 則可能破壞既有消費端。較穩健的做法是保留版本號,讓生產端與消費端能在過渡期間同時支援新舊格式,並透過契約測試確認 CRM、ERP、資料倉儲與自動化流程仍能正常運作。

日常監控應觀察驗證失敗類型、修復次數、人工覆核原因與各 Schema 版本的相容問題,而不只看模型 API 是否成功回應。當錯誤集中在特定欄位時,通常應先改善契約、來源資料或規則設計,而不是一味增加提示詞。若系統橫跨多個企業平台,讓熟悉資料契約與整合流程的工程團隊共同設計,往往比單獨調整模型更能維持穩定。

本文由 AI 依聖索科技規劃的主題自動撰寫,內容為一般性說明,導入前請依實際情況評估或與我們討論。

開始

有類似的需求?

告訴我們你的產業、目前系統狀態與預算範圍。我們會在 2 個工作天內回覆,並安排 30 分鐘免費諮詢。