DOCAI · 课程 · L2 · 25 分钟
减少幻觉:给资料、要引用
幻觉不是模型坏了,是它在缺信息时选择了猜。这一课用三个动作把它从「猜」推回「不答」:限定材料、要求引用、留出口。
你将学会
- 判断一次回答是「知识错」还是「材料没给」
- 用限定材料 + 引用要求把猜测压下去
- 设计一个「不知道」也能正常返回的输出结构
先分清两种错
| 类型 | 表现 | 根因 | 对策 |
|---|---|---|---|
| 知识错 | 讲原理、讲历史时编细节 | 训练数据里没有或记错 | 换更强的模型,或自己给资料 |
| 材料错 | 你给了文档,它答的和文档不符 | 没读到、读漏了、或自己补了 | 检索 + 引用 + 校验 |
多数业务场景属于第二类:模型不是不知道,是没看到,或者看到了却按「常识」补全。
动作一:限定材料
在系统提示里写清边界:
只使用
<material>标签内的信息回答;材料里没有的,写「材料未提及」。 不要用材料之外的知识补充。
加上「不要用外部知识」这一句,比只说「根据材料回答」有效。
动作二:要求引用
每个结论后面标出来源片段(文件名 + 原文一句)。
引用有两个作用:
- 逼模型先找到原文再下结论;
- 让你能在 30 秒内核对,而不是通读全文。
动作三:给「不知道」留出口
如果输出结构只允许「答案」,模型就只能编。给它一个合法出口:
{ "answer": "...", "evidence": ["..."], "missing": "材料未提及的部分" }
missing 字段的作用是把「不知道」变成正常返回,而不是失败或幻觉。
再加一层:检索
材料太长时,整篇塞进去,模型对中段的利用会下降。 先检索出最相关的几段再注入(见最小 RAG), 命中率通常比整篇更好。
验证方法
准备 10 条问题,其中 3 条故意问材料里没有的内容:
- 如果模型对那 3 条也给出了肯定回答,说明你的边界没生效;
- 正确行为是回答「材料未提及」。
这比测「答对了多少」更能暴露问题。
常见错误
- 「请准确回答」:没有可执行动作,等于没说。
- 只给资料不给引用要求:模型仍可能凭印象总结。
- 没有 missing 字段:模型被迫在「编」和「空着」之间选。
- 温度调到 0 就以为不会编:幻觉主要来自信息缺失,不是采样随机。
自测
- 你的场景里,幻觉是知识问题还是材料问题?
- 那 3 条「材料里没有」的问题,你的系统会怎么答?
下一步
- 概念:幻觉
- 检索方案:搭一个最小可用的 RAG
- 模板写法:提示词模板