面试官你好,这道题问的是大模型[[幻觉]]怎么缓解,其实本质是模型在生成时没有和事实对齐。我从训练、推理、外部知识三个方向讲,但落地时很少单用一招,都是组合拳。
先说训练侧,这里有个常见误区:很多人一上来就搞 [[RLHF]],但基础不牢后面很难补。我自己的经验是,数据质量是地基。预训练阶段,不能光堆数据量,要清洗掉低质网页,增加权威来源比如论文、百科的比例。还可以在数据里显式标注“不确定”的表述,让模型学会说“我不知道”。这个在客服场景特别有用,比如用户问“这个订单为什么还没发货”,模型如果没检索到具体信息,直接编一个理由就出事了。
[[SFT]] 阶段,我会构造带引用来源的指令数据,答案必须说“根据文档第几段”,同时加入“拒绝回答”样本:超出知识范围的问题,模型要坦诚说“我不确定”。RLHF 阶段,奖励模型不能只优化流畅度,要加事实性维度,对编造内容扣分。这里有个前提:事实性标注成本很高,否则奖励模型本身会学歪。
推理侧优化是性价比最高的。先说解码策略,约束解码强制关键事实来自输入上下文,适合摘要、问答这种输入里就有答案的场景。自我验证是生成后让模型自己检查“这个陈述有依据吗”,可以迭代几轮,但要注意别死循环。多采样投票就是多次采样取一致答案,能降低随机性带来的幻觉,但成本翻倍。
举个例子,企业 SOP 查询场景,员工问“报销流程是什么”,我会用 [[Chain-of-Thought]] 让模型一步步推理,每步都引用文档。如果置信度低,就触发人工审核。这里有个坑:自我验证如果模型本身知识不足,会越检查越错,所以要结合外部知识。
外部知识集成,[[RAG]] 是核心。检索相关文档作为上下文,把生成约束在检索内容里。但 RAG 不是万能的,检索失败时生成会崩。所以我会做两件事:一是提升检索质量,用 [[Hybrid Search]] 结合 [[BM25]] 和 [[Embedding]],再加 [[Rerank]] 精排;二是优雅降级,检索不到就明确说“没有相关信息”,而不是瞎编。
[[Knowledge Graph]] 适合复杂推理,比如“这个客户和哪个供应商有纠纷”,需要多跳验证。[[Function Calling]] 对时效性信息很有效,比如查实时库存、天气,直接调 API。
说到这,有个有意思的点:很多人觉得 RAG 和微调是二选一,但我实际做下来,两者结合效果更好。微调让模型学会正确使用检索结果,RAG 提供实时知识,但怎么平衡两者权重是个开放问题。比如微调后模型可能太依赖参数知识,忽略检索结果,这个现象叫“知识冲突”。
最后总结一下,幻觉无法完全消除,我倾向于构建“预防-检测-缓解”的多层防御。预防靠训练数据质量,检测靠推理时自我验证,缓解靠外部知识兜底。上线前一定要用 [[RAGAS]] 或类似工具评估事实性,否则风险很大。所以我会把幻觉缓解看成系统工程,根据业务风险等级选技术组合,而不是迷信某一个方法。