如何利用 Few-Shot 技巧让 AI 稳定输出 JSON 格式且不带废话

独立游戏开发王 高级 2026/5/25 303 浏览 7 点赞 约 2 分钟

很多人在做 API 集成时最头疼的就是大模型偶尔会冒出几句“好的,这是为您生成的JSON:”或者在结尾加个“希望对你有帮助”,直接导致代码 json.loads() 报错崩溃。

我实测下来,单纯在 System Prompt 里写“请只输出 JSON,不要任何解释”在 GPT-4o 上效果尚可,但在 Claude 3.5 Sonnet 或 DeepSeek-V2 上,偶尔还是会出现冗余字符。最稳妥的方案其实是 Few-Shot(少样本提示),给它 2-3 组“输入 → 标准 JSON 输出”的样例,强行通过模式识别来约束它的行为。

对比测试结果如下:

GPT-4o
对指令遵循能力极强,但有时过于“礼貌”。如果不给 Few-Shot,它在处理复杂嵌套 JSON 时,偶尔会为了解释某个字段而破坏格式。加上 2 个样本后,输出的稳定性达到了 100%,且不再出现 Markdown 的

 代码块包裹(如果你的程序不需要解析代码块,这一点很重要)。

**Claude 3.5 Sonnet**
它是目前处理结构化数据最精准的模型。在使用 Few-Shot 之后,它不仅能稳定输出 JSON,而且对字段类型的把控(比如该用数字还是字符串)比 GPT-4o 更严谨。但如果样本给得不够典型,它可能会在 JSON 结尾尝试添加注释。

**DeepSeek-V2**
性价比极高,但对“不准废话”的指令偶尔会失灵。实测发现,DeepSeek 极其依赖 Few-Shot。如果没有样例,它大概率会带上 Markdown 标签;一旦给出 3 组严格的样本,它的输出格式能瞬间对齐,几乎没有冗余字符。

具体的 Prompt 结构建议这样写:
markdown

Role


你是一个结构化数据提取专家。

Constraints


  • 仅输出 JSON 字符串
  • 严禁包含任何自然语言解释、开场白或结尾语
  • 严禁使用 Markdown 代码块包裹
如何利用 Few-Shot 技巧让 AI 稳定输出 JSON 格式且不带废话

Examples


Input: 提取姓名和年龄:张三 25岁
Output: {"name": "张三", "age": 25}
Input: 提取姓名和年龄:李四 30岁
Output: {"name": "李四", "age": 30}

Task


Input: [这里放你的实际输入]
Output:

**核心避坑指南:**

**不要在样例中使用 Markdown 标签**:如果你希望 AI 直接输出 `{...}` 而不是
json {...} ```,那么你的 Few-Shot 样例里绝对不能出现反引号。

保持 Key 的一致性:样例中的 Key 必须与你最终想要的 Key 完全一致,AI 会通过样本直接复制 Key 的名称,这比你在指令里定义 Schema 要有效得多。

控制样本数量:通常 2-3 个样本就足够了,样本过多反而会占用 Token 导致响应变慢,且在某些模型上会产生过拟合,导致它只会复读样本里的值。

全部回复 (0)

还没有回复,来发第一条吧!

发表回复

支持 Markdown 格式