检索准但还幻觉,90%是生成侧没管住
模型在偷偷用自己的老知识,而不是只信检索文档。下面按面试回答逻辑讲清楚:原因→Prompt写法(System+User分工)→工程级解法。
一、为什么检索准还会幻觉?
核心矛盾:LLM天生会把“检索文档”和“自己参数里的旧知识”混着用。
- 例子:文档写“重疾险等待期180天”,模型却答“90天”,因为训练数据里见过90天的产品。
- 本质:检索给了证据,但模型“自作聪明”补全/替换,这是RAG幻觉最主要来源(生成侧,占60%+)。
其他次要原因:
- 上下文冲突:多个文档说法不一致,模型自己“和稀泥”。
- 信息不全:文档只给了部分信息,模型爱“补全”。
- 分块/拼接问题:chunk切得太碎,上下文被打断,理解偏了。
二、面试官重点:Prompt怎么写?System Prompt 和 User Prompt 分工
1)System Prompt(定规则、划边界,必须强约束)
核心:切断模型参数知识,强制只信上下文,不编造、不混合。
模板(可直接背):
plaintext
你是严格基于参考文档作答的助手,必须遵守:
1. 只能使用【参考文档】中的信息,**绝对不能使用你自己的知识**;
2. 文档里没有的信息,直接回答“无法从文档中找到答案”,**严禁猜测、编造、补充**;
3. 回答必须简洁、准确,**不能改写、夸大、模糊**;
4. 所有事实必须来自文档,**禁止混入外部信息**。
2)User Prompt(传问题+上下文,干净无歧义)
模板:
plaintext
【参考文档】
{检索到的chunk文本}
【用户问题】
{用户原始问题}
请严格按System Prompt规则回答:
3)关键分工(面试必说)
- System Prompt:定“法律”,规定能做什么、不能做什么,锁死知识边界。
- User Prompt:给“证据+问题”,只负责传上下文和用户问题,不掺规则。
- 分开写的目的:让模型把“规则”和“信息”彻底分开,减少混合概率。
三、工程级加固(光Prompt不够,面试加分项)
1)生成侧:强约束+引用溯源(最有效)
- 温度调低:temperature=0.0~0.1,减少随机性。
- 引用增强(Citation):每句话标来源,比如“[1]等待期180天”,强制模型不能瞎编。
- 幻觉校验:用小模型(如3.5)检查答案是否忠实于上下文,不达标重写或拒答。
2)检索侧:精准+降噪(防止“假准”)
- 混合检索:向量(语义)+ BM25(关键词),避免纯向量“语义漂移”。
- 重排(Reranker):初召Top50→Cross-Encoder精排→留Top5~10,过滤噪声。
- 去重+过滤:相似chunk合并,无关直接删,减少上下文冲突。
3)上下文侧:chunk质量优化
- ** chunk大小合理**:200~500字,不碎不冗长,保证语义完整。
- ** 重叠(Overlap)**:10%~20%,避免上下文断裂。
四、面试标准回答(背下来直接用)
“检索准但仍有幻觉,核心是生成阶段模型混合了自身参数知识,而非仅依赖检索文档。
我的解法分三层:
1. Prompt严格隔离:System Prompt强约束‘只能用文档、不能猜测、信息不足拒答’;User Prompt只传上下文和问题,规则与信息分离。
2. 生成侧加固:temperature设0.1,开启引用溯源(Citation),每事实标来源;用小模型做忠实度校验,拦截幻觉。
3. 检索与上下文优化:用向量+BM25混合检索,加Reranker精排;chunk控制在300字左右、带重叠,减少语义断裂。
这样能把检索准情况下的幻觉率压到5%以内。”
ai关键词调研 ai查文献 文献分析工具 检索增强模型 INTJ分析 推断算法 检索评测