这道题其实问的是,大模型生成的东西怎么保证它不瞎编。[[幻觉]]本质上是模型在事实一致性上出了问题,不可能彻底根除,但我们可以从数据、架构、推理和工具几个层面层层设防,把风险压到可接受的范围。
先说数据层面。这里最根本的思路是 让模型在训练阶段就见更多真东西。比如做高质量数据筛选,把网上那些矛盾、过时、明显错误的信息过滤掉。另一个方向是注入[[知识图谱]],把结构化的知识,比如企业产品规格、政策条款,跟文本一起训练。这样模型对事实的敏感度会高很多。但这里有个坑:数据清洗成本非常高,而且知识图谱覆盖不全的话,反而可能让模型对没见过的实体更爱瞎编。所以数据层适合做基础打底,但 不能完全依赖它。
再讲模型架构层面。现在最主流的做法是[[RAG]],检索增强生成。比如客服场景,用户问“这个订单为什么还没退款”,模型不是凭记忆硬答,而是先去知识库里检索退款规则和订单状态,然后把检索结果当上下文来生成。这样生成的内容就有依据了。RAG 特别适合知识频繁更新的场景,比如电商大促期间满减政策天天变。但 RAG 也不是万能药,检索质量差的话,上下文喂错了反而放大幻觉。所以落地时我通常会配合[[重排]],用[[Cross-Encoder]]把检索结果再精排一遍,把不相关的滤掉。
推理策略层面,这里有个简单但有效的方法叫[[Self-Consistency]]。就是让模型对同一个问题生成多条回答,比如温度设0.7跑五次,然后看哪些答案互相一致,不一致的说明可能有问题。还有一个更高级的变体叫[[Chain-of-Verification]],让模型先粗答一轮,然后自己针对每个事实点问自己“这个数字对吗”,再根据验证结果修正。这个思路说白了就是 让模型自己当自己的质检员。但代价是推理成本翻了好几倍,延迟会很高,所以适合离线或对实时性要求不高的场景。
最后是外部工具兜底。遇到关键事实,比如金额、日期、法律条款,可以直接调搜索引擎、数据库或者代码执行器来验证。比如在金融风控场景,模型生成一个合同条款,我会让它通过[[Function Calling]]去调用底层的合规数据库,返回真实条文。这相当于给了模型一个“查字典”的能力。但工具调用也有前提,就是工具的接口要稳定、返回要可靠,否则工具本身出错反而引入新幻觉。
说到这,其实有个很有意思的点:RAG 和微调在缓解幻觉上的边界在哪?比如知识频繁更新的场景,RAG 明显更灵活;但如果是模型对某个领域的常识性错误,比如“海尔是德国的”,用知识编辑方法比如 ROME 直接改模型参数可能更彻底。这个取舍我还在实践中摸索,不同场景权重不一样。
所以整体上,我的看法是 没有银弹,只有组合拳。数据层做基础,RAG 做动态约束,推理策略做最后校验,工具层做兜底。具体用哪几层,要看场景对事实精度的要求和成本承受力。比如客服场景,RAG 加 Self-Consistency 就够;但金融合同场景,必须加上工具验证。我会把幻觉问题当成一个系统工程,而不是靠单一技术解决。