AI 输出 JSON 出错,通常不是「不会写」,而是提示词里没有把格式要求写死、也没有给出校验后的修复回路。 解决办法分三层:生成时用示例和字段说明约束格式;拿到结果后用程序或另一段提示词检查;发现问题时把错误信息原样反馈,让 AI 只修错误、不改内容。

常见的四类错误

  1. 包了一层解释:前面加「好的,以下是 JSON」,或者用 Markdown 代码块包住。
  2. 字段缺失或多出:漏了必填字段,或者自作主张加了新字段。
  3. 类型不对:数字写成字符串、布尔值写成「是/否」、数组只有一个元素时写成了字符串。
  4. 语法错误:多余的逗号、中文引号、未转义的换行。

第一层:生成时预防

在提示词里写清四件事:只输出 JSON、字段列表和类型、缺失值怎么表示、一个完整示例。

请从下面的客户留言中提取信息,只输出一个 JSON 对象,不要输出任何解释或代码块标记。
字段:
- name: 字符串,客户称呼,没有就写 null
- intent: 字符串,只能是 "咨询"、"投诉"、"退货" 之一
- order_id: 字符串或 null
- urgent: 布尔值 true/false
- items: 字符串数组,即使只有一项也用数组
示例输出:
{"name": "王女士", "intent": "退货", "order_id": "A1023", "urgent": false, "items": ["蓝色外套"]}
留言:<粘贴>

要点:枚举值写全、null 的用法写明、「即使只有一项也用数组」这类容易出错的地方单独强调。

第二层:拿到结果后检查

如果你会一点编程,用 JSON 解析和字段校验最可靠;不写代码的话,也可以用一段检查提示词:

请检查下面的文本是否是合法 JSON,并对照字段规范逐项检查:
字段规范:<粘贴上面的字段说明>
只输出检查结果列表:每条写“问题位置|问题|应改为”。如果完全符合,只输出“通过”。
文本:<粘贴 AI 的输出>

第三层:只修错误的修复提示词

下面的 JSON 有以下问题:<粘贴检查结果或解析报错信息>
请只修正这些问题,不要改动其他字段的内容,不要增减字段,
修正后只输出 JSON 本身。
原 JSON:<粘贴>

把报错信息原样贴进去效果最好,例如「第 3 行第 15 列:意外的逗号」。

什么时候不该只靠提示词

  • 批量处理上百条数据:用程序解析,失败的条目自动重试一次,仍失败的人工处理。
  • 字段很多、嵌套很深:考虑拆成几次小提取,每次只要几个字段。
  • 工具支持结构化输出模式:很多 AI 平台的 API 提供 JSON 模式或按结构输出的功能,比纯提示词更稳,具体用法以各平台文档为准。

一个完整的小流程

  1. 用第一层的提示词生成。
  2. 程序解析;失败或字段校验不过时,把错误信息交给第三层提示词修复。
  3. 修复一次仍失败,记录下来人工处理,并回头看看是不是提示词里哪条规则没写清。

常见坑

  • 让 AI「顺便」在 JSON 里加备注,下游程序就会解析失败。要备注就单独加一个 note 字段。
  • 修复时没说「不要改内容」,AI 可能顺手改写了字段值。
  • 示例里的值被原样抄进结果。示例要用明显的示例值,或者给两个不同的示例。

相关阅读:结构化输出速查表、让 AI 稳定输出 JSON 的提示词,更多技能文章见 AI 技能分类。