修復 LLM 輸出的 JSON

AI 回應看似 JSON,但常常夾雜 markdown 圍籬、註解、Python 風格字面值或 JavaScript 物件語法。

LLM JSON 常見的問題

Markdown 程式碼圍籬、註解、單引號、未加引號的鍵、尾隨逗號,以及 Python 的 True、False、None,都會讓一個本來有用的 AI 回應無法通過嚴格 JSON 解析。

修復流程

把回應貼到 JSON Fix,按 Repair & Format,再按 Validate 確認輸出是嚴格 JSON,之後再拿去用在程式碼或 API 請求裡。

隱私提示

修復完全在瀏覽器本機完成,所以在除錯含有內部範例或私有 API 負載的 prompt 時也可以放心用。

工具與作法

在瀏覽器中整理時,把 LLM 輸出貼到 JSON Fix,按 Repair & Format —— 它會一次把 markdown 程式碼圍籬(```json ... ```)、尾隨逗號與 Python 字面值(True/False/None)通通拿掉。在 Node 裡,npm 套件 jsonrepair 能以無相依套件的方式做同樣的事。

用 prompt 來減少修復量

限制輸出:「只回覆一個 JSON 物件,不要其他文字、不要 markdown 圍籬、不要解說」。如果模型支援,啟用 JSON 模式或 response_format json_object —— 這從根本消除圍籬與散文。在 prompt 中放入 schema(或透過 function calling)還能進一步減少多餘的鍵。

從 LLM 串流取得 JSON

在 token 還在串流時,JSON 依定義是不完整的 —— 還沒有閉合括號。要嘛先暫存到回應結束再一次 parse,要嘛使用能容忍串流的解析器(jsonrepair、partial-json),它們會回傳目前最合法的前綴,讓你可以邊收邊渲染。

什麼時候該失敗而不是修復

如果 JSON 會引發金流、權限變更或破壞性動作,不要默默修復 —— 拒絕回應並重試,或把原始輸出丟出來人工檢視。修復適用於顯示、除錯與復原;絕不能用在無人複核就會改變系統狀態的輸入。