阅读《AI Engineering》笔记10 AI 幻觉的真相
甚至前一句刚说“Chip Huyen 是建筑师”,后一句又一本正经地胡说八道。模型在模仿“它不理解的知识”时,等于被训练去“瞎编但要编得像真的”。模型若生成一段解释性文字,一切 downstream 都挂。一个缺右括号的、跑不了的、甚至完全不是 JSON 的玩意。“模型其实知道自己知道什么,但我们训练方式却让它混淆了。它可能 70% 的时候回答越南菜,30% 说意大利菜。你让模型帮你生成一个 JS
为什么你的模型总是“不听话”?——一文讲透 Structured Output、采样机制和 AI 幻觉的真相
你有没有遇到过这种离谱场景:
你让模型帮你生成一个 JSON,它非常努力地给你……
一个缺右括号的、跑不了的、甚至完全不是 JSON 的玩意。
再比如:
同样的 Prompt 你问两次,它回答却完全不一样。
甚至前一句刚说“Chip Huyen 是建筑师”,后一句又一本正经地胡说八道。
这背后,其实都是 AI 结构化输出能力不足 + 采样机制本质概率性 + 幻觉机制固有缺陷 的综合结果。
今天这篇文章,我用 最通俗、最工程化、最干货、不打哑谜 的方式,带你看透:
-
为什么结构化输出难得要命?
-
为什么模型回答永远“不稳定”?
-
为什么模型会一本正经胡说八道(hallucination)?
-
工程上如何“驯服”模型,让它稳、准、不瞎编?
看完你将知道:
AI 的“不听话”不是能力问题,而是概率问题、训练机制问题、架构问题。
一、结构化输出:看似简单,其实是所有工程师的噩梦
模型生成结构化内容(如 JSON、YAML、SQL)为什么这么难?
因为语言模型天生是“写散文的”,不是“写代码的”。
但现实中,我们就是要它写——并且要“严格格式正确”。
结构化输出有两类最典型场景:
场景 1:任务本身必须结构化(如 Text-to-SQL、Text-to-Regex)
比如让 GPT-4o 生成一个邮箱地址的正则表达式:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
看似简单,对吧?
但实际工程中你会发现:
-
有时候它忘括号,
-
有时候它多转义,
-
有时候它给你写一段解释,而不是 regex。
你要的明明是 机器读得懂的结构化输出,
它却时不时来个 人类友好的散文。
场景 2:输出会被其他系统消费(如 JSON API)
比如你让模型生成一封邮件,但 downstream 要求格式必须是:
{
"title": "",
"body": ""
}
模型若生成一段解释性文字,一切 downstream 都挂。
工程灾难比模型内容本身更可怕。
二、怎么让模型乖乖输出结构化内容?四大常用方法
你可能听过很多,但真正有效的主要是 4 大类:
1. Prompting(提示词约束)
提示写清楚:
-
输出格式
-
字段要求
-
示例
-
严格禁止输出解释
成本最低,但不稳定。
适合作为第一道尝试。
2. Post-processing(后处理修补)
模型总爱犯固定错误,比如:
-
缺右括号
-
字段顺序乱
-
JSON 多了一句解释
工程师就写脚本自动修:
LinkedIn 的 YAML 修复器把准确率从 90% 拉到了 99.99%。
适用前提:
模型已经“八九不离十”,只需要你帮它补刀。
3. Constrained Sampling(约束采样)
这是最“硬核”的办法。
模型生成每个 token 前会输出 logits 向量,你可以:
把不符合语法的 token 全部过滤掉,只让模型在合法 token 里采样。
例如 JSON Grammar 决定:
-
{后不能跟{ -
key 必须跟
: -
string 要用引号
缺点也明显:
-
复杂、难维护
-
每种格式都要写 grammar
-
生成速度更慢
不是一般团队搞得起的。
4. Finetuning(微调)——最有效但最贵
你给模型大量“你想要的格式”的数据,它就能“学会”。
比如:
-
想要严格 JSON,就给它 10 万条 JSON。
-
想要固定 SQL 格式,就给它大量 SQL。
比 Prompting 稳太多。
如果你做的软件系统对格式要求极高,微调是最值得的投资。
三、为什么 AI 回答永远“不稳定”?——因为它本质是概率模型
问 AI:
世界上最好吃的菜系是什么?
它可能 70% 的时候回答越南菜,30% 说意大利菜。
因为采样机制天然概率性,不是确定性的。
为什么即使同样 Prompt,也会回答不一样?
原因有三个:
-
Temperature、top-k、top-p 等采样参数本身就是随机机制
-
不同硬件产生的浮点数差异
-
生成过程本身是逐 token 采样,每一步都可能走不同路径
你可以:
-
固定温度
-
固定 top-p
-
固定 seed
-
用缓存去保证同问同答
但:
你永远不能让它做到 100% deterministic。
四、幻觉(Hallucination):模型为什么一本正经地胡说八道?
这部分是很多人最关心的。
AI 幻觉到底是怎么来的?
它不是故意的。
它是机制问题,不是态度问题。
幻觉产生的两大核心原因
① 自我欺骗(Self-delusion)
来自 DeepMind 的经典例子:
模型生成一句错误事实
→
然后继续基于自己的错误事实往下扩写
→
越写越离谱
比如:
你问图片里的瓶子成分是什么,模型看成牛奶瓶:
“这是牛奶,因此含有奶制品。”
它自己造一个错,再用一堆错把它补圆。
② 模型知识 ≠ 人类标注者知识
SFT(监督微调)阶段:
-
标注者写的是“正确答案”
-
模型 可能根本不知道这些答案里的事实
-
但被要求模仿
结果就是:
模型在模仿“它不理解的知识”时,等于被训练去“瞎编但要编得像真的”。
OpenAI 的 John Schulman 早期就说:
“模型其实知道自己知道什么,但我们训练方式却让它混淆了。”
五、那么工程上应该怎么抗幻觉?
以下方法都实测有效——不是理论:
1. 让模型少说话(减少 token)
越长越容易编。
越短越接近模型真实知识范畴。
2. Prompt 加限制
例如:
-
“如果不知道就回答不知道”
-
“简短回答”
-
“必须引用来源”
能明显降低幻觉率。
3. Verification(自我验证)
每次回答完,让模型自己检查:
-
是否符合事实?
-
来源是什么?
类似“反思链”,对抗自我欺骗效果很好。
4. RLHF 奖励惩罚机制
给奖励模型“不要瞎编”的动力。
但注意:
早期 InstructGPT 实验显示 RLHF 有时会加重幻觉,
但整体体验依旧更好。
六、总结:模型“不听话”、不稳定、瞎编,都是机制所致
大模型本质是:
-
概率系统(所以不稳定)
-
自回归生成(所以会自我欺骗)
-
知识不对齐(所以会幻觉)
-
擅长语言,不擅长结构(所以结构化输出难)
驯服它的方式:
-
Prompt → 便宜但不稳
-
Post-processing → 修补刀
-
Constrained sampling → 工程硬控
-
Finetuning → 最强但最贵
-
Verification → 防幻觉
-
减少 token → 降低风险
这就是你做 AI 工程时 80% 的坑与解法。
更多推荐



所有评论(0)