乐于分享
好东西不私藏

RAG第一步,不是选模型,而是把文档切对

RAG第一步,不是选模型,而是把文档切对

上一篇聊了一个现象:你的前提错了,AI不会反驳,反而会顺着你往下圆。因为它没有事实依据,只能讨好你的倾向

怎么治?让AI基于证据回答。这就是RAG。

但很多团队上了RAG,AI照样翻车。问你自家年假政策,它给你背劳动法。资料明明在里面,它没找到。

问题出在哪?RAG的第一步:文档切块

这一步没做好,后面调模型、写Prompt都是白费。

为什么不直接把整本PDF丢进去?

两个原因。

第一,检索靠的是“小块”,不是整本。

RAG的工作方式:先把文档切成小块,每块转成向量。你的问题也转成向量,然后去小块堆里找最相似的。

如果不切,整本手册变成一个向量,只能代表“平均意思”。你问“年假”,它找到的是那个不痛不痒的“平均”。

第二,块太大,噪音太多。

假设你切2000字的大块。用户问“年假”,检索回来的块里有200字讲年假,其余1800字讲加班、病假、产假。

你把1800字噪音塞给模型,它很容易跑偏。

💡核心结论切块不是为了限制长度,是为了提高检索精度。

切块多大?500字是答案

用一段真实手册举例(约400字):

“年假政策:入职满3个月即可申请。工龄不满1年的,按月折算,每月0.5天。工龄1-3年的,每年5天……”

不同大小的效果:

切块大小
效果表现
状态评估
200字
信息被切断,AI拼不完整
❌ 不可用             
500字
完整准确,最佳选择
✅ 强烈推荐
1000字
混入其他主题,偶尔跑题
⚠️ 勉强可用
2000字      
关键信息被淹没,基本不可用
❌ 废弃

500字适合90%的业务文档。结构极其规整的(如法律条文)可放宽到800字,但超过1000字,准确率明显下降。

还有个容易被忽略的参数:重叠

假设你的第500字恰好在“员工可申请”和“每年三次”中间。切完后:

块A结尾:“员工可申请”

块B开头:“每年三次年假”

用户问:“最多几次?”两块都找不到完整信息。

解决方案:让相邻的块有重叠。

块A:第1-500字

块B:第450-950字(重叠50字)

这样块B里也包含了“员工可申请”,信息就连贯了。

📌重叠推荐设置:

普通文档只需要10%-15%的轻重叠,就能保证上下文不断裂。

像法律、合同这类文本,一旦切碎关键条款就会理解错误,所以要提高到15%-20%。

代码和列表本身有天然边界,强行重叠只会引入噪音,按行切反而最稳定。

一套参数 + 一个实验

直接给参数表:

参数
推荐值
切块大小
500字
重叠大小
50-100字
Top-K(召回块数)
3-5
相似度阈值
0.7
Embedding模型(中文)
BAAI/bge-large-zh-v1.5

实验告诉你切块有多重要:

配置方案
准确率
500字 + 重叠50字 + 免费BGE模型
    87%
1500字 + 无重叠 + OpenAI最新模型
    62%

切块和重叠带来的提升,远大于升级模型。先花一小时把文档切好,比纠结用哪个大模型实在得多。

落地检查清单

上线前,过这6条:

☑️ 文档切成400-600字的小块

☑️ 相邻块设50字以上的重叠

☑️ 去除页眉页脚、特殊符号

☑️ 相似度阈值 ≥0.7

☑️ Top-K = 3-5

☑️ Prompt明确:“严格基于资料,没有就说不知道”

缺任何一条,你的RAG都还在“猜”而非“查”。

写在最后

上一篇聊了AI为什么太会顺着你说。

这一篇给出了具体的起点:把文档切对。

切块和重叠,听起来基础,但正是这些细节决定了RAG是“能干活”还是“看热闹”。

下一篇,聊一个更深入的问题:资料之间互相矛盾时,AI怎么判断?

欢迎关注我,一个被KPI要求做AI工具、帮别人提效30%的打工人!👇👇👇