ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大模型幻觉怎么根治?别光靠提示词,工程上要这么做

大模型幻觉怎么根治?别光靠提示词,工程上要这么做 大模型幻觉这个问题从 ChatGPT 刚出来的时候就在说到现在三年了还是有人在踩坑。很多人觉得幻觉不就是提示词写好点就能解决吗真在企业里落地过项目的人都知道提示词只能缓解根本根治不了。这篇文章不说那些“让大模型更诚实”的正确废话就聊聊工程上真正能把幻觉率降下来的几个手段。一、先搞清楚幻觉是怎么来的很多人以为幻觉就是大模型“瞎编”其实不是。幻觉本质上是概率模型的天生缺陷它是根据上下文预测下一个最可能出现的词不是在检索事实。当它遇到自己不知道的问题时不会说“我不知道”而是会根据语言习惯编一个看起来很合理的答案。因为从概率上编一个合理的答案比说“我不知道”更符合上下文的语言模式。所以想靠提示词让大模型“不要瞎编”本质上是在跟它的天性对抗效果非常有限。二、RAG是基础但不是万能的现在大家都知道 RAG 能缓解幻觉把相关资料塞给大模型让它基于资料回答。但很多人做的 RAG 根本防不住幻觉。常见的问题检索到的文档不对大模型还是会自己编大模型看到资料里没有相关内容还是会自己补全长文档里信息太多大模型会张冠李戴真正有效的 RAG要加两个东西强制引用让大模型回答的时候必须标注引用来自哪一段如果资料里没有相关内容就必须回答根据提供的资料没有找到相关信息答案校验另起一个小模型专门检查大模型的回答和提供的资料是不是一致如果发现不一致就打回去重答我们之前测过加了强制引用和校验之后幻觉率能降80%以上比单纯靠提示词效果好太多。下面用一段 Python 伪代码演示强制引用和答案校验是怎么落地的# 伪代码RAG 强制引用 答案校验defrag_answer(question:str,docs:list[str])-str:# 1. 检索相关资料并给每段资料编号retrievedretrieve(question,docs)# 返回 [(doc_id, text), ...]# 2. 强制引用要求大模型回答时标注引用来源promptbuild_prompt(question,retrieved)answerllm(prompt)# 例如根据[2]和[3]该产品支持...# 3. 答案校验另起一个小模型检查回答是否与资料一致ifnotverify(answer,retrieved):return根据提供的资料没有找到相关信息# 不一致就打回去重答returnanswerdefverify(answer:str,retrieved:list)-bool:# 检查回答中的每个引用编号是否真实存在fordoc_idinextract_citations(answer):ifdoc_idnotin[d[0]fordinretrieved]:returnFalse# 引用了不存在的资料判定为幻觉returnTrue关键步骤说明强制引用让大模型在回答里标注[编号]没有对应资料就必须回答“没有找到相关信息”。答案校验用一个小模型检查回答里的引用编号是否真实存在发现引用不存在的资料就判定为幻觉并打回重答。三、什么时候该微调什么时候该用 RAG很多人觉得微调能解决幻觉其实不是。微调是教大模型怎么说话不是教它事实。事实性的问题还是要靠 RAG 从外部知识库里查。真正能通过微调解决的是大模型输出格式不对、回答风格不对、思考方式不对这类问题。比如你要它每次回答都按照“问题-分析-结论”的结构来微调一下效果很好。但你要它记住你公司的产品参数微调根本记不住还是得靠 RAG。别一有幻觉就想着微调大部分时候是你的 RAG 没做好。下面这张表帮你快速决策对比维度微调Fine-tuningRAG检索增强生成适用场景输出格式、回答风格、思考方式不对事实性、知识性问题需要外部资料支撑核心原理用业务数据继续训练改变大模型的说话方式检索相关资料塞给大模型让它基于资料回答典型应用让回答固定按“问题-分析-结论”结构输出客服问答、产品参数查询、企业内部知识库局限性记不住具体事实训练成本高更新慢依赖检索质量资料缺失时仍可能编造四、最后一道防线人工兜底不管你做了多少技术优化企业落地的时候一定要记住大模型不能完全替代人。尤其是涉及到价格、承诺、合同、合规这些关键信息大模型回答完必须有个规则引擎或者人工审核环节把那些明显错误的回答拦下来。我们之前做客服系统的时候大模型回答准确率已经做到95%了剩下那5%的错误就是靠规则引擎拦下来的只要回答里出现具体价格、承诺效果、特殊条款就自动转人工绝对不能让大模型直接回答。工程做到最后你会发现没有什么银弹。幻觉这个问题就是靠RAG强制引用校验人工兜底一层一层把错误率降下来的。那些跟你说我们用了什么新技术幻觉率为0的基本都是在吹牛逼。五、常见问题与排查RAG 落地过程中除了幻觉本身还有几个高频问题会反复出现。下面按现象、原因、解决方案拆开讲方便你直接对照排查。1. 检索召回率低该查到的资料没查出来现象用户问的问题明明在知识库里但大模型回答时引用的资料不对或者干脆说“没有找到相关信息”。原因分析多半是检索环节出了问题——切分粒度太粗一段文档里塞了太多主题向量化后语义被稀释或者查询改写没做好用户口语化的问法和库里文档的书面表达对不上。解决方案把文档切分粒度调细按语义段落而不是固定字数切对用户问题做一次查询改写把口语转成更贴近文档的书面表达必要时用混合检索向量 关键词兜底别只靠向量相似度。2. 引用编号错乱标注的来源对不上现象大模型回答里标了[3]但读者点过去发现第 3 段资料跟这句话完全没关系甚至编号对应的资料根本不存在。原因分析强制引用只约束了“必须标编号”没约束“编号必须对应真实内容”。大模型为了满足格式要求会随便挑一个编号贴上校验环节如果只查编号存在性就拦不住这种错位。解决方案校验时不能只查编号是否存在还要比对引用片段和对应资料的内容相似度低于阈值就判定为幻觉打回重答同时把引用编号和原文片段一起返回方便人工复核。3. 校验误判把正确回答也打回去了现象答案明明是对的但校验模型判定“与资料不一致”导致大量正常回答被拦截用户体验很差。原因分析校验模型阈值设得太严或者校验模型本身能力不够把“表述不同但意思一致”的答案误判成不一致。尤其是大模型做了同义改写、合并多条资料时最容易误伤。解决方案校验时先做语义相似度判断而不是逐字比对给“意思一致”留出容错空间把阈值调松一点宁可多放几个可疑回答进人工也别把正确回答全拦了校验模型选能力更强的别用太小的模型硬扛。4. 长文档张冠李戴信息串了现象知识库里一篇文档很长大模型回答时把 A 段的产品参数安到了 B 段的产品上看起来头头是道实际全错。原因分析长文档切分后每段缺少足够的上下文标识大模型分不清这段讲的是哪个产品、哪个版本检索时又把多段不相关的资料一起塞进去模型就更容易串。解决方案切分时给每段带上标题、产品名、版本号等元信息让模型知道这段的“身份”检索时限制单次注入的资料数量别一股脑全塞回答里强制要求标注引用编号串了也能快速定位。5. 资料更新后回答还是旧内容现象知识库里的资料已经更新了但大模型回答的还是旧版本的信息用户投诉“你们系统数据不对”。原因分析索引没有跟着源文档同步更新或者更新后缓存没清检索到的还是旧向量也可能是切分后的旧片段还残留在索引里新片段没覆盖掉。解决方案建立文档变更监听源文件一更新就触发重新切分和重建索引更新时先删旧片段再写新片段避免新旧并存给索引加版本号回答时带上资料版本方便追溯。六、总结与行动清单核心结论幻觉本质是概率缺陷大模型是根据上下文预测下一个最可能的词不是在检索事实所以提示词只能缓解、无法根治。RAG 必须加强制引用和校验单纯把资料塞给大模型防不住幻觉只有强制引用 答案校验才能把幻觉率降 80% 以上。微调不解决事实问题微调是教大模型怎么说话不是教它事实事实性问题靠 RAG微调只适合解决输出格式、回答风格这类问题。人工兜底不可省涉及价格、承诺、合同、合规等关键信息必须靠规则引擎或人工审核兜底大模型不能完全替代人。没有银弹幻觉率是 RAG 强制引用 校验 人工兜底一层层降下来的宣称“幻觉率为 0”的基本不可信。落地行动清单按优先级排序先做检索优化调细切分粒度、做查询改写、必要时上混合检索保证该查到的资料能查出来——这是 RAG 的地基。再加强制引用让大模型回答必须标注引用编号资料里没有相关内容就回答“没有找到相关信息”。再上答案校验用一个小模型检查引用编号是否真实存在、内容是否对得上发现幻觉就打回重答。最后上人工兜底对价格、承诺、合同、合规等高风险回答用规则引擎或人工审核拦截绝不直接放行。持续监控与迭代建立文档变更监听、索引版本号定期复盘校验误判和召回率把错误率一层层压下去。
返回列表