在我近一年构建可扩展AI系统的经验中,我发现RAG系统的成功大多取决于检索(retrieval)。你如何切分和存储文档——也就是分块(chunking)——往往是成功背后的隐形推手。

引言

RAG(Retrieval-Augmented Generation)pipeline的性能很大程度上取决于你如何切分文档(分块)。在这篇文章中,我会带你了解RAG的流程,重点讲讲分块在其中的位置,然后深入探讨固定分块、递归分块、语义分块、基于结构的分块和延迟分块这五种技术,包括它们的定义、权衡和伪代码,帮你选择适合自己场景的方法。

RAG工作流程(高层次概览)


标准流程如下:

  1. 文档摄取与分块

    拿来大份文档(PDF、HTML、纯文本) → 切分成小块(chunk) → 计算embeddings → 存储到vector DB中。

  2. 查询与检索

    用户输入查询 → 将查询转为embedding → 检索top-k最相似的块(通过cosine similarity)。

  3. 增强与提示构建

    将检索到的块(加上metadata)注入到LLM的提示中,通常会用模板和过滤器。

  4. 生成

    LLM基于检索到的上下文和模型先验知识生成答案。

因为生成器(generator)只能看到你喂给它的内容,检索质量直接决定了结果。如果分块不合理或无关紧要,哪怕最好的LLM也救不回来。这就是为什么很多人说RAG的成功70%靠检索,30%靠生成。

在深入探讨技术之前,先说说为什么好的分块不是可有可无的:

  • Embedding和LLM模型有context window限制,你没法直接处理超大文档。
  • 分块需要语义连贯。如果你在句子或概念中间切开,embedding会变得杂乱或误导。
  • 如果分块太大,系统可能会漏掉细粒度的相关内容。
  • 反过来,如果分块太小或重叠太多,你会存储冗余内容,浪费计算和存储资源。

接下来,我们来探索五种主流的分块技术,从最简单到最复杂。

1. 固定分块(Fixed Chunking)

按固定大小(按token、单词或字符)把文本切成等大的块,通常块之间会有重叠。

这是RAG项目的良好起点,适合文档结构未知或内容单一的场景(比如日志、纯文本)。

实现代码示例:

def fixed_chunk(text, max_tokens=512, overlap=50):    tokens = tokenize(text)    chunks = []    i = 0    while i < len(tokens):        chunk = tokens[i : i + max_tokens]        chunks.append(detokenize(chunk))        i += (max_tokens - overlap)    return chunks
2. 递归分块(Recursive Chunking)

先按高层边界(比如段落或章节)切分。如果某个块还是太大(超过限制),就递归地进一步切分(比如按句子),直到所有块都在限制范围内。

适合半结构化文档(有章节、段落),你想尽量保留语义边界,同时控制块大小。

它能尽量保留逻辑单元(段落),避免不自然的切分,生成适合内容变化的多种块大小。

递归分块示例(LangChain):

from langchain.text_splitter import RecursiveCharacterTextSplitter# 示例文本text = """输入文本占位符..."""# 定义递归分块器text_splitter = RecursiveCharacterTextSplitter(    chunk_size=200,           # 每个块的目标大小    chunk_overlap=50,         # 块之间的重叠以保持上下文连贯    separators=["\n\n", "\n", " ", ""]  # 递归切分的优先级)# 切分文本chunks = text_splitter.split_text(text)# 显示结果for i, chunk in enumerate(chunks, 1):    print(f"Chunk {i}:\n{chunk}\n{'-'*40}")

这能确保后续embedding和检索时,不会丢失边界处的关键上下文。

3. 语义分块(Semantic Chunking)

根据语义变化来切分文本。用embeddings(比如sentence embeddings)决定一个块的结束和下一个块的开始。如果相邻段落的相似度很高,就把它们放在一起;当相似度下降时,就切分。

适合需要高检索精度的场景(法律文本、科学文章、支持文档),但要注意embedding和相似度计算的成本,定义相似度阈值也需要仔细调整。

实现代码示例:

from sentence_transformers import SentenceTransformer, utilmodel = SentenceTransformer("all-MiniLM-L6-v2")def semantic_chunk(text, sentence_list, sim_threshold=0.7):    embeddings = model.encode(sentence_list)    chunks = []    current = [sentence_list[0]]    for i in range(1, len(sentence_list)):        sim = util.cos_sim(embeddings[i-1], embeddings[i]).item()        if sim < sim_threshold:            chunks.append(" ".join(current))            current = [sentence_list[i]]        else:            current.append(sentence_list[i])    chunks.append(" ".join(current))    return chunks
4. 基于结构的分块(Structure-based Chunking)

利用文档的固有结构(比如标题、副标题、HTML标签、表格、列表项)作为自然的切分边界。
比如,每个章节或标题可以成为一个块(或者再递归切分)。
适合HTML页面、技术文档、类似Wikipedia的内容,或任何有语义标记的内容。

根据我的经验,这种策略效果最好,尤其是结合递归分块时。
但它需要解析和理解文档格式,如果章节太大,可能会超过token限制,可能需要结合递归切分。

实现提示:

  • 用HTML/Markdown/PDF结构解析库。

  • 以章节/

    等作为块的根。

  • 如果某部分太大,就回退到递归切分。

  • 对于表格/图片,要么单独作为一个块,要么总结其内容。

5. 延迟分块(Late Chunking / 动态/查询时分块)

定义
延迟分块是指推迟文档的切分,直到查询时才决定。不是提前把所有内容切好,而是存储更大的段落甚至整个文档。收到查询时,只对相关段落动态切分(或过滤)。这样做的目的是在embedding时保留完整上下文,只在必要时切分。

Weaviate将延迟分块描述为“颠倒传统的embedding和chunking顺序”。

  • 先用长上下文模型对整个文档(或大段)做embedding。
  • 然后池化并创建块的embeddings(基于token范围或边界线索)。

概念流程:

  • 在索引中存储大段或整个文档。
  • 查询时,检索1-2个最相关的段落。
  • 在这些段落中,动态切分(比如语义或重叠)出匹配查询的部分。
  • 过滤或排序这些块,喂给生成器。

这种方法就像编程中的late binding,推迟到有更多上下文时再决定。

适用场景:

  • 大型文档集(技术报告、长篇内容),跨段落的上下文很重要。
  • 文档内容经常变化的系统,避免重新切分节省时间。
  • 高风险或精度敏感的RAG应用(法律、医疗、监管),误解代词或引用可能代价高昂。

听起来很高级,但它也有成本。
对整个文档(或大段)做embedding计算成本高,可能需要支持长token限制的模型。
查询时的计算成本和潜在延迟也会更高。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过 30%。
在这里插入图片描述

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:
在这里插入图片描述

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

图片

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01 教学内容

在这里插入图片描述

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例: 带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

image.png

vx扫描下方二维码即可
【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03 入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:
图片

04 视频和书籍PDF合集

图片

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

图片

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)
图片

05 行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!
图片

06 90+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)图片
在这里插入图片描述

07 deepseek部署包+技巧大全

在这里插入图片描述

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

【附赠一节免费的直播讲座,技术大佬带你学习大模型的相关知识、学习思路、就业前景以及怎么结合当前的工作发展方向等,欢迎大家~】
在这里插入图片描述

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐