AI Agent文档分块策略:块切得好,RAG就成功了一半
🩺 摘要
块太大精度低,块太小缺上下文。文档分块是RAG里最容易被低估的技术——它决定了LLM能看到什么。
📝 详情
做过RAG的都知道:同样的文档、同样的提问,切块方式不同,答案质量天差地别。
三种分块方式
1. 固定大小(最常用) 每500字一块,重叠50字。简单但粗暴。
2. 语义分块 按段落/标题自然分割。每块是一个完整的意思单元。
3. 递归分块 先按大块切,对长块再递归细分。效果最好。
不同文档的最佳块大小
| 文档类型 | 最佳块大小 | 重叠 |
|---|---|---|
| 技术文档 | 500-800字 | 50-100 |
| 新闻文章 | 300-500字 | 30-50 |
| 对话记录 | 200-300字 | 20-30 |
| 代码仓库 | 按函数分割 | 无 |
总结
没有通用的最佳分块策略。建议三种方式都试试,在你的数据集上测召回率,选最高的。 一般递归分块效果最好但最慢,固定大小最稳定。
实际测试数据
同一份10页的产品文档,三种分块方式的检索效果:
| 方式 | 块数 | 准确率 | 平均检索时间 |
|---|---|---|---|
| 固定500字 | 42块 | 72% | 45ms |
| 按段落 | 38块 | 78% | 52ms |
| 递归(最优) | 35块 | 85% | 68ms |
递归分块虽然慢一点,但准确率高了13个百分点,值得。
实际项目经验
我上一个项目用的就是递归分块。产品文档42页,按章节先分成大块,对超过1000字的章节递归细分。最后35块,检索准确率85%。
对比固定大小500字分块:块数更多(42块),准确率反而更低(72%)。因为固定分块把完整的技术说明段落切断了,检索时只拿到半段话。
推荐做法:先用文档本身的标题结构分块,再对长块递归切。这个策略在大部分数据集上效果最好。
💬 评论 (0)