检索不准怎么调:分块、提问与模型档位

从分块大小与重叠、文件结构、提问用词、严格度两档,到向量与关键词各自擅长的查询类型,以及什么时候才真的值得换成更大的嵌入模型。

· 11 分钟阅读

检索质量在你打字之前就基本定下来了:文档怎么切、标题和表格有没有留住、嵌入模型和文档语言合不合。回答不对的时候,按这个顺序先查这三件事,再考虑动别的。

先定位问题出在哪一层

一个坏回答有三种成因,解法各不相同,判断出来只要一分钟。

  1. 那段话根本没被检索出来。 回答要么说文档里没有,要么引用到的段落明显在讲别的事。这是检索问题,本文余下部分讲的都是它。
  2. 段落取到了,挑错句子了。 点开 [1] 对照一下。如果文本块里有答案而那行概括没有,问题在答案选择而不在检索,把问题问得更窄通常就解决了。
  3. 段落取到了,而且确实是最匹配的一条,文档本身没回答这个问题。 这种情况调参没有用,库里就是没有这份材料。

动手调之前,先确认文档索引完成。状态徽标还停在解析中,说明文本块还没进索引,再怎么搜也搜不到。

分块与重叠:最影响召回的两个数字

导入时按约 700 字符切块,相邻块之间保留约 15% 重叠。切点优先落在标题边界,其次是段落,最后才是句子,所以文本块很少断在句子中间。重叠存在的意义是:正好压在边界上的那句答案,仍然会在共享它的两块里完整地出现在其中一块。

这两个数字是默认值,不是定律,而两种失效方向恰好相反。

现象 大概率原因 怎么调整
引用只给出半个定义,或者某一步以“然后”开头 块太小,装不下这段材料 调大块长,让一个完整定义或一段流程落进同一块
回答把这个文档里两件不相干的事混在了一起 块太大,一块盖住了两个主题 调小块长,或者在源文件里用小标题给切分器更清楚的边界
关键词明显在文档里,却不进前列结果 那句话正好压在边界上 提高重叠比例
返回的六条结果里全是几乎一样的段落 源文件里有重复内容,比如同一条款每章重复一遍 提高近重复阈值(当前为 0.92 相似度),让重复段落被合并得更多

找自己的数字有个可行办法:拿一份文档,改一次设置就问同样五个问题,数一数引用到的块是不是正确的那一块。一次只改一个变量。文档体裁比任何经验法则都重要——条款编号清楚的合同能承受更小的块,因为条款本身就是干净的单元;叙述性报告则相反。

把文件里已有的结构用起来

解析和清洗保留的结构比多数人以为的多,留住它们等于白拿召回。

  • PDF 会按页取文本并保留页码,所以每条引用都能指回具体页。
  • Word 会用文档自身的样式还原标题层级,切分器因此拿到真实边界,而不是猜出来的边界。
  • Markdown 和 HTML 同样保留标题层级结构。
  • 表格 按整块处理。超长的表格保持完整,不会从中间某一行切断——被切开的表格比一个偏长的块更糟。
  • 重复的页眉页脚 会被识别并去掉。每页都出现的那行页码对关键词检索只增加噪声,去掉之后,长 PDF 上的效果有可见改善。

从源头配合也有效:用真正的标题样式排版,导入效果远好于用加粗和空行做视觉分段,因为加粗不带解析器能依赖的层级信息。

用文档自己的词提问

检索匹配的是索引里存在的词和意思。问到文档里从没出现过的同义说法,等于要求模型去搭一座小模型未必搭得起来的桥。

四个有实际效果的写法:

  1. 借文档里的名词。 文件里写“解除通知期”,就问解除通知期,不要问“怎么退”。
  2. 先问定义,再问例外。 先用“标准留存期是多少”建立词汇,再问“哪些类别不受标准留存期约束”。后一问之所以好用,是因为这些词已经进入会话上下文,而最近几轮会被用来扩展检索词。
  3. 一个问题对应一次检索。 一句话里塞三个问题,取回的是三个主题的平均值。分开问,引用才干净。
  4. 知道是哪份文件就点名。 “2026 年供应商协议里的付款窗口是多少”,在打分之前就把候选集缩小了。

会话默认保留最近六轮,并用最新一轮做关键词扩展。这也是“那例外情况呢”这种追问能命中正确段落、而不是只去搜“例外”两个字的原因。

向量检索和关键词检索各自擅长什么

每个问题都会同时走混合检索的两半,两组结果按倒数排名融合(k 取 60)合并,再经过 λ 为 0.7 的去冗余,最后留下最好的六块。知道自己这句问话是靠哪一半在起作用,出错时就知道该动什么。

查询类型 向量检索 关键词检索 谁在起作用
概念型问题:“审批流程是怎么走的” 强。用不同的措辞也能对上意思 弱,除非原词恰好出现 向量
换了一套说法的改写提问 强,受限于模型的语言覆盖范围 向量
精确标识:零件号、错误码、案件编号 弱。稠密向量会把稀有词模糊掉 强,本来就是为这个建的 关键词
只在某一条里出现过的专有名词 一般 关键词
只写缩写、从不展开的写法 文档总是写全称时就弱 只有缩写本身出现过才强 都不行,先把缩写展开
否定式提问:“哪些不在承保范围” 不可靠,向量相似度不看极性 取决于文档里用没用“不” 改写成文档里的正面说法
数字阈值:“至少 30 天” 对数字本身弱 对数字和单位强 关键词

这张表读起来就一句话:标识型问题靠关键词那一半成功,概念型问题靠向量那一半成功,而两者都要的问题——“2026 年那份协议关于续约是怎么写的”——正是融合步骤存在的理由。

严格度两档怎么选

两档设置,区别在于找不到相关内容时工具会怎么做。

档位 行为 什么时候用
仅依据文档(默认) 最好稠密分低于 0.25 且最好 BM25 分低于 2.0 时,回答直接说明文档里没有相关内容 你要引用这个结论,或者要照它办事
允许适度推理 可以把若干段落合并归纳,每句仍挂引用,没有来源的推断句显式标注为推断 你在探一个很大的库,且愿意自己读每一句引用

门控阈值比看上去更要紧。一个问题同时过不了两道门槛,很可能有个正当原因:库里确实没有这份材料。这时有用的动作不是放宽设置,而是确认文档确实索引完成,然后换用文档里的说法重问。

放宽设置不会凭空造出来源,它改变的是回答愿意把已有段落拼到什么程度,以及超出段落时会不会标出推断。

什么时候该换更大的嵌入模型

三档模型,大不等于好。

档位 首次下载 主要在什么语料上训练 最适合 付出的代价
all-MiniLM-L6-v2 约 23MB 英文 纯英文文档库 中文文本上偏弱
bge-small-zh-v1.5 约 25MB 中文 纯中文文档库 英文文本上偏弱
multilingual-e5-small 约 120MB 一百多种语言 中英文混在一个库里的情况 下载约为五倍,逐块向量化也更慢

症状明确出在跨语言匹配上,就升档:用中文问题检索英文文档,或者同一个主题在两种语言里都出现、你希望一组结果同时覆盖。另一种该升档的情况是文档领域词汇密集且专业,小模型总是返回主题相邻但不对的段落。

库只有一种语言、导入速度要紧、或者人在手机上,就留在小档。多语模型的下载量约为五倍,逐块的嵌入耗时也按比例拉长。

换档是重建索引,不是迁移。文本块与向量在导入时一同产出,所以换模型意味着把留下来的文档重新索引一遍。这是本地操作,原始文件从不动——只是库大的时候,这里是你会明显感觉到代价的时刻。