在一个内部知识库页面里输入问题,几秒后得到一段语气平稳的回答,读起来像那么回事,但关键数字旁边没有出处,再追问一句,它又开始绕。这类场景里,模型缺的往往不是语言组织能力,而是“该翻哪一页资料”的动作。检索增强生成要补的,正是这个动作。
先把资料找出来,再让模型组织语言
它的基本思路并不复杂:把可用的文档切分成便于检索的片段,建立索引;用户提问时,先从资料里找出一组相关片段,再把这些片段和问题一起交给模型,让模型基于给定材料作答。向量检索、关键词检索、混合检索、重排,都是这条链路上的不同做法。系统实现可以不同,但核心没有变:生成之前,先确定参考范围。
真正难的是检索那一步
很多人把检索增强生成理解成“接一个知识库就完了”,实际落地时,麻烦常常出在检索。用户问法口语化,文档标题却偏正式;一段制度被切得太碎,上下文断了;切得太长,噪声又挤进提示词。权限也会掺进来:同一个问题,不同角色能看到的资料范围不同,检索层如果不过滤,生成层就会把不该出现的内容带出来。资料过期同样隐蔽,索引里留着旧版本,模型只能照着旧版本组织答案。
检索结果不相关时,模型不一定沉默。它可能顺着不充分的材料继续写,语气还很笃定。因此,检索增强生成并不能自动消除胡编,它只是把“凭空作答”改成“带着材料作答”。材料选错,答案照样会偏。工程上要看的,不只是生成结果读起来是否顺畅,还要看召回片段是否切题、上下文是否完整、答案能否回到原文。
引用不是装饰
在知识库问答里,引用片段的价值不只是让人放心。它让答案可以被核对,也让错误更容易定位:是资料本身过期,是切分破坏了语义,还是检索没有命中。一个可用的系统,通常需要把引用落到具体段落,而不是只给文档名;遇到材料相互矛盾时,回答应当说明冲突,而不是替用户做无声取舍。材料不足时,明确说“现有资料无法支持这个结论”,能让后续核对有起点。
它适合什么,不适合什么
有相对稳定的文档集、需要出处、问题主要围绕已有材料展开的场景,适合引入检索增强生成。需要实时变化的数据、资料本身缺失的问题、要求跨多个系统做复杂操作的流程,则不能只靠它。它也不是一次接入就长期不变的系统:文档会更新,问法会变化,权限会调整,检索策略和切分方式都要跟着维护。
把它当成一个工程问题,意味着接受资料怎么来,片段怎么切,检索怎么过滤,引用怎么落,答案在什么情况下应当停住,这些细节决定了系统能不能被信任。它提供的是一个让模型回到资料里的路径,路径修得是否扎实,仍要看日常维护。