news 2026/7/15 18:58:53

分块策略——RAG 效果差异最大的环节

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分块策略——RAG 效果差异最大的环节

同样的嵌入模型、同样的向量数据库,只是换了分块策略,检索召回率就能相差 9% 以上。这个被严重低估的环节,才是 RAG 系统真正的"地基工程"。


一个被忽视的事实

做 RAG 的同学,大部分时间花在哪了?

调嵌入模型、换向量数据库、折腾重排序算法……这些当然重要。但 NAACL 2025 的一篇同行评审研究(arXiv:2410.13070)给出了一個令人意外的结论:

分块策略对检索质量的影响,与嵌入模型的选择相当,甚至更大。

Chroma 的评测也印证了这一点——在相同语料上,最优与最差分块策略之间的召回率差距达到9%

行业里还有个更直观的说法:分块策略决定了 RAG 系统 70% 以上的性能上限。

为什么?因为分块是连接原始文档与向量检索的桥梁。桥搭歪了,后面再怎么优化也补不回来。


为什么分块这么难?

三个绕不开的约束:

第一,大模型有"阅读上限"。即使支持 200K Token 的长上下文模型,把整本文档塞进去,推理成本线性上涨,信息密度却被大量无关内容稀释——模型反而"找不到重点"。

第二,块太大或太小都是灾难。2026 年 Vecta 基准测试揭示了两个典型失败模式:

失败模式具体表现根本原因
块过小(< 50 tokens)端到端问答准确率仅 54%上下文不足,模型缺乏作答依据
块过大(> 2500 tokens)无关内容稀释信号一块含多个主题,向量无法精准表达
边界截断关键定义被从中间切断固定字符切分不考虑语义完整性

第三,没有"一招鲜"的万能方案。新闻、论文、代码、手册、对话记录——不同文档类型需要不同的切分逻辑,这就引出了今天的主角:五大主流分块策略。


五大主流分块策略全景对比

策略一:固定大小分块

最简单粗暴——按预设 Token 数强制切割,不管是不是切断了一个完整的句子。

# LangChain 实现from langchain.text_splitter import CharacterTextSplittersplitter = CharacterTextSplitter( chunk_size=500, chunk_overlap=50)chunks = splitter.split_text(long_text)

优点:实现极其简单,计算复杂度 O(1),适合实时处理。

致命缺陷:语义割裂风险极高,上下文断裂率可高达 37%。对中文文档尤其不友好——强制按字符数切分极易把一个词从中间截断。

适用场景:RAG 项目的快速起步验证、日志分析、结构参差不齐的大型语料库。


策略二:递归分块(生产首选 ⭐)

目前生产环境中最推荐的默认策略。核心思想:按分隔符优先级递归尝试,优先在"大段落边界"切,如果仍超长,再降级切分。

分隔符优先级(从高到低):

"\n\n" → "\n" → "。" → "!" → "?" → " " → ""(逐字符) ``````plaintext from langchain.text_splitter import RecursiveCharacterTextSplittersplitter = RecursiveCharacterTextSplitter( chunk_size=512, chunk_overlap=64, separators=["\n\n", "\n", "。!?", " ", ""])chunks = splitter.split_text(text)

为什么它更优秀?尽可能保留了文档的语义结构,每个 Chunk 内部主题相对聚焦。

2026 年基准数据:Vecta 对 50 篇学术论文的测试结果显示,递归 512-token 分块以69% 的端到端准确率位列第一


策略三:语义分块

最"智能"的策略——利用嵌入模型计算相邻句子的语义相似度,在相似度明显下降(语义发生突变)的地方切断,而不是在固定位置。

from sentence_transformers import SentenceTransformer, utilimport numpy as npmodel = SentenceTransformer("bge-large-zh-v1.5")def semantic_chunk(sentences, sim_threshold=0.7): embeddings = model.encode(sentences) chunks = [] current = [sentences[0]] for i in range(1, len(sentences)): sim = util.cos_sim(embeddings[i-1], embeddings[i]).item() if sim < sim_threshold: chunks.append(" ".join(current)) current = [sentences[i]] else: current.append(sentences[i]) chunks.append(" ".join(current)) return chunks

优点:精度最高,每个块内语义连贯,边界识别准确率可达 88%。

代价:需要预训练嵌入模型,处理延迟显著增加(约 45ms/千词 vs 固定分块的 12ms)。

⚠️ 一个重要的坑:2026 年 Vecta 基准测试发现,语义分块产生的碎片平均仅43 tokens,对 LLM 生成答案而言上下文严重不足,导致端到端准确率(54%)反而低于递归分块(69%)。

使用语义分块时,务必设置最小 Chunk 大小下限(建议 ≥ 100 tokens),避免产生过于碎片化的片段。


策略四:结构化分块

直接利用文档自身的结构标记——标题、子标题、Markdown##、HTML 标签、代码函数——作为天然的分块边界。

# LangChain4j 按段落分块(Java 示例)DocumentByParagraphSplitter splitter = new DocumentByParagraphSplitter( 500, # 每块最多 500 字符 50 # 重叠 50 字符);

优点:结构化强,每个块对应一个逻辑完整的章节,检索时可直接定位到具体章节。

缺点:依赖文档格式,对无标题标记的纯文本不适用。长章节可能仍超限,需混合使用递归拆分。

适用场景:产品手册、API 文档、维基类内容——实际经验来看,这种策略效果最好,尤其是配合递归分块一起用的时候。


策略五:父子分块(Parent-Document Chunking)

一种"双层架构"策略:索引阶段存储小块(子块),检索到匹配后返回给 LLM 的是大块(父块)

精妙之处:用小块的"精准"完成检索,用大块的"完整"支撑生成。

索引时:文档 → 切大块(父) → 大块再切小块(子) → 只存储小块的向量检索时:查询 → 匹配小块 → 找到对应的大块 → 把大块喂给 LLM

适用场景:技术手册、合同、学术论文等需要高精度+高质量的场景。LangChain 和 LlamaIndex 均有现成实现。


横向对比总览

策略实现难度语义完整性计算成本2026准确率推荐场景
固定大小分块⭐ 极低⭐⭐ 低⭐⭐⭐⭐⭐ 极低~50%日志、快速验证
递归分块⭐⭐⭐ 低⭐⭐⭐⭐ 中⭐⭐⭐⭐ 低69%(第一)绝大多数场景
语义分块⭐⭐⭐⭐⭐ 高⭐⭐⭐⭐⭐ 最高⭐ 高54%(碎片风险)法律、科研、多语言
结构化分块⭐⭐⭐⭐ 中⭐⭐⭐⭐⭐ 高⭐⭐⭐ 中因场景而异手册、API文档
父子分块⭐⭐⭐⭐ 中⭐⭐⭐⭐⭐ 高⭐⭐ 中高高(无直接基准)高精度生产场景

2026 年最新研究结论

几篇 2025-2026 年的论文和系统测试,给出了一批可量化的选型建议:

结论 1:重叠设置

添加 10-20% 重叠对检索精度无显著提升,反而增加索引成本。可以不用重叠,或用更小的重叠(5-10%)。

结论 2:块大小

综合多个基准测试,最优区间是256 ~ 512 tokens

查询类型推荐块大小原因
短答案、事实型查询(如 Natural Questions)64-128 tokens便于精确定位答案
需要广泛上下文理解(如 NarrativeQA)512-1024 tokens提供更完整的背景信息

结论 3:分块器选择

句子分块与语义分块在效果上持平,但句子分块成本更低。如果追求性价比,优先用句子分块打底。

结论 4:上下文预算

场景推荐上下文预算说明
QA 场景约 2.5k tokens超越此阈值后 LLM 可能因"上下文悬崖"效应性能下降
摘要场景约 500 tokens小上下文更能集中证据,提升语义忠实度

两种前沿策略(2025-2026 新进展)

Late Chunking:先嵌入再切分

传统分块在向量化之前切割文档;Late Chunking 反其道而行——先对整篇文档进行 Embedding,再在向量空间对表示进行切分。

每个子向量天然携带了整篇文档的全局上下文信息,有效解决了传统分块中"割裂上下文"的问题。

传统流程:切分文档 → 逐块 Embedding → 存向量Late Chunking:整文 Embedding → 在向量空间切分 → 存向量

代价:需要支持长上下文(10K+ Token)的嵌入模型,计算成本显著增加。

Contextual Retrieval:Anthropic 的上下文注入方案

Anthropic 提出的方案:将每个 Chunk 连同整篇原始文档一起发送给 LLM,让 LLM 为该 Chunk 生成一段简短的"上下文说明"(2-3 句话),然后将说明文字前置到 Chunk 正文中再进行向量化。

原始 Chunk:"API 支持 GET 和 POST 两种方法……"加入上下文后:"本文档是 XX 产品 API 手册第三章,介绍接口调用方式。API 支持 GET 和 POST 两种方法……"

代价:需要额外调用 LLM,预处理成本较高。

对比维度Late ChunkingContextual Retrieval
语义完整性较好最好
计算成本较低(一次 Embedding)较高(额外 LLM 调用)
实现复杂度
选型建议效率优先质量优先

何时值得升级到前沿策略?如果递归分块已实现 ≥ 85% 的上下文召回率,通常无需升级。当业务对答案质量要求极高(法律、医疗、金融),才值得投入。

选型决策指南

一张流程图,帮你找到最适合的分块策略:

你的文档有清晰的结构标记(标题/章节/HTML标签)?├── 是 → 结构化分块(打底)+ 递归分块(处理超长章节)└── 否 → 你的文档类型是什么? ├── 日志/代码/格式混乱 → 固定大小分块(快速验证) ├── 新闻/论文/叙事性文本 → 递归分块(起步首选) ├── 法律/科研/多语言知识库 → 语义分块(精度优先) └── 高精度生产场景 → 父子分块(兼顾精度与生成质量)

实际生产中的黄金组合

结构化分块(按章节切分) +递归分块(处理超长章节) +10-15% 重叠(防止边界截断)

这套组合在多数场景下能打到 80 分以上的效果,且实现成本可控。


生产环境避坑清单

坑 1:用字符数代替 Token 数

中文字符通常对应 1-2 个 Token,英文单词对应 1-3 个 Token。用字符数设定chunk_size会导致实际 Chunk 大小与嵌入模型的 Token 限制严重不符。

建议:始终使用 Tokenizer 进行精确 Token 计数。

坑 2:语义分块不设最小下限

产生 20-30 tokens 的碎片,LLM 拿到后根本无法生成有效答案。

建议:设置min_chunk_size = 100 tokens

坑 3:重叠比例过大

重叠 50% 意味着索引体积翻倍,检索时重复内容干扰排序。

建议:重叠比例控制在chunk_size的 10-15%。

坑 4:分块后不验证

只看着指标好看,不实际看切出来的 Chunk 质量。

建议:随机抽 20 个 Chunk 人工检查,确认没有关键句被截断、每个 Chunk 语义相对完整。


写在最后

分块是 RAG 系统中最基础也最容易被低估的环节

它不像模型调优、提示工程那样"性感",但分块策略的优劣,直接决定了向量检索的精度上限——再好的嵌入模型、再先进的重排序算法,都无法从根本上弥补分块不当带来的信息丢失。

没有哪种方法是银弹,实际项目需要根据文档类型、查询特点、资源限制来组合使用。

记住这个顺序:先设计好分块策略,再谈模型选型和优化——这顺序不能错。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 18:57:16

AM572x DDR3接口设计:从电源规划到信号完整性的实战指南

1. 项目概述与核心挑战 在基于德州仪器AM572x系列处理器&#xff08;如AM5729、AM5728、AM5726&#xff09;进行嵌入式系统设计时&#xff0c;DDR3内存接口的设计往往是硬件工程师面临的最大挑战之一。这不仅仅是因为它直接关系到系统的整体性能和稳定性&#xff0c;更因为这是…

作者头像 李华
网站建设 2026/7/15 18:56:45

厄尔尼诺现象机制解析:从沃克环流到东西岸气候影响

最近在整理高中地理的复习资料时&#xff0c;发现很多同学对厄尔尼诺现象的理解还停留在"东岸多雨、西岸干旱"的简单记忆层面。但实际考试中&#xff0c;题目往往更深入考察厄尔尼诺对赤道太平洋地区东西岸影响的具体机制和连锁反应。这篇文章将从一道典型的高考模拟…

作者头像 李华
网站建设 2026/7/15 18:56:04

OSPF单区域网络部署与邻居状态实战解析

1. OSPF单区域网络部署实战指南第一次接触OSPF时&#xff0c;我被它复杂的邻居状态机搞得晕头转向。直到在实际项目中部署了一个四台路由器的单区域网络&#xff0c;才真正理解了OSPF的工作机制。下面我就用这个真实案例&#xff0c;带你一步步搭建OSPF单区域网络。基础环境准备…

作者头像 李华
网站建设 2026/7/15 18:55:35

Unity 2D资产命名常用缩写

角色与生物类Chr / Char — 角色 (Character)&#xff0c;最通用的人物缩写PC — 玩家角色 (Player Character)NPC — 非玩家角色&#xff0c;通常不缩写&#xff0c;直接大写Mon — 怪物 (Monster)Enm / En — 敌人 (Enemy)&#xff0c;与怪物常混用Boss — 首领&#xff0c;一…

作者头像 李华