如何用 JSON 约束 Prompt 彻底根除 AI 在处理碎片新闻时的过度推演
这种现象在 LLM 中非常普遍,本质上是因为自然语言的输出空间太大,模型倾向于通过增加修饰词来提高所谓的“流畅度”,但这在追求事实精准的场景下反而是噪音。
我最近在调优一套专门对付碎片化信息的提取 Prompt,核心逻辑是:放弃自然语言总结,强制要求模型输出结构化的 JSON 事实清单。
具体到实操,我定义了一个名为“精准信息提取器”的角色,其核心约束在于严禁增加原文未提及的推论。以下是我目前在生产环境中使用的一套 Prompt 结构:
# Role: 精准信息提取器
# Task: 将非结构化短讯转化为 JSON 事实清单
# Constraint: 严禁增加原文未提及的推论,仅提取实体和关系
## Input: {{text}}
## Output Format:
{
"subject": "主体",
"event": "事件",
"reason": "触发原因",
"time_frame": "时间维度"
}这套方案的高明之处在于它将 AI 的思考路径从“概括”转向了“填空”。当你要求它输出 JSON 时,模型必须在预设的 Key(如 subject, event)中寻找对应值。如果原文中没有提到原因,它在填充 reason 字段时会面临一个选择:要么留空,要么填入原文词汇。由于我们在 Constraint 中明确了“严禁增加推论”,模型在面对缺失信息时会变得保守,从而有效过滤掉那些 AI 自行脑补的“文学创作”。
举个实操中的对比例子。面对一条关于“特朗普因伊朗代理人威胁而更换飞机”的短讯,如果使用常规总结指令,AI 可能会输出:“由于伊朗代理人的潜在威胁,特朗普在近期采取了安全措施,更换了飞行航班以确保行程安全。” 这段话虽然正确,但包含了“潜在”、“采取安全措施”等推演词汇。
而使用上述 JSON 约束后,输出结果会变得极其干脆:
- Subject: Trump
- Event: Switched planes
- Reason: Threat from Iran proxies
- Time: Earlier this month
这种极简的 KV 对(Key-Value Pair)不仅方便后续通过脚本进行自动化处理,更重要的是它将信息的颗粒度压缩到了最底层。对于需要处理海量碎片化数据的用户来说,这种方式能极大地降低人工审核的成本。
在实际部署时,我建议配合 GPT-4o 或 Claude 3.5 Sonnet 等对指令遵循能力较强的模型。如果你发现模型偶尔还是会蹦出几句解释性文字,可以在 API 调用时将 temperature 参数调低至 0.1 甚至 0,进一步压制模型的随机性和创造力,使其彻底变成一个纯粹的提取工具。