加载(Load) 和 切分(Split)

张开发
2026/4/9 12:24:16 15 分钟阅读

分享文章

加载(Load) 和 切分(Split)
在 LangChain 处理文档的标准化流程中加载Load和切分Split是两个完全独立的长相不同、职责也不同的工具。我们来理清它们的关系1. 搬运工Loader加载器代码里凡是以Loader结尾的比如TextLoader、JSONLoader、CSVLoader以及未来你可能会遇见的PyPDFLoader等等它们的唯一作用就是打开特定格式的文件把里面的内容原封不动地搬到 Python 内存里变成 LangChain 统一规定的Document格式。它们充其量只是个**“格式翻译官”**把各种千奇百怪的文件后缀翻译成系统认得的统一文档对象。它们不关心你的文章有多长更不会用“限制 500 个字、要互相重叠 50 个字”这种规则去粉碎你的文本。2. 绞肉机Splitter切分器/切割器像你前一节学到的RecursiveCharacterTextSplitter这种以Splitter结尾的才是真正的**“切割器”**。它的工作是在 Loader 把文档搬进来之后嫌有些文档太长大模型吃不下所以拿着刀按照字数限制比如 500 字和换行符硬生生把内容劈碎。为什么CSVLoader会给你一种“它在切割”的误觉这是一个极好的问题。这是因为CSV 表格数据天生的结构决定的。当你用TextLoader读取一个三万字的小说.txt文件时它会偷懒直接把三万字塞进一个巨大无比的Document对象里返回给你。这时候如果你不找Splitter来切一刀大模型当场崩溃。但是当你用CSVLoader读取一份有一百行数据的.csv表格时。出于对表格这种结构的尊重CSVLoader在搬运的时候会自动把表格里的每一行当成一个独立的Document提取出来。所以你读取完毕后会瞬间得到一百个相对较短的Document。因为CSVLoader这个**“按行提取”**的自带特技它天然地把一块大文件化整为零了。 如果你的 CSV 每一行数据本来就不长比如存的是员工基本信息它提取出来的每一条Document自然就很短小这个时候你甚至可以直接跳过Splitter切割器环节直接把这100条文档扔进向量数据库里。总结CSVLoader只是加载器。它之所以感觉“切过”是因为它按 CSV 的“行”逐条给你读了出来。如果 CSV 里的某一条单元格里刚好存了一篇一万字的作文那它读出来的那一行依然很长你还是得乖乖请出RecursiveCharacterTextSplitter再剁一遍。

更多文章