很多企业在搭建基于大模型的本地知识库(RAG 架构)时,往往会经历这样的过山车心态:
刚开始立项时信心满满,买好高配置服务器,部署好 Dify 或者本地知识库系统,把公司积攒了数年的产品手册、员工规章、技术文档和销售话术打包成几十个 PDF 和 Word 一股脑传上去。
心想这下好了,员工有不懂的随手一问,大模型就能精准秒回。
可一旦真正投入业务测试,现场往往惨不忍睹:
- 员工提问:“新入职员工病假扣多少工资?”大模型把年假的规定搬出来洋洋洒洒说了一通;
- 客户咨询特定型号的设备参数,大模型硬生生把隔壁老型号的尺寸和最新款的功率拼在了一起,生成出一台“四不像”设备;
- 甚至问一些明确写在手册里的条款,大模型却信誓旦旦地回答:“知识库中未找到相关信息,可能是……”
很多负责人遇到这种情况,第一反应就是觉得“大模型智商不够用”,或者是“选的底座大模型不行”,于是忙着花大价钱升级模型参数、换更贵的显卡。
但实际上,在真实的 RAG 工业落地中,80% 以上的“答非所问”和“模型幻觉”,根本不是大模型本身的锅,而是知识库在第一步处理文档时,文档切块(Chunking)切得稀巴烂。
一、 为什么切块没做好,大模型就会“满嘴跑火车”?
想要弄懂问题出在哪,首先要明白知识库和大模型之间到底是怎么打交道的。
很多新手误以为大模型是把几百页的书整个读进脑子里再回答问题。其实不是,大模型有输入长度限制,而且处理长文本极耗算力。真实的逻辑是:
- 先把书拆成碎纸条(文档切块):把几百页的文档按规则切成一段一段的小碎块;
- 检索相关的碎纸条(语义检索):用户提问时,系统从几十万张纸条里,根据词义匹配挑出最像的 3 到 5 张;
- 递给大模型做总结(问答生成):大模型只看系统塞给它的这几张碎纸条,组织语言回答用户。
明白了这个逻辑,你就知道为什么会“胡言乱语”了:如果喂给大模型的碎纸条本身就是断章取义、残缺不全甚至牛头不对马嘴的,神仙大模型也只能跟着胡说八道。
很多人在搭建系统时,直接使用默认的“机械切分”:比如规定“每 500 个字切一刀”。这种盲目切分会引发三个致命灾难:
| 错误切块方式 | 破坏的语义环境 | 导致的实际翻车后果 |
|---|---|---|
| 机械字数切分 | 刚好切在表格中间,表头在上一块,具体数值被切到了下一块。 | 模型拿到了数字却不知道是什么指标,只能开启“幻觉”硬猜。 |
| 主语上下文剥离 | 标题是《关于A系列产品的售后政策》,下面第三段写“保修期为一年”。 | 这一段被单独切出去后丢失了“A系列产品”这个主语,搜到它就容易张冠李戴。 |
| 切块尺寸极端化 | 切得太碎(几十字),上下文完全丧失;切得太大(两三千字),塞满无用废话稀释了核心信息。 | 太碎导致信息残缺,太大导致关键答案被稀释,检索根本搜不准。 |
二、 做好 RAG 切块必须掌握的 4 个核心法则
要在企业真实落地中让知识库做到指哪打哪,必须在文档入库阶段用专业逻辑去约束它。
1. 结构化切分:按文档的“骨架”切,而不是按字数切
人类写文档是有层级结构的:一级标题、二级标题、小节、正文。每一小节本身就是一个自成一体的语义单元。
- 丢掉纯字数固定切割:不要设置机械的“满 500 字来一刀”。
- 采用 Markdown / 层级标题切分法:在预处理阶段,把 Word 或 PDF 转成结构清晰的 Markdown 格式,让切分算法严格按照
#(大标题)、##(二级标题)、###(三级小节)的边界来切。保证每一个切出来的块,内部都是围绕同一个独立知识点展开的完整段落。
2. 必须设置“重叠窗口(Overlap)”
这是解决“一刀切在逻辑关节上”最有效的大白话操作。
如果切分完全不重叠,前一段话没讲完的半句、转折词(如“但是”、“除非在以下特殊情况下”)一旦刚好被切在断口处,意思就彻底反了。
- 加入 10% ~ 20% 的重叠度:假设每个文本块大小设置为 500 字,那么每两个相邻的切块之间,必须保留 50 到 100 个字的重合区域。
- 这样能保证前一块结尾的逻辑能够自然顺延到下一块的开头,无论系统抓取了哪一块,都不会因为前言不搭后语而理解偏离。
3. 元数据注入与父子文档索引(把主语焊死在块里)
这是很多自建知识库团队最容易忽略、但价值最高的杀手锏。
在很多说明书里,段落本身是省略主语的。比如某段只有一句话:“若指示灯闪红光,请长按电源键5秒重启。”如果这段话被单独切下来存进向量库,谁也不知道这是哪款设备的操作。
解决办法有两个:
- 元数据标签(Metadata)注入:在切出来的每一个文本块开头,强行拼上一行“上下文面包屑”。比如变成:
【产品线:X300系列智能手表 > 常见故障排查】:若指示灯闪红光,请长按电源键5秒重启。大模型一眼看去,主语、系列、场景一清二楚,绝不可能串台。 - 小块检索,大块喂给模型(父子切块):在搜索比对时,用只有 100 字的“小切块”(子文档)去精准对准用户的关键词;一旦命中小切块,系统顺藤摸瓜把包含它的整整 800 字“上下文大段落”(父文档)递给大模型做总结。既保证了检索的命中精度,又保证了大模型看到的上下文足够宽广。
4. 特殊格式特殊对待:表格与代码严禁硬切
很多企业最核心的资产都在 Excel、流程表和产品对比表里。
普通的文本解析器看到表格,会直接把它当成一堆没有标点的长字符串,横向纵向读成一团乱麻。
- 表格类文档绝对不能直接当普通正文切碎;
- 最优做法是在入库前把表格转成 Markdown 表格 或 HTML 结构化表格,并强制保证单张表格作为一个独立块存储;
- 如果表格实在太长,必须跨块切分,则必须在切开的每一块顶部,强制给它补上一行完整的“原始表头”。让大模型看每一行数据时,都能清晰对照每一列到底代表什么。
三、 企业文档入库前的“三步体检流程”
想要从根源上杜绝知识库“胡说八道”,在往系统里大批量上传文件前,先花 10 分钟建立一个简单的清洗规范:
- 先做格式清洗,不传排版垃圾: 把扫描件图片版 PDF 换成文字版;把多余的空白回车、花哨的水印文字、页眉页脚(如“第X页 共Y页”、“保密文件”等无用噪声)清洗掉,避免这些垃圾词污染检索通道。
- 用真实业务刁钻问题做盲测: 不要拿“什么是我们公司”这种宽泛的大词去测。挑 20 个一线客服或售后最常被问到、而且极易混淆的具体业务细节去提问,看系统搜出来的前 3 个文本块到底有没有包含正确答案。
- 反推切块边界与召回设置: 如果测试发现答案明明在文档里但模型说不知道,立刻去系统后台看它检索出来的片段。如果是片段被截断了,调大重叠窗口;如果是主语丢了,去补充标题层级和元数据。
搭知识库就像做菜,大模型充其量是最后翻炒的炒锅,而文档切块就是前期的切菜与备料。如果你把菜叶、烂根混在一起乱砍一通喂进锅里,不管用多么顶级的锅,端出来的也只能是一盘无法下咽的乱炖。把文档切块的边界定准、把上下文的因果链条连稳,你的企业本地知识库才能真正摆脱玩具属性,成为业务一线敢信、能用的硬核智囊。