修复 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 会触发付款、权限变更或破坏性操作,不要默默修复 —— 拒绝响应并重试,或把原始输出抛出来人工审核。修复适用于展示、调试和恢复;绝不能用于无人复核就改变系统状态的输入。