2025 年 12 月 16 日·5 分钟读完·RAG检索EmbeddingLLM

RAG 全链路(一):文档切分——让检索结果保留完整语境

从解析和元数据开始,比较固定窗口、结构化切分、父子块与上下文补注;用一份故障手册实例解释检索粒度、供给粒度和版本追踪。

更新与核对 · 2026-10-11

RAG(Retrieval-Augmented Generation,检索增强生成)先从外部资料找证据,再让模型回答。资料被切成的小块叫 chunk;Embedding 则把文本映射成可比较的向量。切分决定检索单元里保留多少语境,但答案质量还取决于解析、检索、模型和评测,不能只归因于切分。

比如一段只写“营收增长 3%”,丢掉了公司与季度,检索和回答都会更难。保留标题路径或父文档关系,比只改变 chunk 大小更直接。本文是三篇系列的起点,后续分别讲 检索与 重排和引用。

先解析正确,再谈怎么切

PDF 的阅读顺序、表格列名、公式、脚注和 OCR 错误,都可能在切分前损坏。双栏报告若被逐行横向拼接,再精细的切分也只是把乱码切得整齐。

入库前先做结构抽取、重复页眉清理和抽样核验;图片保留原图引用及可检索图注,公式保留表达式与文字解释。OCR 和自动图注会出错,不能替代原图作为最终证据。版权、租户和访问权限也要跟随文档进入元数据。

四种策略,各有适用条件

方法适合什么主要代价
固定窗口加重叠结构弱的文本、快速基线可能切断句子,重叠增加索引量
按标题、段落、条目结构切规范、技术文档、操作手册需要可靠解析,超长段仍需递归拆分
父子块小块检索、大块解释的任务父块去重、长度控制和权限继承
上下文补注孤立段落缺文档语境额外生成成本,补注自身可能出错

固定窗口也可优先在句子边界截断,不一定要机械按字符拦腰切。可先比较几组 token 长度与重叠比例;这些是实验变量,没有适用于所有语料的固定最佳值。

父子块把检索粒度与供给粒度解耦:用小块找准位置,返回父块提供语境。父块可能很大,需要按 token 预算截取;多个子块命中同一父块要去重,不能把一个章节重复喂五次。

切分方法对比:固定窗口、结构边界、父子块与上下文补注

图 1 · 先保住原始结构,再按查询需求决定检索和供给粒度。

一份故障手册怎么拆

一份故障手册可能包含症状、前置条件、诊断步骤、修复命令与验证方法。可以把单个故障条目作为父文档,把诊断与修复步骤作为子块,保留统一的 entry_id。只读用户与运维人员可访问的段落可能不同,取回父块时仍要逐段检查权限,不能因需要完整语境就泄露受限命令。

{
  "chunk_id": "runbook-42:rev-3:diagnosis-2",
  "parent_id": "runbook-42:rev-3",
  "document_id": "service-runbook-8",
  "source_revision": "rev-3",
  "section_path": ["连接故障", "请求超时"],
  "content_type": "diagnosis",
  "tenant_id": "tenant-a",
  "source_locator": { "page": 27, "paragraph": "p-8" }
}

身份、版本和来源定位分开保存:同一条目修订后产生新 revision;引用必须能定位当时使用的版本。删除或撤权时,父子块、向量、全文索引和答案缓存一起处理。标题路径不是权限控制,客户端的授权过滤需在服务端执行。

上下文补注:公开实验怎么读

Anthropic 的 Contextual Retrieval 为块生成简短定位说明,再与原块一起建向量和词法索引。其公开实验中,top-20 检索失败率依次如下:原始报告[1]

配置失败率相对 5.7% 基线降幅
基础检索5.7%—
上下文向量检索3.7%约 35%
再结合上下文 BM252.9%约 49%
再结合重排1.9%约 67%

5.7% 到 1.9% 是减少 3.8 个百分点,或相对减少约 67%;不是答案正确率提高了 67%。这些是报告语料、模型和流程下的结果,不能直接推广到其他语言和领域的资料库。

补注要单独标记为派生内容,保留原文;它能帮助检索,但不能伪装成权威证据。用同一评测集比较结构标题补全、父子块和 LLM 补注,再决定额外成本是否值得。

Late Chunking 是另一条路线:先在长上下文模型里编码,再按块池化向量,使块保留更多全文语境。它要求相应模型和实现,不是所有 Embedding API 都能支持。Jina 原始介绍[4]

切分实验怎么做

固定语料版本、Embedding 和检索参数,比较不同切分配置。用真实问题标注支持答案的证据位置,避免只标 chunk ID:重新切分后 chunk 变了,证据位置仍能对应。

至少看证据召回、最终正确率、引用支撑率、输入 token、索引体积和延迟。对跨段推理、表格问题、图题单独分组。小样本抽检能发现坏块,却不能代替全链路评测。

若题目需要三条证据,Recall@k 可能不错但仍缺关键一条;再看“全部必要证据是否齐全”。若重叠导致多个结果几乎相同,先去重和限制父文档占比,不要立刻增加 top-k。

落地检查

  1. 检查解析顺序、表格、公式与 OCR,保留原始载体。
  2. 每块记录父文档、内容类型、版本、来源与权限。
  3. 结构化语料优先比较结构切分,超长单元用父子关系处理。
  4. 补注标记为派生内容,抽检生成错误,不作为独立证据。
  5. 固定其他变量比较切分,用最终答案质量和成本一起选参数。
  6. 更新、删除与撤权同步覆盖各索引和缓存。

参考资料

正文中的编号可跳转至对应来源。工程报告、官方文档与研究论文分别标注;支撑范围说明该资料能证明什么,以及不能推导什么。

  1. [1]工程报告
    Anthropic — Contextual Retrieval

    支撑范围: 为块补充定位上下文并组合向量、BM25 与重排的实验;检索失败率下降不等于答案正确率同比提高。

    www.anthropic.com核对于 2026-10-11
  2. [2]官方文档
    LlamaIndex — Node parsers

    支撑范围: 结构化与递归 node parser 的接口;解析质量和权限由数据链路保证。

    developers.llamaindex.ai核对于 2026-10-11
  3. [3]技术文章
    Pinecone — Chunking strategies

    支撑范围: 切分策略的工程讨论;块大小不是可跨任务照搬的常数。

    www.pinecone.io核对于 2026-10-11
  4. [4]技术文章
    Jina — Late Chunking

    支撑范围: Late Chunking 的模型上下文与池化方法介绍;区别于普通先切分后编码。

    jina.ai核对于 2026-10-11
↑ 回到全部文章