检索不准怎么调:分块、提问与模型档位
从分块大小与重叠、文件结构、提问用词、严格度两档,到向量与关键词各自擅长的查询类型,以及什么时候才真的值得换成更大的嵌入模型。
· 11 分钟阅读
检索质量在你打字之前就基本定下来了:文档怎么切、标题和表格有没有留住、嵌入模型和文档语言合不合。回答不对的时候,按这个顺序先查这三件事,再考虑动别的。
先定位问题出在哪一层
一个坏回答有三种成因,解法各不相同,判断出来只要一分钟。
- 那段话根本没被检索出来。 回答要么说文档里没有,要么引用到的段落明显在讲别的事。这是检索问题,本文余下部分讲的都是它。
- 段落取到了,挑错句子了。 点开
[1]对照一下。如果文本块里有答案而那行概括没有,问题在答案选择而不在检索,把问题问得更窄通常就解决了。 - 段落取到了,而且确实是最匹配的一条,文档本身没回答这个问题。 这种情况调参没有用,库里就是没有这份材料。
动手调之前,先确认文档索引完成。状态徽标还停在解析中,说明文本块还没进索引,再怎么搜也搜不到。
分块与重叠:最影响召回的两个数字
导入时按约 700 字符切块,相邻块之间保留约 15% 重叠。切点优先落在标题边界,其次是段落,最后才是句子,所以文本块很少断在句子中间。重叠存在的意义是:正好压在边界上的那句答案,仍然会在共享它的两块里完整地出现在其中一块。
这两个数字是默认值,不是定律,而两种失效方向恰好相反。
| 现象 | 大概率原因 | 怎么调整 |
|---|---|---|
| 引用只给出半个定义,或者某一步以“然后”开头 | 块太小,装不下这段材料 | 调大块长,让一个完整定义或一段流程落进同一块 |
| 回答把这个文档里两件不相干的事混在了一起 | 块太大,一块盖住了两个主题 | 调小块长,或者在源文件里用小标题给切分器更清楚的边界 |
| 关键词明显在文档里,却不进前列结果 | 那句话正好压在边界上 | 提高重叠比例 |
| 返回的六条结果里全是几乎一样的段落 | 源文件里有重复内容,比如同一条款每章重复一遍 | 提高近重复阈值(当前为 0.92 相似度),让重复段落被合并得更多 |
找自己的数字有个可行办法:拿一份文档,改一次设置就问同样五个问题,数一数引用到的块是不是正确的那一块。一次只改一个变量。文档体裁比任何经验法则都重要——条款编号清楚的合同能承受更小的块,因为条款本身就是干净的单元;叙述性报告则相反。
把文件里已有的结构用起来
解析和清洗保留的结构比多数人以为的多,留住它们等于白拿召回。
- PDF 会按页取文本并保留页码,所以每条引用都能指回具体页。
- Word 会用文档自身的样式还原标题层级,切分器因此拿到真实边界,而不是猜出来的边界。
- Markdown 和 HTML 同样保留标题层级结构。
- 表格 按整块处理。超长的表格保持完整,不会从中间某一行切断——被切开的表格比一个偏长的块更糟。
- 重复的页眉页脚 会被识别并去掉。每页都出现的那行页码对关键词检索只增加噪声,去掉之后,长 PDF 上的效果有可见改善。
从源头配合也有效:用真正的标题样式排版,导入效果远好于用加粗和空行做视觉分段,因为加粗不带解析器能依赖的层级信息。
用文档自己的词提问
检索匹配的是索引里存在的词和意思。问到文档里从没出现过的同义说法,等于要求模型去搭一座小模型未必搭得起来的桥。
四个有实际效果的写法:
- 借文档里的名词。 文件里写“解除通知期”,就问解除通知期,不要问“怎么退”。
- 先问定义,再问例外。 先用“标准留存期是多少”建立词汇,再问“哪些类别不受标准留存期约束”。后一问之所以好用,是因为这些词已经进入会话上下文,而最近几轮会被用来扩展检索词。
- 一个问题对应一次检索。 一句话里塞三个问题,取回的是三个主题的平均值。分开问,引用才干净。
- 知道是哪份文件就点名。 “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 | 一百多种语言 | 中英文混在一个库里的情况 | 下载约为五倍,逐块向量化也更慢 |
症状明确出在跨语言匹配上,就升档:用中文问题检索英文文档,或者同一个主题在两种语言里都出现、你希望一组结果同时覆盖。另一种该升档的情况是文档领域词汇密集且专业,小模型总是返回主题相邻但不对的段落。
库只有一种语言、导入速度要紧、或者人在手机上,就留在小档。多语模型的下载量约为五倍,逐块的嵌入耗时也按比例拉长。
换档是重建索引,不是迁移。文本块与向量在导入时一同产出,所以换模型意味着把留下来的文档重新索引一遍。这是本地操作,原始文件从不动——只是库大的时候,这里是你会明显感觉到代价的时刻。