【大模型实战 2】文档解析实战:PDF/Word/Markdown 怎么切分?
上回说到
RAG 就像给大模型“开卷考试”。但你总不能把一本 500 页的厚书直接塞给它吧?
模型有“胃口限制”(上下文窗口),而且书太厚它也找不到重点。所以,切分(Chunking) 成了我们要过的第一关。
✂️ 为什么要切分?直接扔不行吗?
有些朋友可能会说:“现在的模型上下文窗口都 128K、200K 了,一本书都能装下,直接喂不行吗?”
理论上行,但实际上有两个大问题:
问题一:大海捞针综合征
你把一本《员工手册》塞进去,然后问:“年假怎么休?”
虽然答案在书里,但模型可能会在几百页的信息里迷失方向。
这就好比让你在几千页的文档里找一句话,你也会眼花。
RAG 的核心是“检索”。只有把书拆成一张张“卡片”,检索系统才能快速把相关的卡片挑出来给模型看。
问题二:钱包受不了
现在的 API 模型大多是按 Token 计费的。
如果你每次提问都把整本书发给模型,哪怕只回答一句“是的”,你也要为整本书的输入买单。
切分后:只把最相关的 3-4 段话(几百个 Token)发给模型,成本直接降低 99%。
🧱 怎么切才科学?
切分不是随便拿把刀乱砍,切得太碎,上下文断了;切得太粗,检索又不准。
这里介绍三种最常用的切分策略,难度递增,效果也递增。
策略一:傻瓜切法 —— 固定长度(Fixed Size)
这是最简单粗暴的方法。
规定好每块 500 个字,从头开始切。
第 1-500 字是一块,第 501-1000 字是一块……
[1..............................500] -> 块 1
[501............................1000] -> 块 2
缺点:
极其容易把一个完整的句子切断,甚至把一个词切断。
比如:“鲁迅原名周……"(第 500 字)"树人”(第 501 字)。
模型看到这种被拦腰斩断的碎片,理解能力再强也得懵圈。
结论:除非赶时间做 Demo,否则别用。
策略二:聪明切法 —— 递归字符切分(Recursive Character)
这是目前业界最通用、性价比最高的方案。
它的逻辑很像我们阅读时的断句习惯:
-
1. 先试着按 段落(换行符 /n/n) 切。如果一段没超过长度,就是一块。
-
2. 如果一段太长,就按 句子(句号) 切。
-
3. 如果一句还长,就按 逗号、空格 切。
-
4. 最后实在不行,再按单个字符切。
核心优势:尽量保留完整的句子和段落结构,让每一块读起来都是通顺的。
策略三:专家切法 —— 按标题结构切分(Header/Markdown)
这是针对 Markdown 或 HTML 文档的“高级玩法”。
Markdown 里有 # 标题、## 二级标题。
这种切分法会识别标题,按章节切分。
比如:
- 块 1:
## 考勤制度+ 下面的内容 - 块 2:
## 报销流程+ 下面的内容
最强优势:每一块都自带“上下文标题”。检索时,模型不仅知道内容,还知道这段内容属于哪个章节,准确率大幅提升。
🛠️ 代码实战:Python 怎么写?
咱们用目前最流行的 LangChain 框架来演示。
不用自己造轮子,现成的工具非常强大。
准备工作
先装个库:
pip install langchain-text-splitters
场景一:普通文本(递归切分)
假设你有一篇很长的文章,或者从 PDF 提取出来的纯文本:
from langchain_text_splitters import RecursiveCharacterTextSplitter
text = """
这是第一段。很长很长,讲了 RAG 的原理。
RAG 分为检索和生成两个阶段。
检索阶段负责找数据。
这是第二段。讲了向量化。
向量就是把文字变成数字。
...(此处省略一万字)
"""
# 初始化切分器
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=300, # 每块大约 300 个字符
chunk_overlap=50, # 重叠 50 个字符
separators=["/n/n", "/n", "。", ",", " ", ""] # 切分优先级
)
# 执行切分
docs = text_splitter.create_documents([text])
# 查看结果
for i, doc in enumerate(docs):
print(f"--- 块 {i+1} ---")
print(doc.page_content)
print()
💡 重点解释:chunk_overlap 是什么?
它的意思是,切下一块的时候,保留上一块末尾的 50 个字。
这就像翻书时的“书签”,防止关键信息刚好被切在边界上,导致上下文丢失。一般设 chunk_size 的 10%-20% 就行。
场景二:Markdown 文档(按标题切分)
如果你的文档是结构良好的 Markdown(比如 Notion 导出、技术文档):
from langchain_text_splitters import MarkdownHeaderTextSplitter
markdown_text = """
# 员工手册
## 第一章 考勤
员工需按时打卡。迟到扣款。
## 第二章 报销
报销需贴发票。每月 15 号截止。
"""
# 定义要识别的标题层级
headers_to_split_on = [
("#", "Header 1"),
("##", "Header 2"),
]
text_splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on)
docs = text_splitter.create_text(markdown_text)
for i, doc in enumerate(docs):
print(f"--- 块 {i+1} ---")
# metadata 里存了标题信息!
print(f"来源:{doc.metadata}")
print(f"内容:{doc.page_content}")
输出结果长这样:
来源:{'Header 1': '员工手册', 'Header 2': '第一章 考勤'}
内容:员工需按时打卡。迟到扣款。
看!切出来的块不仅内容完整,还自带标题元数据。
以后检索的时候,你可以明确告诉模型:“这段话出自《员工手册》的《考勤》章节”,模型回答起来会精准得多。
💣 避坑指南:PDF 里的表格怎么办?
这是 RAG 界公认的世界级难题。
PDF 本质上是“打印排版格式”,不是“文本结构”。
在 PDF 里,表格往往是一堆定位坐标上的文字块。
解析出来经常变成这样:
姓名 部门 职位
张三 技术部 工程师
李四 人事部 专员
变成:
姓名 部门 职位 张三 技术部 工程师 李四 人事部 专员
一旦顺序乱了,语义就全毁了。
解决办法有三招:
-
1. 表格单独提取:使用专门的库(如
pdfplumber或camelot)把表格还原成 CSV/Excel,单独处理。 -
2. 多模态模型:把表格截图,直接发给支持视觉的模型(如 GPT-4o、Qwen-VL),让它读懂图片。
-
3. HTML 中间格式:有些高级解析器(如 Unstructured、Marker)能先把 PDF 转成带表格标签的 HTML,然后再切分。
我的建议:
新手阶段,先避开 PDF 表格。从结构清晰的 Markdown、Word、TXT 文档入手。
搞定这些,你就跑通了 80% 的流程。
📝 总结一下
文档切分,是 RAG 的地基。地基打不好,后面检索再牛也是白搭。
- 普通文本:用
RecursiveCharacterTextSplitter,按标点符号递归切。 - Markdown/HTML:用
MarkdownHeaderTextSplitter,按章节标题切,保留元数据。 - 重叠(Overlap):一定要加,防止上下文断裂。
- PDF 表格:是个坑,新手绕道走,或者单独提取。
切分好的小块,下一步该去哪?
没错,它们要变成“数字”,住进数据库里。
下一篇,咱们聊聊 向量数据库选型:Chroma / Milvus / FAISS 到底用哪个?
这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!
👇👇扫码免费领取全部内容👇👇
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 2026行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份
不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:
👇👇扫码免费领取全部内容👇👇
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)