1. 切分在优化什么
切分决定检索器的候选单位. 片段过短时, 定义与条件分离, embedding 只能看到局部词义; 片段过长时, 多个主题共享一个向量, 相关信号被稀释, 上下文预算也被无关内容占用. 最佳粒度依赖问题和文档结构.
评测切分不能只看平均 token 数. 应观察参考证据是否被完整包含、目标片段在候选中的排名、扩展后上下文冗余和引用定位精度. 同一文档可以同时保留多个粒度, 但要明确哪一层参与匹配、哪一层进入上下文.
1.1. 结构边界
标题、段落、列表、表格、代码块和对话轮次提供天然边界. 标题路径应附在每个子片段上, 让脱离页面的片段仍保留主题. 表格需要保留表头与行列关系; 将单元格简单拼接会丢失数值含义.
PDF 解析先恢复阅读顺序再切分. 双栏、脚注、页眉和跨页表格若处理错误, 后续模型无法从 embedding 中恢复原结构.
滑动重叠降低边界截断, 代价是候选重复和索引体积增加. 重叠长度应根据句子和结构单位评估, 不能固定为所有文档的比例.
邻域扩展在命中后读取前后片段, 可以减少索引重复. 这种方法依赖稳定顺序和父节点映射, 并需要在选择阶段去重.
2. 父子检索
2.1. 小块匹配, 大块阅读
父子检索以小片段建立稀疏或向量索引, 命中后返回父节作为候选上下文. 小块提高定位, 父节保留完整论证. 多个子片段命中同一父节时需要合并分数和去重.
父节并非越大越好. 一个长章节包含多个主题时, 扩展会重新引入大量噪声. 父节点应对应可独立阅读的结构单元.
系统也可以分别索引标题、段落和文档摘要. 查询先在粗粒度路由文档, 再在局部细粒度检索. 每层都要保存候选, 才能判断错误来自路由还是局部搜索.
多粒度检索的价值来自分开“在哪里找”和“具体哪段支持”, 而不是简单增加向量数量.
3. 索引表示
3.1. 稀疏与稠密字段
倒排索引可为标题、正文、代码和元数据设置不同字段权重, 并保留编号与专名. 稠密索引把查询和片段映射到向量空间, 适合释义和语义近邻. 两者共享片段身份与过滤字段.
embedding 生成记录模型、维度、归一化和输入模板. 改变标题拼接方式也会改变向量, 应视为新索引版本.
权限、租户、语言、文档类型和有效时间通常在向量搜索前过滤. 过滤选择性会影响近似近邻索引的召回和延迟, 需要以真实分布测试.
元数据缺失不应默认为公开. 保守策略是拒绝入库或进入隔离区, 等字段补齐后发布.
4. 验证与观测
4.1. 切分质量样本
抽样查看片段开头和结尾, 检查标题路径、句子完整性、表格表头、代码围栏和来源位置. 再用带参考证据的问题比较不同粒度的 recall@k 与上下文 token.
分布指标包括片段长度、每文档片段数、重复率和空片段率. 极端长尾常揭示解析器或特殊文档类型问题.
同一快照的片段 ID 集合应能在元数据、稀疏索引和向量索引之间对账. 随机选择片段反查源位置, 再从源位置重建正文哈希. 这些检查比单纯比较总数量更能发现错位.
发布后记录索引版本和延迟, 并监控新增、更新、删除的可见时间. 检索效果下降时, 先确认快照和字段分布是否变化, 随后判断模型退化.
5. 从解析对象到多路索引
这一部分补齐结构化解析、切分实验和索引发布的可复算细节. 解析输出先保留标题、表格、代码和位置, 随后再派生适合稀疏与稠密检索的表示.
索引实验固定语料快照与问题集, 分开测量解析覆盖、切分完整性、精确搜索与 ANN 的损失. 只有这样, 候选变化才能归因到具体处理阶段.
1. 从源对象到证据对象
1.1. 最小数据模型
设逻辑文档为 , 其第 个版本为 , 切分函数 由版本为 的解析与切分配置决定:
片段 至少带 document_id, version_id, chunk_id, 来源位置, 内容哈希, 权限表达式, 生效区间和处理配置版本. chunk_id 可以由稳定结构路径与规范化内容哈希组合, 但要明确标题改名、段落移动和正文修改分别如何影响身份. 只用数组序号会让前文插入一段后所有 ID 漂移.
来源位置应能回到原始对象中的页、节、段、表格单元或记录主键. 对扫描 PDF, OCR 坐标和页码属于来源定位, OCR 文本属于派生内容; 两者都要版本化. 对网页, URL 不足以表示版本, 还需要抓取时间、内容哈希或上游版本号. 对数据库记录, 主键和查询快照比渲染后的文本更可靠.
1.2. 解析必须保留结构
标题层级、列表序号、表格行列、代码边界、脚注与图注都会改变含义. 解析器应输出结构化中间表示, 再从结构生成检索文本和展示文本. 同一字段可以有多种派生表示: 表格行用于精确过滤, 带表头的文本用于语义检索, 原表位置用于引用. 三种表示共享来源身份, 但用途不同.
解析验收不能只看成功率. 应抽样比较原文与中间表示, 统计空页、异常字符、表格列错位、标题层级丢失和重复页眉. 还要建立带唯一文本的探针, 确认新增内容能被检索, 修改后旧内容不再出现, 删除后所有索引和缓存都清除. 这组测试比「文档数量一致」更接近用户看到的结果.
2. 切分粒度怎样选择
2.1. 五个相互牵制的目标
检索可区分性要求片段主题集中; 证据完整性要求条件与结论同在; 可定位性要求答案能指回具体位置; 更新局部性要求一处修改不要重建整份长文; 权限一致性要求片段内部没有不同访问范围. 可以把切分选择写成约束优化:
其中 是边界造成的证据缺失, 是片段内部无关内容, 是更新影响范围, 是进入后续模型的长度. 系数由任务确定, 公式用于明确权衡, 不提供跨语料通用最优值.
结构优先方案先沿标题、段落、列表、表格和记录边界切. 超过模型限制的单元再递归分解. 滑窗方案在连续文本中保留相邻重叠, 能减少边界漏召, 但同一内容可能占据多个候选位置. 父子方案用子片段匹配, 返回父段或相邻范围. 语义切分通过相邻表示变化建议边界, 仍受模型、阈值和语料域影响.
2.2. 表格、代码和对话
表格不能把每个单元格孤立向量化. 数值要与列名、行名、单位和时间绑定. 小表可以按行生成带表头文本, 同时保留整表引用; 大表应优先进入结构化查询, 文本检索负责发现表和解释字段. 合并单元格与脚注需要显式展开, 否则模型可能把限定条件归到错误行.
代码检索需要保留符号、签名、所属模块和调用关系. 固定 token 窗口容易把函数签名与主体拆开. 对话则要区分说话人、轮次和当前有效状态; 将整段会话拼成一个片段会让早已更正的信息继续参与检索. 数据类型不同, 切分器可以不同, 但输出证据对象应使用同一套身份和权限字段.
4. 切分实验与回归集
4.1. 配对实验
固定检索模型, 比较两个长度方案、一个结构优先方案和必要的父子扩展. 每个方案报告 Recall@k、证据集合覆盖、重复率、平均与长尾片段长度、重排耗时、最终上下文 token、引用定位成功率. 只比较最终答案会让生成模型偶然补全事实, 掩盖检索缺陷.
查询集要覆盖专有名词、编号、数字、否定、时间、跨语言、多跳和无答案问题. 对每个失败样本记录: 正确证据是否存在于语料, 是否解析成功, 是否被切开, 是否进入候选, 是否被过滤, 是否在重排后保留. 这条漏斗能把「搜不到」分解成不同原因.
4.2. 一个可复算例子
原文有三句:「报销需在 30 日内提交. 海外差旅可延长到 60 日. 延长期限仅适用于审批日期在 2026 年 1 月 1 日之后的申请.」若按两句切分, 第一片段包含主规则和 60 日例外, 第二片段只剩生效条件. 查询「2025 年审批的海外差旅能否 60 日提交」可能只召回第一片段并得到错误肯定.
结构修复可以把例外与其生效条件组成同一证据单元, 或建立父子关系让命中例外时扩展限定条件. 验收查询不能只问「海外差旅期限是多少」, 还要加入生效日前后的对照. 这说明高质量回归集来自规则边界, 不只来自常见问法.
6. 索引选择、指标与上线实验
5.1. 数据资产
语料快照应可重建, 解析与切分配置可追踪, 片段能回到原文位置, 权限过滤有独立测试, 新增、修改、删除和 ACL 变化各有探针. 评测集同时绑定查询、快照、证据与答案, 无答案和冲突证据样本不能缺席. 这些资产确定后, 后续模型实验才有共同地面.
采样检查要覆盖不同文件类型与长度, 不能只看解析顺利的 Markdown. PDF、表格、扫描件、网页和数据库记录各抽取失败样本. 对低质量 OCR 可以降低来源权重、要求人工复核或不进入生产索引, 不应让生成模型自行判断乱码是否可信.
5.2. 运行状态
每次构建记录源快照、文档数、片段数、失败数、向量模型与维度、索引参数、构建时间和校验结果. 双写迁移时, 新旧索引用同一查询集并行比较, 达到门槛后切换读流量. 回滚要包含语料、索引和切分配置, 只回滚生成模型无法恢复旧检索结果.
完成这些工作后, 最小基线应能回答四个问题: 当前有哪些证据, 某个用户能看到哪些证据, 一次查询为何得到这些候选, 文档变化后旧证据何时消失. 回答不了其中任何一个问题, 检索质量分数再高也不能构成可维护的 RAG.
Exit code: 0 Wall time: 0.2 seconds Output:
检索层在调用者有权看到的当前语料中工作, 以可接受的延迟和资源代价召回足以支持任务的证据, 再把候选排序到下游能够使用的规模.
1. 职责边界
本页负责查询表示,切分,稀疏/稠密/结构化召回,过滤,融合,去重,重排,索引选择与检索评测.语料许可由生命周期规则约束,答案与工具执行进入后续生成和动作系统.
2. 从任务与相关性开始
"相关"必须先被定义.不同任务需要不同判断:
| 查询类型 | 相关证据的最低条件 | 常见误召回 |
|---|---|---|
| 精确事实 | 直接包含实体,属性,时间和答案 | 同实体旧版本,只有相似主题 |
| 流程/政策 | 包含适用范围,步骤,例外与生效版本 | 只含摘要,没有限制条件 |
| 比较 | 覆盖每个比较对象且口径一致 | 只支持一方或混用年份 |
| 多跳 | 证据集合能连接中间实体/条件 | 各片段分别相关但无法连成推理链 |
| 聚合/过滤 | 数据结构支持完整集合和确定性条件 | 向量相似片段并不能证明"全部" |
先标一小批 (query, corpus_snapshot, relevant_ids, relevance_grade).如果无法指出什么算相关文档,就无法解释 Recall,MRR 或 nDCG,也不能可靠调 top_k.
6.3. 切分与检索表示
没有跨任务通用的 200,500 或 1000 token 最优值.切分要同时保留:
- 检索可区分性:一个片段不要混入太多无关主题;
- 证据完整性:定义与限制,表头与行,条款与例外不能被无条件拆开;
- 可定位性:片段能回到页,节,段落,表格单元或记录主键;
- 更新局部性:一处修改不应让整库片段 ID 全部漂移;
- 模型约束:embedding 与重排模型的实际输入上限和截断行为;
- 权限一致性:不同 ACL 或有效期的内容不能被合成一个片段.
3.1 可选切分方式
- 结构优先:按标题,段落,列表,代码块,表格,记录边界切;超长单元再递归拆分.
- 滑窗:适合结构弱的连续文本,但重叠会增加存储,重复召回和评测去重难度.
- 父子片段:用小片段检索,返回带邻接范围的父段作为证据;必须评测父段扩展是否引入噪声.
- 语义边界:根据相邻单元表示变化建议切点;它仍是模型与阈值相关的启发式,不是"理解正确"的保证.
- 按记录检索:结构化数据保持主键与字段,不应先拼成长文本再假装精确查询.
3.2 切分实验
至少比较两个粒度和一个结构优先方案.固定检索器,分别测:证据召回,冗余率,被截断的重要条件,重排耗时,送入生成的 token 数和引用可定位率.若只比较最终答案,检索问题会被生成模型偶然掩盖.
4. 稀疏检索:词项是不可替代的信号
BM25 根据查询词在文档中的出现,全库区分度和文档长度修正来评分.一种常见形式为:
上式把 写作查询中的唯一词项;若实现显式计入查询词频,评分形式会多一个对应因子.公式族的 IDF,查询词频与参数约定不完全相同,应以具体引擎实现为准.BM25 查询成本主要取决于查询词的倒排表长度,过滤和评分实现,不能只用语料文档数给一个通用复杂度.稀疏检索通常适合:产品号,错误码,人名,条款编号,缩写,罕见术语和需要精确字面命中的查询.它的弱点是同义表达,跨语言,拼写变化和需要语义概括的查询.
中文和多语言系统还要固定分词器,规范化,同义词,停用词与字段权重版本.分析器变更等价于索引语义变化,必须重建并跑回归.
5. 稠密检索:相似度不是概率
双编码器把查询与文档分别编码:
再按模型规定使用内积,余弦或距离. 与 可以共享参数,也可以是不对称编码器;不能把"同一个模型"写成 dense retrieval 的定义.DPR 是一个经典双编码器实例,并在其论文指定的开放域 QA 数据集与 BM25 基线上报告了检索结果;这些结果不能直接外推到企业语料.DPR 论文
余弦相似度为:
该式要求 且 .L2 归一化只把向量长度变为 1,不会把负分量变成非负.两个向量均归一化时,内积等于余弦相似度;是否需要归一化,分数能否跨查询比较,取决于 embedding 模型的训练和官方说明.相似度不是"文档正确概率",不同模型,索引和查询之间的绝对阈值也通常不可直接复用.
稠密检索适合释义,概念与语义近邻,但可能忽略数字差异,否定,时间和专有标识符.稠密相关性分数不承载授权语义:权限必须由可执行过滤器保证;ANN 与过滤组合可能降低召回或返回少于 条,但不得通过放宽权限补足结果.换 embedding 模型必须重建向量索引,并用同一标注集对照,而不是只看演示查询.
6. 结构化与专用检索
当问题要求 金额 > X,时间范围,去重计数,联接,库存状态或权限判定时,SQL,搜索过滤器,图查询或业务 API 往往比文本相似度更合适.路由规则应基于查询需求和可验证 schema,而不是把所有数据都向量化.
检索器可以并行返回文本证据和结构化结果,但最终记录必须说明每个值来自哪个查询,快照和主键.
6.1 其他检索表示放在什么位置
- 学习式稀疏检索仍产出高维稀疏词项权重,可使用倒排索引;它不是"稠密向量换名字",训练域,词表和索引膨胀都要评测.
- 多向量 / late interaction为一个查询或文档保留多个 token/片段表示,在召回效率与细粒度交互之间取中间点;存储,候选打分和压缩成本不能按单向量估算.ColBERTv2
- 查询改写,扩展与分解位于检索前,可改善歧义或多跳覆盖,也可能引入实体漂移和额外调用.保存原查询,每个改写和其候选,独立评测而不是只看最终答案.Query Rewriting in RAG
6.4. 融合与重排
稀疏与稠密分数尺度不同.未经校准直接线性相加,权重含义不稳定.常见选择:
- 在验证集上对分数归一化/校准后做加权;
- 用学习排序,但需要独立训练与测试数据;
- 用 Reciprocal Rank Fusion(RRF)按排名融合:
其中只对包含文档 的排名列表求和,排名从 1 开始;缺席项不代入一个虚构排名.RRF 的计算随参与融合的候选列表总长度增长.该方法由 Cormack 等在特定 TREC/LETOR 实验中提出并比较;常数 仍是实现参数,不能因论文示例就宣称对所有任务最优.RRF 原论文
融合前先统一逻辑文档 ID,避免同一源的多个重叠片段占满候选.去重也不能只保留最高分:多跳或比较任务可能需要同一文档的多个不同证据区间.
8. 重排:用更强交互缩小候选
cross-encoder 通常把查询和单个候选拼接后联合编码,输出相关性分数:
Nogueira 与 Cho 的 BERT 重排论文是经典实例,其结果绑定 TREC-CAR,MS MARCO,模型和训练设置.Passage Re-ranking with BERT
8.1 正确的成本口径
对标准全注意力 Transformer,单个 query–document 序列长度 特殊 token;每层主要计算可近似写成 ,分别对应注意力与投影/前馈量级.对 个候选要运行 次(或批处理);批处理可改变墙钟利用率,但不消除总计算.因此不能把 cross-encoder 总成本统一写成 .真实延迟还取决于层数,隐藏维度,截断,批量,硬件和实现.Attention Is All You Need
8.2 何时值得重排
- 粗召回已经有较高覆盖,但前排噪声多;
- 查询含条件,否定,实体消歧或需要细粒度匹配;
- 上下文预算小,候选顺序直接影响证据覆盖;
- 验证集证明收益超过额外延迟与成本.
若相关证据根本未进入候选,重排无法找回.先诊断候选 Recall,再诊断排序.
6.5. ANN 索引选择
9.1 基线:精确搜索
Flat/exhaustive search 对每个查询比较全部 个 维向量,单查询距离计算基线约为 ;结果可作为近似索引召回率的基线.Faiss 官方索引表把 IndexFlatL2 与 IndexFlatIP 标为 exhaustive;归一化后 IndexFlatIP 可用于余弦搜索.Faiss 索引说明
9.2 HNSW
HNSW 建立多层近邻图,通过上层入口逐层搜索.原论文在其模型和实验下讨论了近似对数扩展,但生产复杂度受数据分布,图参数,过滤,删除支持和实现影响,不能统一写成 .HNSW 原论文
Faiss 文档说明 M 增大会提高精度并增加内存,efConstruction 控制构建探索,efSearch 控制查询探索;Faiss 的 HNSW 还不支持直接移除向量.其他引擎的删除语义可能不同,必须读所用版本文档.
9.3 IVF 与压缩
IVF 用粗量化器把向量分到倒排列表,查询只探测部分列表;探测越多通常越接近精确搜索但更慢.PQ/SQ 等压缩减少内存,却会改变距离近似.训练样本,nlist,nprobe,编码与重排共同决定结果.
pgvector 官方文档给出的当前实现对比是:HNSW 通常有更好的速度—召回权衡,但构建更慢,内存更多;IVFFlat 构建更快,内存较少,但需要训练且查询表现不同.这是 pgvector 的实现说明,不应写成所有产品的绝对规则.pgvector 官方文档
9.4 选择矩阵
| 约束 | 先验证的方案 |
|---|---|
| 小语料或强过滤后集合很小 | 精确搜索基线 |
| 高召回,内存可接受,更新方式匹配 | HNSW |
| 大规模,需压缩或控制扫描量 | IVF/PQ 类方案 |
| 频繁删除与权限变化 | 先验证引擎删除,墓碑,重建和过滤行为 |
| 多租户强隔离 | 分区/分表/独立索引与共享过滤做安全和成本对照 |
| 指标 | 回答的问题 | 局限 |
|---|---|---|
| Recall@k / hit rate | 所需证据是否进入前 | 不惩罚大量噪声;单证据与多证据定义不同 |
| Precision@k | 前 中多少相关 | 可能惩罚有用的多样证据 |
| MRR | 第一个相关结果多靠前 | 不适合必须覆盖多个证据的任务 |
| nDCG@k | 多等级相关结果是否排得合理 | 依赖可靠等级标注 |
| evidence-set coverage | 多跳/比较所需证据集合是否齐全 | 标注成本高 |
| latency / memory / cost | 服务是否满足资源目标 | 不能说明语义质量 |
| authorization correctness | 结果是否全部有权访问 | 应是门槛,不与相关性加权抵消 |
如果下游只允许两个片段,Precision 和排序可能比把 Recall@100 做高更重要;如果法律检索要求不漏条款,集合 Recall 可能优先;如果任何越权结果都不可接受,权限正确性是硬门.指标优先级由任务损失决定.
11. 决策流程
- 按查询类型定义相关性和证据集合.
- 建稀疏精确基线,不从"必须向量库"开始.
- 加一个稠密检索器,分别分析稀疏独有,稠密独有和共同命中.
- 选择融合方式并在验证集调参,测试重叠去重.
- 只有候选覆盖足够后才加重排.
- 用精确向量搜索测 ANN Recall,再在实际过滤与并发下测速度,内存和结果数.
- 在最终上下文预算下选择
K,最终k和片段扩展,而不是分别追求局部最优. - 对实体,否定,数字,时间,多语言,多跳和无答案查询做切片分析.
12. 失败模式与定位
| 症状 | 优先检查 |
|---|---|
| 专有名词找不到 | 分词/规范化,稀疏通道,词表截断 |
| 语义问题找不到 | embedding 域偏移,查询/文档模板,切分边界 |
| 有候选但第一名错 | 重排,时效/权限特征,负样本与标注 |
top_k 不足 |
ANN 过滤时机,扫描参数,重复片段,授权集合大小 |
| 多跳只找到一跳 | 查询分解,证据集合标注,结构化/图或迭代检索 |
| 换索引后结果漂移 | 近似参数,模型/归一化,索引训练样本,随机性 |
| 延迟长尾 | 重排长度,候选 K,过滤选择性,缓存,并发与批量 |
| 离线好线上差 | 查询分布漂移,标注泄漏,源版本和权限不同 |
13.1 固定资产
- 语料快照和权限矩阵;
- 训练,调参,测试三组查询,按来源或时间隔离;
- 文档/片段相关性与多证据集合标注;
- 索引引擎版本,硬件,线程,并发与缓存状态.
13.2 最小消融表
| 运行 | 切分 | 召回 | 融合 | 重排 | 索引 |
|---|---|---|---|---|---|
| A | 结构基线 | BM25 | 无 | 无 | 稀疏精确 |
| B | 同 A | dense | 无 | 无 | vector exact |
| C | 同 A | BM25+dense | RRF/已校准融合 | 无 | vector exact |
| D | 同 A | 同 C | 同 C | cross-encoder | vector exact |
| E | 同 A | 同 D | 同 D | 同 D | 候选 ANN |
| F | 第二切分方案 | 同 E | 同 E | 同 E | 同 E |
报告总体与查询切片的指标,95% 置信区间或配对重采样,P50/P95/P99 延迟,内存,索引构建时间,失败/少于 比率和授权错误.ANN 的 recall 要相对同一向量与过滤条件下的 exact 结果计算.
14. 上线检查表
相关性定义与证据集合标注已版本化.
稀疏与精确向量基线可重跑.
embedding 的查询/文档格式,归一化和距离符合模型说明.
融合前解决了分数尺度或采用排名融合.
重排收益在实际候选,长度和硬件下测得.
ANN 用 exact 对照验证,并覆盖真实过滤与删除场景.
top_k,候选 K 和最终上下文 token 预算联合调优.权限正确性是硬门,不被相关性分数抵消.
数字,否定,时间,多语言,多跳和无答案切片没有被总平均掩盖.
每次发布保留索引,模型,分析器,参数和硬件口径.
Robertson & Zaragoza, The Probabilistic Relevance Framework: BM25 and Beyond, 2009.
Karpukhin et al., Dense Passage Retrieval for Open-Domain Question Answering, 2020.
Cormack et al., Reciprocal Rank Fusion, 2009.
Nogueira & Cho, Passage Re-ranking with BERT, 2019.
Santhanam et al., ColBERTv2, 2022.
Ma et al., Query Rewriting in Retrieval-Augmented Large Language Models, 2023.
Malkov & Yashunin, HNSW, 2016/2020.
Meta, Faiss indexes.
pgvector, Exact/approximate indexes, filtering and monitoring.
Thakur et al., BEIR 官方仓库.
Robertson & Zaragoza, BM25 and Beyond, 2009.
Cormack et al., Reciprocal Rank Fusion, 2009.
Nogueira & Cho, Passage Re-ranking with BERT, 2019.
Karpukhin et al., Dense Passage Retrieval, 2020.
Khattab & Zaharia, ColBERT, 2020.
Santhanam et al., ColBERTv2, 2022.
Gao et al., HyDE, 2023.
6.9. 结构切分的扩展实验
对含正文、两张表、代码块和扫描图的文档, 建立结构保留与纯文本展平两条管线. 问题集分别询问段落定义、表格行列交点、函数参数和图片中的设备编号. 两条管线使用相同 embedding 与检索参数, 记录解析覆盖、参考证据 recall、引用定位和上下文 token. 这样可以把结构收益与模型差异分开.
表格问题若只命中数值却缺表头, 记为部分覆盖; 代码问题命中函数体却缺签名, 同样不算充分证据. 图片 OCR 命中编号后, 引用回到页码和区域坐标, 不能只指向派生文本. 若 OCR 置信低或单位字符易混淆, 系统保留原图裁剪供核验, 高风险数值进入人工复核或拒答路径.
索引侧先用 exact dense 得到表示上限, 再比较 HNSW 或 IVF. 假设 exact recall@20 为 0.86、P95 220 ms, HNSW 为 0.84、35 ms, 加入高选择性权限过滤后降到 0.76. 主要损失出现在过滤组合, 需要调整预过滤、分区或探索参数, 不能归因于 embedding. 同时报告内存、构建时间和删除成本, 才能选择生产工作点.
规则“普通申请 30 日; 海外差旅 60 日; 延长只适用于 2026 年后审批”分别按固定 token、句子、结构合并和父子扩展建索引. 问题覆盖普通申请、2025 海外申请和 2026 海外申请. 若例外与生效条件分开, 2025 问题会错误命中 60 日; 结构合并应让条件与结论共同进入上下文.
除 recall@k 外增加条件完整率, 即结论及全部限制是否共同出现. 固定 token 可能 recall 高而完整率低, 父子扩展可能完整率高但 token 成本增加. 最小变化问题对只替换年份、身份或否定词, 候选和答案应随条件改变.
HNSW 扫描 、efConstruction、efSearch, IVF 扫描列表数和 nprobe. 每个点记录 recall、P50/P95、内存、构建时间和更新吞吐. exact dense 给出表示上限, ANN 与它的差才是近似损失.
过滤选择性按可见比例 100%、10%、1% 分层测试. 先 ANN 后过滤在小可见集合中可能耗尽候选, 预过滤、租户分区和迭代扫描分别增加精确计算、运维碎片和尾延迟. 参数选择必须基于真实租户分布.
持续更新实验还测新文档可见时间、删除残留、图索引墓碑和重建成本. 静态 benchmark 最快的配置, 若更新后 recall 下降或内存持续膨胀, 仍不适合作为生产工作点.
7.3. 层级切分与 late chunking
层级切分先保留文档—章节—段落树, 小节点用于匹配, 命中后按父节点或相邻窗口扩展. 它在索引前确定边界. late chunking 则先让长上下文编码器读取较长文档, 得到带全局语境的 token 表示, 再对预定片段范围池化; 返回单元仍是片段, 片段向量已经吸收文档上下文.
两者解决的问题不同. 父子扩展改善进入生成器的证据完整性, late chunking 改善短片段 embedding 的歧义. 一段“它只在上述条件下生效”单独编码信息不足, 长文编码后池化可能带入“海外申请”和日期条件; 若最终上下文仍只返回该句, 读者和生成器依然缺原文条件, 因而还需父节点扩展.
成本近似可拆为编码和存储. 独立切分对 个长度 的片段计算 , 长文编码长度 时注意力近似 , 但只执行一次并复用上下文. 当 超过模型窗口或平方成本过高, 采用章节级 late chunking 或重叠长窗. 存储仍与片段向量数和维度成正比.
实验同时比较独立 embedding、标题拼接、late chunking、父子扩展和两者组合. 查询分为代词依赖、定义—例外、普通局部事实和跨章节问题. late chunking 若只在代词样本提高, 不应宣称对全部查询通用; 组合方案若 token 成本大增, 需报告单位完整证据的成本.
多粒度索引可以为标题、段落和章节分别保存表示. 粗粒度先路由文档或章节, 细粒度再定位段落. 若每篇文档有 1 个摘要、10 个章节、100 个段落, 全量索引项为 111; 路由后只搜索命中章节的 10 个段落可降低后续比较, 但错误章节路由会让正确段落永远不可见.
反例是把多个粒度的原始分数直接合并. 摘要向量与短段落的相似度分布不同, 长章节也更容易包含查询词. 更稳妥的做法是分层排名、在验证集校准或用 RRF 合并, 并保存候选来自哪个粒度. 去重按共同来源范围处理, 避免同一内容以摘要、章节和段落三次占据上下文.