使用 Few-Shot 样本引导提升 LLM 输出标准 JSON 格式的稳定性技巧
在工程对接中,LLM 偶尔输出的“Here is the JSON:”或多余的 Markdown 闭合标签常导致解析崩溃,单纯在 System Prompt 中强调“必须只输出 JSON”在处理复杂结构时往往不够稳健。
提供 3-5 组高质量的 Few-Shot 样本是目前最可靠的方案。GPT-4o 指令遵循度极高,但偶尔会过度简化 JSON 字段;Claude 3.5 Sonnet 在样本隐含的逻辑推演上更强,输出的 JSON 内部语义更精准。
为了降低模型幻觉,关键在于样本的“边界感”与“多样性”。建议采用 输入 -> 输出 的成对样本,并特意加入一个“无法处理”的负例。以将非结构化评论转换为 JSON 情感分析为例,Prompt 结构如下:
# System
你是一个评论解析专家,请严格按照以下示例格式输出 JSON。
# Examples
Input: "物流很快,但东西质量一般。"
Output: {"sentiment": "neutral", "tags": ["logistics", "quality"]}
Input: "太棒了!完全超出预期!"
Output: {"sentiment": "positive", "tags": ["overall"]}
Input: "这东西根本不能用,差评!"
Output: {"sentiment": "negative", "tags": ["functionality"]}
Input: "今天天气不错。"
Output: {"sentiment": "unknown", "tags": []}
# Task
Input: {{user_input}}
Output:
关于样本数量的边际效应,简单格式 2 个样本即可,嵌套深、字段多的 JSON 建议 3-5 个。样本数超过 10 个后,模型容易被内容干扰,倾向于复读样本值而非分析新输入。在支持的 API 调用中(如部分开源模型),可在 Assistant 消息开头预填 { 字符,直接引导模型进入 JSON 模式,杜绝废话。
不同主流模型的 JSON 稳定性表现如下:DeepSeek-V2.5 性价比极高,Few-Shot 引导后的格式稳定性与 GPT-4o 基本持平,适合大规模批处理;Claude 3.5 Sonnet 最推荐,对样本定义的 JSON Schema 学习速度最快,即使样本较少也能稳定维持复杂嵌套结构;Gemini 1.5 Pro 长文本能力强,但有时会在 JSON 外增加解释,需要更强硬的 Few-Shot 约束。
免费 AI 工具箱 · 全部完全免费
更多可复用的提示词工作流收录在ChatGPT提示词优化指南,有不少直接可参考的案例。
