一次内部问答演示上,有人问报销标准。模型回答得很顺,还列出了材料清单,但引用的制度是两年前的版本。现场没有人追问“模型为什么这么会说”,大家更关心另一件事:它为什么没有读到最新那份文档。
这类错答把问题从语言能力拉回到知识来源。检索增强生成的做法并不神秘:先把用户问题转成检索查询,从文档库中取回若干片段,再把这些片段和问题一起交给模型,让回答尽量落在给定材料上。它不改变模型参数,更像在回答前临时补一份参考资料。链路听起来简单,真正决定效果的却常常是检索那一步。
先看它到底改了哪一步
没有检索时,模型依赖训练中见过的内容,遇到企业内部制度、产品手册、项目复盘这类非公开知识,只能靠猜或泛化。接入检索后,系统多了一个“找资料”的动作。找得准,模型有据可依;找偏了,模型仍可能把旧版本说得头头是道。所以讨论这类系统,不能只看生成端,检索质量、片段切分、元数据过滤都在影响最终答案。
一个常见误解是把它当成知识库的智能入口:文档传上去,问答就自动变准。实际工程里,文档需要清洗、分段、打标签,权限要能过滤,版本要能区分。否则检索会把相似但不适用的内容带进上下文,模型越流畅,错误越难被发现。
错答往往发生在检索之前
我见过更典型的场景:同一项制度在库里有三个版本,标题几乎一样,正文只差几行生效日期。检索按相似度召回,旧版因为措辞更完整被排到前面,模型自然照着旧版回答。问题不在模型不懂制度,而在文档治理没有给检索足够的区分信号。
要让检索增强生成稳定些,先得让文档可检索。生效时间、适用部门、文档状态、权限范围,这些信息如果只藏在正文里,检索很难判断。切片也要考虑问答习惯:按固定字数切,可能把一条完整规则拆成两半;按标题切,又可能丢掉上下文。没有通用答案,但需要有人对切片结果做抽样检查,而不是只看模型回答是否通顺。
评测比调参更磨人
很多团队遇到错答,第一反应是换模型或改提示词。提示词当然有用,但如果检索没有召回正确片段,生成端再强也只能在错误材料上组织语言。评测时,除了看答案像不像,还要看引用片段是否真的支撑结论。可以准备一组内部问题,覆盖不同文档类型和权限角色,人工标注“应该召回哪些片段”“回答是否可被片段支持”。这类工作不轻,却能暴露文档结构和检索策略的问题。
另一个容易被忽略的点是拒答。检索不到可靠材料时,系统应该说“没有找到足够依据”,而不是让模型自由发挥。拒答规则需要和业务场景一起定,哪些问题必须给出来源,哪些问题允许概括,哪些问题干脆不接。把这些边界写进流程,比事后追查一次错答更有用。
它的边界在哪里
检索增强生成适合知识更新频繁、回答需要出处的场景,比如内部制度问答、产品资料查询、客服辅助。它不负责替模型学会复杂推理,也不能保证检索库外的知识。文档质量差、问题本身模糊、权限边界复杂时,效果会明显打折。把它当成一个需要持续维护的系统,而不是一次接入就结束的项目,更接近实际。
回到那场演示,更稳妥的改法不是让模型“再聪明一点”,而是让回答带上引用片段和生效日期,答错时能追溯是检索没召回,还是文档本身过期。检索增强生成的价值也在这里:它让回答有迹可循,但前提是有人愿意把文档、检索和评测这些不显眼的环节做扎实。