别再把 RAG 的所有胡说八道都叫“幻觉”了,其实大部分是提取错误。
很多时候模型明明读到了上下文,但给出的答案不对,这在逻辑上根本不是幻觉(Hallucination),而是提取(Extraction)环节翻车了。定义不清就没法针对性优化,如果你发现模型在 RAG 链路里总是莫名其妙地跑题或遗漏关键点,大概率是生成契约(Generation Contract)没定好。
如果是在做企业级文档智能,建议把生成过程拆解成:
下一篇
我的天,现在的AI钓鱼邮件已经进化到这种地步了吗? →
想要强迫模型“老实”点,可以尝试这几种强类型约束的模式,尤其是对那些参数量较小的模型,直接让它生成复杂答案很容易崩,得用分解规则。
这里分享几个实操中能压制错误生成的逻辑:
- 严格类型定义: 在 Prompt 中明确要求输出格式(如 JSON 或特定 Schema),强制模型在提取时进行类型对齐。
- 分步提取分解: 别让模型一步到位。先让它把相关片段原封不动地摘录出来,再基于摘录进行总结。
- 否定约束: 明确定义“未找到”时的标准响应,防止模型为了完成任务而强行脑补。
如果是在做企业级文档智能,建议把生成过程拆解成:
检索 -> 关键信息提取 -> 答案组装。这样一旦出问题,你可以一眼看出是检索没搜到,还是提取的时候把信息弄丢了。具体的 Prompt 约束可以参考这种结构:
# Generation Contract
- Extraction Source: [Context]
- Required Fields: {field_1: string, field_2: boolean}
- Constraint: If information is missing in [Context], return "N/A" for that field.
- Process: 1. Quote evidence -> 2. Map to field.