RAG系统优化:Chunk切分技术让你的大模型更“懂“文档!
RAG系统的Chunk切分是影响检索效果的关键环节。简单按固定字数切分会打断语义,导致检索失败。优质切分应保证语义完整,避免表格/图片被拆、段落截断、层级丢失等问题。通过智能切分策略,保持表格整体性、段落连续性,结合Token动态控制,可显著提升RAG系统召回准确率和上下文连贯性。本文提供了从简单到高级的代码实现,适合项目落地和面试展示。
我们讲完了 RAG 的第一步 —— 文档解析。
那一步是让系统“读懂”文件; 而今天要讲的这一步 —— Chunk 切分, 是让系统“记得住”内容。
听起来只是“把文档拆一拆”, 但做不好,RAG 的整个检索链路都会崩。
一、RAG 的切分,不是剪纸,是解构
很多人初学 RAG 的时候会这么想:
“我就按固定字数分块,比如每128个token一块,这样不是最简单?”
确实简单,但后果是灾难性的。 你以为在切文档,实际上在打断语义。
举个例子
原文是这样的:
通过对多个实验场景的分析,我们发现,在同等环境条件下,使用算法A可以将预测准确率从85%提高到90%以上;与算法B相比,算法A的训练时间也更短。
错误切分后:
Chunk1: 通过对多个实验场景的分析,我们发现,在同等环境条件下,Chunk2: 使用算法A可以将预测准确率从85%提高到90%以上;Chunk3: 与算法B相比,算法A的训练时间也更短。
模型一看: “啊?谁是主语?‘算法A’和‘算法B’还认识不?”
这就像把一段话分成三条朋友圈, 自己都看不懂自己在说啥。
再看一个更典型的坏例子👇
表 1:实验结果统计| 序号 | 数据值 | 备注 || 001 | 23.7 | 正常 || 002 | 19.6 | 待观察 || 003 | 30.2 | 波动较大 |
解析后表格被打散, 标题单独成块、表格丢结构、数据成一串数字。
当你问“表1的数据分布如何?”时, RAG 检索压根找不到正确内容。
二、Chunk 切分的核心,是“语义完整”
好的 Chunk 切分,不是机械地定长分割, 而是保证每个块都是完整、有意义的语义单元。
具体要解决四类典型问题:
| 问题类型 | 表现 | 后果 |
|---|---|---|
| 表格/图片被拆开 | 标题和内容脱节 | 模型检索不到关联内容 |
| 段落被截断 | 句子断裂 | 语义丢失 |
| 层级丢失 | 标题与正文混合 | 检索失去上下文 |
| Chunk 超长 | Token 超限 | 模型截断、生成不准 |
这几个问题每一个都足够让整个RAG系统偏离轨道。
三、那怎么做?代码来了👇
我们在项目中,最早使用的是一个简单版本的切分逻辑:
def naive_merge(sections, chunk_token_num=128, delimiter="\n。;!?"): ifnot sections: return [] if isinstance(sections[0], type("")): sections = [(s, "") for s in sections] cks = [""] tk_nums = [0] def add_chunk(t, pos): nonlocal cks, tk_nums tnum = num_tokens_from_string(t) ifnot pos: pos = "" if tnum < 8: pos = "" if tk_nums[-1] > chunk_token_num: if t.find(pos) < 0: t += pos cks.append(t) tk_nums.append(tnum) else: if cks[-1].find(pos) < 0: t += pos cks[-1] += t tk_nums[-1] += tnum for sec, pos in sections: add_chunk(sec, pos) return cks
这个函数的思路很直接: 不断往当前 chunk 里拼文本,超出 token 限制就开新块。
优点: 简单、稳定。
缺点: 不懂语义,也不懂结构。
于是,我们进一步升级成了一个更智能的版本:
def advanced_merge(sections, chunk_token_num=128): normalized_sections = [] for item in sections: if isinstance(item, str): normalized_sections.append((item, "", "text")) elif len(item) == 2: normalized_sections.append((item[0], item[1], "text")) else: normalized_sections.append(item) cks = [""] tk_nums = [0] last_paragraph_id = None def add_chunk(text_str): nonlocal cks, tk_nums tnum = num_tokens_from_string(text_str) cks[-1] += text_str tk_nums[-1] += tnum def new_chunk(text_str): nonlocal cks, tk_nums tnum = num_tokens_from_string(text_str) cks.append(text_str) tk_nums.append(tnum) for text, pos, ctype in normalized_sections: tnum = num_tokens_from_string(text) # 不可拆分类型(表格、图片) if ctype in ("table", "image"): if tnum > chunk_token_num: new_chunk(text) elif tk_nums[-1] + tnum > chunk_token_num: new_chunk(text) else: add_chunk(text) continue # 段落智能合并 paragraph_id = None if"paragraph_id="in pos: paragraph_id = pos.split("paragraph_id=")[-1] is_same_paragraph = (paragraph_id isnotNone) and (paragraph_id == last_paragraph_id) if is_same_paragraph and (tk_nums[-1] + tnum <= chunk_token_num): add_chunk(text) else: if tk_nums[-1] + tnum > chunk_token_num and tk_nums[-1] > 0: new_chunk(text) else: add_chunk(text) last_paragraph_id = paragraph_id return cks
这个版本比 naive_merge 强多了。
它做了三件关键的事:
1、表格 / 图片不拆 直接视为“不可分单元”,保证表格整体性。
2、段落智能合并 同一个段落的内容尽量放在一起,避免句子被拆。
3、Token 动态控制 超出阈值再切,不超就合。
一句话总结:
从“切分文本”变成了“理解结构后再切”。
四、简历上怎么写?
这一块建议一句话写清楚你做了“什么优化”和“带来什么提升”。
简洁写法:
Chunk切分:设计基于Token计数与内容类型的智能切分策略,保障表格/图片整体性与段落连续性,将跨页信息缺失率从30%降至5%。
展开写法(用于面试):
针对表格/图片在跨页断行时易被拆分或丢失的问题,引入基于Token计数的智能切分策略,保证结构化信息完整保留。 实现表格/图片整体保真、标题独立存储、段落语义合并,层级准确率提升至90%,RAG召回精度显著提升。
五、面试时怎么说?
面试官常问:
“为什么在RAG流程中要进行Chunk切分?”
你可以这样答👇
RAG要把长文档拆成可检索的块,否则无法向量化。 但切分不是越细越好,而是要保证语义完整。 我们的策略是结合内容类型和Token限制动态切分:
- 表格、图片保持整体;
- 同段落尽量不拆;
- 超限再新开Chunk; 这样能有效提升召回准确率和上下文连贯性。
再比如:
“如何防止表格和标题被拆开?”
回答可以简洁地说:
在解析阶段我们就打了 chunk_type 标签,切分时检测到表格/图片直接整块保留; 对于表格标题,会自动与后续表格绑定成一组,确保检索时上下文不丢。
这样既体现结构思维,也能让面试官感受到你是“真正做过RAG落地”的人。
六、在工作中怎么落地?
如果你自己在项目里使用这套逻辑,可以这么整合👇
from service.ragflow.rag.nlp import advanced_mergesections = [ ("表1 实验结果统计", "(p1)", "title"), ("| 序号 | 数据值 | 备注 |", "(p1)", "table"), ("001 | 23.7 | 正常", "(p1)", "table"), ("结合上述数据可见,算法A表现稳定。", "(p1)", "text")]chunks = advanced_merge(sections, chunk_token_num=128)
输出的 chunks 就是结构化的、完整的、语义连贯的文本块。 后续送进 Embedding、FAISS/Milvus 向量库即可。
RAG的 Chunk 切分,是整个系统的“脊梁骨”。
它决定了模型的记忆边界,也决定了系统的理解能力。 一句话讲清楚这件事:
RAG不怕答不全,怕答错; 答错的根源,往往藏在“切得太碎”的那一刀上。
Chunk 切分的本质,是在技术约束下的语义重构。
做得越像人读文档,模型就越像人理解世界。
七、如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

2025年大模型应用呈现爆发式增长,根据工信部最新数据:
国内大模型相关岗位缺口达47万
初级工程师平均薪资28K(数据来源:BOSS直聘报告)
70%企业存在"能用模型不会调优"的痛点
真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!
02.大模型 AI 学习和面试资料
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)






第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)