RAG明明搜到了资料,为什么回答的时候还是漏掉了关键信息?

AI实战小课堂RAG
本节视频

教程简介:AI实战小课堂【RAG专题】RAG明明搜到了资料,为什么回答的时候还是漏掉了关键信息?我们如何把分片策略落实到真实的企业知识库里。

本节内容

大家好,我是武哥。这里是 AI实战小课堂-RAG专题。

做 RAG 知识库时,我们经常会遇到一个问题:资料明明搜到了,模型回答的时候,却漏掉了重要条件。是不是模型不够强?先别急着换模型,我们得看看:这次交给模型的片段里,到底有没有这些条件。

这期我们用一个退货案例和动态图解,讲清文档切大、切小分别有什么问题,以及递归分块、重叠和父子分块,怎样兼顾检索准确性与上下文完整性。这个约 10 分钟的视频,会带你把这些策略串起来:点击查看。

具体落地实战项目,大家可以学习这个AI高级实战项目:AI Agentic RAG高级企业知识库平台

搜到了资料,为什么还会答错?

我们先看一个假设的客服场景。用户问:“耳机拆封以后,还能申请七天无理由退货吗?”

假设知识库里有这样一段售后说明:

签收后七天内可申请无理由退货。商品须保持完好,配件齐全。已拆封且影响二次销售的商品,不适用无理由退货;质量问题另按售后规则处理。

如果模型只拿到第一句,就可能回答:“可以,七天内都能退。”

它确实用了资料,但后面的商品状态、配件要求和拆封例外,没有一起带回来。

整份文档里有这个条件,不代表这次交给模型的上下文里也有。 排查时,不能只看知识库里有没有这份文档,还要打开命中的片段和最终上下文。

文档切大、切小,各有一个问题

切大了,主题可能混在一起。

把退货条件、维修流程、物流查询都放在一个块里,内容很完整,但用户只问“拆封能不能退”。向量表示要反映整段文字,多个主题混在一起,与具体问题的匹配就可能不够集中。即使找到了,无关内容也会一起交给模型。

切小了,条件可能落在另一块。

第一块讲七天内可以申请,第二块讲商品和配件要求,第三块讲拆封例外。每块都很集中,但只命中第一块,回答仍然会漏条件。“上述情况”“本产品”等指代,以及表格中的型号和参数,也可能因为切分失去上下文。

所以我们要同时考虑两件事:检索时,内容是否容易匹配;回答时,必要条件是否完整。 大块适合了解整套流程,小块适合定位具体内容,没有一种长度适合所有问题。

递归分块:先照顾文本的自然边界

递归分块可以理解为:先按段落拆,某一段还是太长,再按换行、句号等更细的边界继续拆;没有合适分隔符时,再退到字符级别。

拆出来的小段,在长度允许时还会合并成一个块。因此,每个块不一定刚好一样长。

它比直接按固定位置截断更容易保留句子结构,但不会自动判断哪句话是规则、哪句话是例外。退货条款有没有被拆开,仍然要检查实际结果。

配置时还要先确认长度单位。我在高级知识库项目里用的是字符计数,配置 500,表示 500 个字符,不是 500 个 Token。复制其他项目的参数前,先把计数方式和切分规则对上。

重叠分块:给切口留一点上下文

重叠,也就是 overlap,是把上一块末尾的一部分内容,保留在下一块开头。

比如原文有 A、B、C 三部分:第一块放 A 和 B,第二块放 B 和 C。这样,无论命中哪一块,切口附近的 B 都有机会被带回来。

重叠适合缓解切口附近的内容缺失。 如果必要条件隔了好几块,这一点重叠通常补不回来。

重叠也不是越大越好。重复内容增加,会带来更多向量化工作,检索还可能返回多条相似片段,占用上下文空间。递归分块会照顾自然边界,实际重复长度也不一定刚好等于配置值,要看切出来的文字。

父子分块:用小块检索,用大块补全

如果我们希望检索内容集中,又希望回答时带上前后的条件,就可以考虑父子分块。

先切较大的父块,再从父块中切出较小的子块,每个子块记录自己属于哪个父块。

我在项目里让子块参与向量检索,父块保留原文。命中子块后,根据它的父块 ID 取回对应父块,再把更完整的内容交给模型。多个命中子块属于同一个父块时,只保留一份。

拿退货说明来说:完整条款放在父块中,时限、商品状态和拆封例外分别形成子块。检索时定位具体内容,回答时回填完整说明。

这里有两个关键点:切出父子关系之后,还要接上检索后的回填;父块的范围,也要包含回答需要的条件。 如果回填没打开,或者例外已经落在另一个父块里,当前父块仍然补不全答案。父块过大,也会重新带回无关内容。

怎么比较,才能知道有没有改善?

我在视频里展示了两类算法的三套配置:

配置 块大小 重叠
递归分块 500 字符 50 字符
递归分块 250 字符 30 字符
父子分块 父块 1200 字符、子块 300 字符 子块重叠 30 字符,父块之间不重叠

这些数字是比较的起点,不是通用最优参数。我们用同一份文档、同一组问题,尽量保持检索方法、模型和提示词不变,并记录父子回填是否开启。

问题可以包括:只问退货时限、问拆封后能不能退,以及一个资料里没有答案的问题。

每次沿着这条链路检查:

  1. 看原文与切分: 相关条件有没有被拆开?
  2. 看命中片段: 真正相关的内容找到了吗?
  3. 看模型上下文: 回答需要的条件带完整了吗?
  4. 看实际回答: 模型有没有把条件说清楚,是否补出了资料没有的内容?

同时关注耗时和输入长度。五个小块与五个大父块,模型需要阅读的文字可能差很多,不能只看返回条数或答案长短。

改了切分参数,要重新切分并向量化。 不能配置已经改了,检索还在用旧片段,也不要把不同配置的结果混在一起比较。

选择分块策略,先看缺在哪里

如果大家准备做一个知识库,可以先用递归分块跑起来,再拿真实问题检查:

  • 经常在切口附近丢内容:试着调整重叠。
  • 片段找得挺准,但总缺前后说明:试试父子分块和回填。
  • 连相关片段都没找到:检查解析结果、检索范围和检索方法,别一直围着块大小转。

我们再回到开头的退货问题。回答漏了拆封条件,就沿着命中的片段往后查,看看这个条件到底有没有交给模型。

选择分块策略,就是让相关资料容易被找到,再把回答需要的条件带完整。 参数怎么配,我们拿实际问题和结果来决定。

欢迎看完视频后,对照自己的知识库打开几条命中片段,看看那些漏掉的条件,到底停在了哪一步。

如果这期帮你弄明白了文档分块,也欢迎分享给正在做 RAG 知识库的朋友。

AI实战小课堂

直接学习,不需要购买

围绕一个具体主题,跟着视频快速上手。学习目标和演示内容见本节介绍,有配套笔记或资料时可按需查看。