如何提示 AI 以获得一致的 JSON 响应
Source: Dev.to
这篇文章最初发布在 VSL Substack 发行版。

错误的 JSON 意味着高成本
当你构建依赖结构化数据的功能(如 API 集成、数据库操作或配置文件)时,JSON 的一致性直接决定了你的应用是正常工作还是崩溃。一次格式错误的响应就可能迅速导致数百个用户操作失败、数据库写入损坏,以及支持工单淹没你的收件箱。
虽然 AI 在开发阶段生成的 JSON 看起来是正确的,但在生产环境中会暴露出以下不一致:
- 在严格的解析器中缺少逗号或出现多余的尾随逗号
- 用户生成内容中的未转义引号
- 来自国际用户的 Unicode 字符
这些细小的格式错误会导致整个功能崩溃,因此你需要 AI 始终输出有效且可用于生产的 JSON,而不仅仅是在本地测试中成功。
机场安检模型
机场安检会在办理登机、安检以及登机口多次检查你的证件,因为错误的代价太高。JSON 验证的原理也是如此:AI 在受控条件下可能生成结构上正确的 JSON,但在真实世界的变化中常常会出错。设置多个验证检查点可以在错误进入生产之前将其捕获。
大多数开发者只停留在提示阶段,但要让应用达到生产就绪,需要 五个不同的检查点 来确保可靠性。
AI 最常破坏你数据的方式
- 语法错误 – 缺少或多余的逗号、方括号或引号会立即导致
JSON.parse()失败。例如:最后一个属性后面出现尾随逗号或嵌套对象未闭合。 - 转义字符陷阱 – 在 JSON 字符串内部进行双重转义(例如
\\"而不是\"),虽然在技术上是有效的字符串,但对你的解析器来说是无效的 JSON。 - 结构不匹配 – 收到格式正确的 JSON 对象,但其形状与预期不符,例如
{"title":"My Article"}而你的代码期望{"article":{"title":"My Article"}}。 - 类型混淆 – 返回字符串而不是数字,或返回数组而不是对象。例如
"25"(字符串)而不是25(数字)。 - 响应截断 – 大体积负载可能因模型的 token 限制被截断,导致 JSON 片段不完整。可靠的解决方案是请求更小的块并在代码中拼接结果。
5‑检查点框架,打造坚不可摧的 JSON

1. 在提示中明确指示
不要说: “返回 SEO 数据的 JSON。”
要说: “仅返回有效的 JSON,且不包含任何额外文字。使用以下精确结构: {\"title\": string, \"description\": string}。”
2. 提供 JSON Schema
获取一致 JSON 结构的最可靠方式是给 AI 一个明确的 schema。JSON Schema 定义了数据的结构、类型和必需字段,消除歧义。
在提示中加入以下内容:
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 70,
"description": "An engaging, SEO‑friendly article title"
},
"description": {
"type": "string",
"maxLength": 160,
"description": "A concise summary of the article content"
}
},
"required": ["title", "description"],
"additionalProperties": false
}
为什么有效: Schema 消除了类型混淆和结构不匹配,因为模型在生成时会依据 schema 模式进行自我验证。additionalProperties: false 标志禁止出现幻觉字段,在错误到达代码之前就捕获它们。更多信息请参阅 OpenAPI Schema 规范。
3. 要求代码块
在提示中加入:“用带有 json 语法高亮的 markdown 代码块包裹 JSON。”
这可以防止 AI 在 JSON 前后添加解释性文字,从而在提取响应时避免解析错误。
4. 使用前先验证
永远不要假设 AI 的输出是有效的。始终在 try‑catch 块中进行解析:
try {
const data = JSON.parse(aiResponse);
// Use data here
} catch (error) {
console.error('Invalid JSON from AI:', error);
// Handle the error gracefully
}
5. 解析后检查结构
有效的 JSON 并不保证形状正确。解析后进行轻量级验证:
function validateSeoData(data) {
if (!data.title) return false;
if (typeof data.title !== 'string') return false;
if (typeof data.description !== 'string') return false;
return true;
}

红旗警示:需要留意的情况
- 🚩 AI 在 JSON 前后添加解释性文字 – 会导致解析失败。
- 🚩 缺少或多余的逗号、方括号或引号 – 直接导致
JSON.parse错误。 - 🚩 双重转义字符 – 生成的字符串不是有效的 JSON。
- 🚩 意外的结构或类型 – 会引发下游逻辑错误。
- 🚩 输出被截断 – 导致不完整、无法解析的负载。
通过落实上述五个检查点并对这些红旗保持警惕,你就能每次都可靠地从 AI 模型获取干净、可用于生产的 JSON。