如何处理 Agent 的幻觉问题
1️⃣ 考察意图
面试官想考察你对 Agent 幻觉的系统性认知,而非单纯背诵“RAG能解决幻觉”。刁钻点在于:Agent 的幻觉比 LLM 更复杂,涉及工具调用、多步推理和记忆污染。答好了能展示你从“识别类型”到“多级防御”的工程落地能力,包括对检索增强、约束解码、自我校验等方法的取舍理解,以及如何用反馈完整流程持续优化。
2️⃣ 标准答
处理 Agent 幻觉需从“成因分析”到“多级防御”分层解决,核心是区分事实性幻觉(知识错误)和忠实性幻觉(偏离指令或上下文)。
1. 识别幻觉类型
- 事实性幻觉:Agent 编造不存在的事实,如客服 Agent 说“我们的退款政策是7天”,实际是30天。
- 忠实性幻觉:Agent 忽略用户指令或上下文,如要求用中文回答却输出英文,或工具调用后忽略返回结果。
- 诊断方法:使用SelfCheckGPT或NLI模型(如DeBERTa-v3)对输出进行逐句事实核查,对比检索到的知识库片段。
2. 检索增强(RAG)作为第一道防线
- 混合检索:用BM25(k1=1.5, b=0.75)处理关键词匹配,结合向量检索(如text-embedding-3-small)处理语义相似度,最后用Cohere Rerank或BGE-Reranker重排序Top-5结果。
- 坑与解法:检索到的文档可能包含噪声或矛盾信息。解法是分块策略:用语义分块(如LangChain的RecursiveCharacterTextSplitter,chunk_size=512, overlap=128)确保每个块独立完整;同时引入检索后过滤,用LLM判断检索结果是否相关(如“如果检索结果与问题无关,返回‘无法回答’”)。
- Trade-off:检索增强增加延迟(约200-500ms),但能显著降低事实性幻觉率(从30%降至5%以下)。对于实时性要求高的场景(如聊天),可缓存高频查询结果。
3. 约束解码限制生成空间
- 结构化输出:强制Agent输出JSON Schema(如
{"action": "search", "query": "..."}),用Outlines或LMQL库实现。这能防止Agent在工具调用时编造参数。 - 工具调用约束:使用function calling(如OpenAI的tools参数)或ReAct模式,让Agent只能调用预定义工具(如
search_web、calculate),避免自由生成。 - 坑与解法:约束过严可能导致Agent无法处理边缘情况。解法是兜底策略:当Agent无法匹配任何工具时,输出“需要更多信息”并触发人工介入。
4. 自我校验与批评模型
- Self-Consistency:对同一问题采样多次(如temperature=0.7, n=5),用多数投票或语义相似度(如BERTScore)选择最一致答案。适用于数学或事实性问题。
- 批评模型:用另一个LLM(如GPT-4作为批评者)对Agent输出进行事实核查。例如,让批评模型检查“回答是否与检索到的知识库一致”,并给出置信度评分(0-1)。
- 坑与解法:批评模型可能过度纠正或引入新幻觉。解法是分层校验:先检查事实一致性,再检查指令遵循度,最后用规则(如正则表达式)过滤明显错误(如日期格式错误)。
5. 反馈完整流程持续优化
- 用户纠错数据:收集用户反馈(如“回答错误”按钮),标注为负样本。用DPO或GRPO微调模型,或调整prompt(如添加“如果不确定,请说不知道”)。
- 离线评估:构建测试集(1000条),统计幻觉率(事实错误比例)。目标从15%降至5%,并监控召回率(避免过度保守导致“不知道”过多)。
- Trade-off:反馈完整流程需要持续投入标注成本,但能针对性解决长尾问题。对于冷启动场景,先用规则和RAG兜底。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,识别幻觉类型,区分事实性和忠实性幻觉;第二,用RAG和约束解码作为第一道防线,混合检索加结构化输出;第三,用自我校验和反馈完整流程做第二道防线,Self-Consistency和批评模型。总结一句:没有银弹,需要分层防御,从检索增强到约束解码再到持续优化。”
4️⃣ 高频追问 & 应对
追问 1:如果RAG检索不到相关文档,Agent还是产生幻觉怎么办?
这是常见坑。解法是显式声明不确定性:在prompt中强制Agent输出“无法回答”或“需要更多信息”,而不是编造。同时,用检索后过滤:如果检索结果的相似度低于阈值(如cosine similarity < 0.7),直接拒绝回答。对于高频场景,可构建知识库补全:将用户问题记录为待补充知识,定期更新索引。
追问 2:自我校验会增加延迟,如何平衡?
延迟是关键取舍。对于实时场景(如聊天),用轻量级校验:只检查关键事实(如日期、数字),用正则或小模型(如BERT)做快速分类。对于非实时场景(如报告生成),用异步校验:先返回初步结果,后台用批评模型校验后更新。Trade-off是:轻量级校验可能漏掉复杂幻觉,但能保证用户体验。
追问 3:如何评估Agent幻觉的严重程度?
用分层指标:第一层是事实错误率(人工标注或自动对比知识库),第二层是指令遵循率(检查是否偏离用户意图),第三层是用户满意度(如NPS评分)。对于自动评估,用LLM-as-Judge(如GPT-4打分),但需注意偏差(如偏好长回答)。建议结合BLEU和ROUGE作为辅助指标,但核心是人工抽样。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“用RAG就能解决所有幻觉” → ✅ 正确切入:RAG只能缓解事实性幻觉,对忠实性幻觉(如偏离指令)无效,需要结合约束解码和自我校验。
- ❌ 说“让Agent自己检查自己” → ✅ 正确切入:自我校验需要独立批评模型或规则,否则Agent会陷入自我强化(如重复错误)。用不同模型或prompt做批评者。
- ❌ 说“幻觉是模型问题,只能等模型升级” → ✅ 正确切入:幻觉是系统性问题,可通过工程手段(RAG、约束解码、反馈完整流程)显著降低,模型升级只是其中一环。
6️⃣ 简历呼应
- 如果你有RAG项目:从“混合检索+重排序”切入,展示你如何用BM25和向量检索降低事实性幻觉,并提到用Reranker过滤噪声。
- 如果你只做过传统NLP:用“文本分类”类比幻觉检测,展示你如何用NLI模型(如DeBERTa)做事实核查,并迁移到Agent场景。
- 如果你是校招无项目:聚焦“SelfCheckGPT”论文复现,展示你理解幻觉成因和校验方法,并提到用开源数据集(如TruthfulQA)做评估。
- SelfCheckGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Lewis et al., 2020)
- Outlines: Structured Generation for LLMs (GitHub repo)
- DPO: Direct Preference Optimization for Aligning Language Models
- TruthfulQA: Measuring How Models Mimic Human Falsehoods