同一个问题问两次,答案措辞不同、细节对不上,第三次干脆给了个错的数字。这不是它"不稳定",是它本来就在按概率采样,而你对它的期待落在了它的能力边界之外。用不好大模型,多数时候不是提示词不够花,是没有分清哪些活它能干、哪些活它只能装作能干。
1. 它在做什么:下一个 token 的概率分布
模型每次只做一件事:给定前文,算下一个 token 的概率分布,采样一个,然后把这个 token 接回前文,重复。
| 你看到的 | 实际发生的事 |
|---|---|
| 一段流畅回答 | 几百次"选下一个词"的连乘 |
| 两次措辞不同 | 采样随机性(温度、top-p)所致 |
| 同一个错反复出现 | 该事实在高概率路径上被"顺"出来 |
| 格式稳定 | 后训练把格式概率抬高了 |
所谓"理解",在工程上指的是:它能把输入映射到训练分布中相似的结构上。相似结构里的关系它掌握得好,超出分布的关系就只能靠语言惯性拼凑。
2. 三类能力与三类不可靠
| 擅长 | 为什么擅长 |
|---|---|
| 复述、改写、翻译、摘要 | 本质是保持语义前提下的重新采样 |
| 模式归纳、格式转换、结构化抽取 | 训练数据里同类映射极多 |
| 约束下的推理(有明确规则、可逐步展开) | 规则写在提示里,成了强条件 |
| 不可靠 | 为什么不可靠 | 兜底做法 |
|---|---|---|
| 事实记忆(人名、日期、条款号) | 参数是压缩存储,细节最先被压掉 | 给它原文,让它只做引用 |
| 精确计算(大数乘除、逐项累加) | 按 token 生成,不做逐位运算 | 让它写代码/公式,由工具算 |
| 长链推理(十步以上依赖) | 中间步骤一错,后面全错且不自知 | 拆成多轮,每轮校验一次 |
能力与不可靠不是"水平高低",是同一机制在不同任务上的适配度差异。指望它算准 17 位数乘法,等于用计算器去写诗。
3. 幻觉的产生机制与四类高发场景
幻觉不是"它想骗你",是在没有依据时也必须输出下一个 token——空缺处会被最像的填充物补上,且语气与真话完全一致。
| 高发场景 | 例子 | 识别信号 |
|---|---|---|
| 具体数字 | 市占率、性能提升百分比 | 数字过于圆整或前后不一致 |
| 引用来源 | 论文标题、标准编号、链接 | 标题通顺但搜不到 |
| 最新事件 | 上月发布的版本、新政策 | 时间点靠近或晚于训练截止 |
| 小众实体 | 内部系统名、地方性机构 | 描述笼统、回避细节 |
对付它们的成本从低到高:要求给依据 → 要求标注不确定 → 提供原文限定范围 → 外部检索校验。
4. 知识边界与训练截止
模型对"今天"发生的事不知道,因为它只知道训练数据截止之前的世界。它会用截止前的模式去补截止后的空白,于是出现"版本号对但发布日期错"这类混合错误。
问:X 框架最新版本是多少?
差:直接给一个版本号(可能是训练截止时的,也可能被语言惯性编出来)
好:请只依据我提供的 release notes 回答;文件未提及则回答"未提及"。
判断一句话是否越过知识边界的办法:问它这条信息的来源。答不出具体出处却给得出精确细节,基本可以按幻觉处理。
5. 上下文窗口的实际含义
窗口大小是"能塞进去多少 token",不等于"能同等有效地使用"。实际表现有三条规律:
| 现象 | 机制层面的解释 | 应对 |
|---|---|---|
| 中间信息易丢 | 长序列上的注意力分配不均 | 关键约束放开头与结尾 |
| 长文后段变粗 | 早期指令被后续内容稀释 | 每轮重申核心约束 |
| 给了文件仍答偏 | 只读了被检索/截断的部分 | 让它先复述它读到的内容 |
"给了文件不代表它读了"是最高频的误解。上传只是把文本放进了上下文,是否被注意到、是否被完整保留,取决于长度、位置和后续提问方式。
6. 提示的最小结构
| 要素 | 作用 | 缺失后的症状 |
|---|---|---|
| 角色 | 限定语气与专业层级 | 输出泛泛而谈 |
| 任务 | 一句话说清要产出什么 | 答非所问、跑题补充 |
| 输入 | 明确哪些是材料、哪些是指令 | 把自己的话当材料改写 |
| 约束 | 长度、格式、禁止项 | 反复返工 |
| 输出格式 | 结构固定,便于下游使用 | 每次结构都不一样 |
差:帮我看看这段代码有什么问题
好:你是 Java 代码评审者。
任务:找出下面这段代码的并发安全问题,只列问题,不改写代码。
输入:<代码>
约束:每条问题一句话,注明行号;没有问题就回答"未发现"。
输出:JSON 数组,元素含 line、issue 两个字段。
差的提示把"要什么"留给你自己猜,好的提示把判断标准也写进去了("没有问题就回答未发现")。
7. 给例子胜过给形容词
"专业一点""简洁一些""有深度"这类形容词,模型只能按训练分布去猜你的阈值。给两个例子,它就能直接对齐到具体形态。
形容词版:把这段产品说明改得专业、简洁、有说服力。
示例版:按下面这种风格改写,保留原有事实,不加新数据。
示例输入:本产品支持多种格式。
示例输出:支持 PDF、DOCX、Markdown 三种格式导入。
原理很简单:形容词只约束分布的高层特征,例子直接给出了目标分布的具体样本。一个例子抵得上五个形容词,两个例子(一正一反)抵得上十个。
8. 迭代三步:复述 → 产出 → 自检
第 1 轮:请用三句话复述你对任务和约束的理解,不要开始写。
第 2 轮:按上面的理解产出第一版,只输出正文。
第 3 轮:对照约束逐条检查你的输出,列出不满足项并给出修订版。
第一轮的作用是提前暴露误解,比事后返工便宜。第三轮不能替代你自己校验——模型自检的准确率明显低于人工核对,它的价值在于把注意力重新拉回约束清单。
让模型对"不确定"显式表态,是性价比最高的一条工程手段:把"不知道"变成一个合法返回值。
输出格式:JSON
{ "answer": "...", "basis": "原文第几段 / 我的推断 / 无依据",
"confidence": "high | medium | low", "unknown_parts": ["..."] }
约束:basis 为"无依据"时 confidence 必须是 low,且 answer 要说明缺少什么。
不加这条约束,它几乎总给 high;加了之后,至少 low 那些条目会被你挑出来复核。
9. 验证责任在哪
| 输出类型 | 可否直接采用 | 验证方式 |
|---|---|---|
| 格式转换、摘要 | 可,抽查即可 | 比对原文关键点 |
| 代码片段 | 需运行 | 编译 + 测试 + 边界用例 |
| 事实陈述 | 需溯源 | 找到一手出处 |
| 数字与结论 | 需重算 | 用工具或脚本复算 |
| 决策建议 | 只作参考 | 自己补上约束与代价 |
判据只有一条:能被验证的输出才可用。验证不了的输出,无论多像样,都只能当草稿。
10. 不该交给它的四类任务
| 类型 | 原因 |
|---|---|
| 不可逆操作(删数据、发通知、扣款) | 出错无法回滚,且它不会主动停手 |
| 强合规判断(资质、法律定性) | 结论需要可追责的责任主体 |
| 无标准答案的开放决策 | 它会给一个自信的答案,掩盖了本来就没有答案 |
| 需要精确计算 | 生成机制不适合逐位运算 |
这些任务里它可以参与"准备材料、列举选项、指出遗漏",但决策与执行必须落在人身上。
11. 常见坑
| 坑 | 表现 | 改法 |
|---|---|---|
| 当搜索引擎用 | 拿到通顺但过时的答案 | 先检索,再让它基于检索结果回答 |
| 把长当好 | 回答越长越信任 | 明确长度上限,要求结论先行 |
| 一次问多件事 | 只答了其中一件 | 一事一问,或明确编号逐条回答 |
| 不看它说了什么 | 直接粘贴上线 | 逐句核对,尤其数字与专名 |
| 反复重问同一句 | 越问越偏 | 改提示结构,不是改措辞 |
12. 边界:什么时候别用大模型
| 场景 | 更合适的做法 |
|---|---|
| 规则明确、输入固定的转换 | 写代码,确定性高且可测 |
| 需要 100% 一致的输出 | 模板 + 参数填充 |
| 高频、低单价的小任务 | 正则或脚本,成本低一个量级 |
| 数据敏感且不可外发 | 本地模型或纯规则方案 |
一句话总结:它擅长处理"模糊但可校验"的活;不擅长"明确且必须精确"的活。
把一份任务交给它之前,先过一遍这张自查表:
1 输出错了,我能多快发现? → 发现不了就别交
2 我能独立验证这个结论吗? → 不能就只当草稿
3 这活的正确性由谁承担? → 必须是我,不是模型
4 换成脚本/模板会不会更好? → 会,就别用模型
5 它拒绝说"不知道"时我会察觉吗? → 察觉不了就先约束输出格式
13. 自测
- 同一个问题两次答案不同,机制上的原因是什么?
- 为什么"给它原文"能显著降低事实类幻觉?
- 上下文窗口大,为什么仍然会"没读到"中间那段?
- 提示里加"没有问题就回答未发现",解决的是什么问题?
- 为什么给两个例子比给五个形容词更有效?
- 哪一类输出连"抽查"都不够,必须重新计算?