如何提示 AI 以获得一致的 JSON 响应

发布: (2025年12月2日 GMT+8 22:03)
7 min read
原文: Dev.to

Source: Dev.to

这篇文章最初发布在 VSL Substack 发行版

Consistent JSON Output System

错误的 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

The Validation Checkpoint System

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;
}

5‑stage validation

红旗警示:需要留意的情况

  • 🚩 AI 在 JSON 前后添加解释性文字 – 会导致解析失败。
  • 🚩 缺少或多余的逗号、方括号或引号 – 直接导致 JSON.parse 错误。
  • 🚩 双重转义字符 – 生成的字符串不是有效的 JSON。
  • 🚩 意外的结构或类型 – 会引发下游逻辑错误。
  • 🚩 输出被截断 – 导致不完整、无法解析的负载。

通过落实上述五个检查点并对这些红旗保持警惕,你就能每次都可靠地从 AI 模型获取干净、可用于生产的 JSON。

Back to Blog

相关文章

阅读更多 »

切换账户

@blink_c5eb0afe3975https://dev.to/blink_c5eb0afe3975 正如大家所知,我正重新开始记录我的进展,我认为最好在一个不同的…

Strands 代理 + Agent Core AWS

入门指南:Amazon Bedrock AgentCore 目录 - 前置要求(requisitos‑previos) - 工具包安装(instalación‑del‑toolkit) - 创建…