002:RAG 入门-LangChain 读取文本
002RAG 入门-LangChain 读取文本一、从 RAG 到文本读取为什么需要这一步在构建 RAG检索增强生成系统时第一步往往被低估如何将原始文本数据加载到可处理的格式中。RAG 的核心流程是“检索 → 增强 → 生成”而“检索”的前提是我们需要先把文档拆解成机器能理解的小块。LangChain 作为最流行的 RAG 框架之一提供了丰富的文档加载器Document Loaders帮助我们轻松读取各种格式的文本。想象一个场景你想让 AI 回答关于公司内部政策的问题但政策文档是 PDF 或网页格式。直接让大模型处理原始文件是不现实的——它需要结构化、分段的文本。今天我们就从最简单的文本读取开始一步步掌握 LangChain 的文档加载能力。## 二、基础概念什么是 Document Loader在 LangChain 中Document是核心数据结构包含两个字段-page_content字符串存储实际文本内容-metadata字典存储来源、页码等辅助信息而Document Loader就是负责将不同来源的数据如文本文件、PDF、网页转换为Document对象的工具。LangChain 内置了超过 100 种加载器覆盖了从本地文件到云存储的多种场景。## 三、实战第一段读取纯文本文件让我们从最基础的文件类型开始.txt文件。假设我们有一个名为company_policy.txt的文件内容如下公司假期政策1. 年假员工每年享有15天带薪年假。2. 病假每年12天带薪病假需提供医疗证明。3. 事假每年3天无薪事假需提前申请。### 代码示例 1使用 TextLoader 读取文本python# 首先安装 LangChain 核心库# pip install langchain-communityfrom langchain_community.document_loaders import TextLoader# 步骤1创建 TextLoader 实例指定文件路径# 注意文件路径可以是相对路径或绝对路径loader TextLoader(company_policy.txt, encodingutf-8)# 步骤2调用 load() 方法加载文档# 返回一个 Document 对象的列表即使只有一个文件documents loader.load()# 步骤3查看加载结果print(f文档数量{len(documents)})print(f文档内容预览前100字符\n{documents[0].page_content[:100]})print(f文档元数据{documents[0].metadata})输出示例文档数量1文档内容预览前100字符公司假期政策1. 年假员工每年享有15天带薪年假。2. 病假每年12天带薪病假需提供医疗证明。3. 文档元数据{source: company_policy.txt}关键要点-TextLoader是最简单的加载器适合处理纯文本文件-encoding参数很重要中文文本建议使用utf-8- 元数据自动包含source字段记录文件来源## 四、进阶用法批量读取与路径处理实际项目中我们经常需要处理多个文件。LangChain 提供了DirectoryLoader来批量读取整个目录的文本文件。假设我们有一个docs文件夹包含多个.txt文件。### 代码示例 2使用 DirectoryLoader 批量加载pythonfrom langchain_community.document_loaders import DirectoryLoader# 步骤1创建 DirectoryLoader 实例# 第一个参数目录路径# glob匹配模式这里只加载 .txt 文件# loader_cls指定使用哪种加载器默认 TextLoader# show_progress显示加载进度条适合大量文件loader DirectoryLoader( path./docs, # 文档目录 glob**/*.txt, # 递归匹配所有 .txt 文件 loader_clsTextLoader, # 使用 TextLoader 读取每个文件 show_progressTrue # 显示进度条)# 步骤2加载所有文档documents loader.load()# 步骤3遍历文档查看每个文件的开头for i, doc in enumerate(documents): print(f--- 文档 {i1} ---) print(f来源{doc.metadata[source]}) # 只显示前50个字符 print(f内容预览{doc.page_content[:50]}\n)输出示例--- 文档 1 ---来源docs/meeting_notes.txt内容预览2024年第一季度会议纪要------ 文档 2 ---来源docs/company_policy.txt内容预览公司假期政策1. 年假员工每年享有15天重要参数解析| 参数 | 作用 ||------|------||path| 要扫描的目录 ||glob| 文件匹配模式**表示递归子目录 ||loader_cls| 自定义每个文件使用的加载器 ||show_progress| 是否显示 tqdm 进度条 |## 五、处理大文件懒加载与分块当处理超大文本文件如日志文件或整本书时直接全部加载到内存可能导致溢出。LangChain 提供了懒加载Lazy Loading机制通过lazy_load()方法逐条返回文档。此外阅读文本后通常需要分块Chunking这部分会在后续文章详细讲解但这里先了解概念。### 懒加载示例基于 TextLoaderpython# 对于超大文件使用 lazy_load() 替代 load()loader TextLoader(large_log.txt)# lazy_load() 返回一个迭代器逐个生成 Documentfor chunk in loader.lazy_load(): # 每次只处理一个文档内存友好 process_chunk(chunk) # 假设的处理器 if some_condition: break # 可以提前终止何时使用懒加载- 文件超过 100MB- 需要流式处理- 内存受限的环境如服务器函数## 六、特殊格式CSV 与 JSON 的读取虽然本文聚焦“文本读取”但实际项目中常遇到结构化文本。LangChain 的CSVLoader和JSONLoader能自动解析这些格式。这里简要说明区别| 加载器 | 读取内容 | 典型用途 ||--------|----------|----------||TextLoader| 原始文本 | 纯文本文件 ||CSVLoader| 每行作为独立 Document | 表格数据 ||JSONLoader| 根据 jq 语法提取字段 | API 响应、配置文件 |## 七、常见问题与调试技巧1.编码错误遇到UnicodeDecodeError时尝试修改encoding参数python loader TextLoader(file.txt, encodinggbk) # 中文 Windows 常用2.文件路径问题使用pathlib确保跨平台兼容python from pathlib import Path loader TextLoader(Path(data) / docs / policy.txt)3.元数据自定义可以通过继承加载器来添加自定义元数据python class CustomTextLoader(TextLoader): def load(self): docs super().load() for doc in docs: doc.metadata[custom_field] value return docs## 八、总结文本读取是 RAG 的基石通过本文你学会了- 使用TextLoader读取单个文本文件- 使用DirectoryLoader批量处理目录中的文件- 理解Document对象的结构内容 元数据- 掌握懒加载处理大文件的方法进阶思考文本读取只是 RAG 管线的第一环。下一篇文章我们将学习如何将读取的文本分割成适当大小的块Chunking这是决定检索质量的关键步骤。记住好的开始是成功的一半正确读取文本能避免后续许多调试痛苦。现在打开你的编辑器试着读取几个.txt文件吧如果遇到问题可以检查文件编码和路径是否正确。RAG 的世界从这一行代码开始TextLoader(my_doc.txt).load()。

相关新闻

HackRF One Toolkit — 把频谱扫描、IQ 抓包重放、GPS 模拟装进浏览器的自托管 Web 控制台(开源)

HackRF One Toolkit — 把频谱扫描、IQ 抓包重放、GPS 模拟装进浏览器的自托管 Web 控制台(开源)

[AI 整理声明] 本文基于作者的项目文档与开发实践,由 AI 辅助整理输出,核心内容与数据均来自作者本人。 目录安装设备频谱抓包重放GPS参数档架构注意用 HackRF One 做信号录制或重放的时候,每次都要拼一长串 hackrf_transfer 参数&#xff0c…

2026/10/18 15:00:14 阅读更多 →
基于YOLO与SpringBoot的茶叶病害智能检测系统实践

基于YOLO与SpringBoot的茶叶病害智能检测系统实践

1. 项目背景与核心价值茶叶作为我国重要的经济作物,其生长过程中常受到各类病害威胁。传统人工检测方式存在效率低、主观性强等问题,而基于深度学习的视觉检测技术为解决这一痛点提供了新思路。本项目将YOLO系列最新算法与SpringBoot后端框架结合&#x…

2026/10/15 9:36:20 阅读更多 →
AI安全测试危机:Fable 5封禁与大模型评估挑战

AI安全测试危机:Fable 5封禁与大模型评估挑战

1. 事件背景:Fable 5封禁风波始末 2023年第三季度,AI行业发生了一起标志性事件——知名AI安全研究机构Fable Research突然宣布对旗下第五代模拟测试平台Fable 5实施全面封禁。该平台原本是众多AI公司进行模型安全评估的黄金标准,其封禁直接影…

2026/10/18 14:37:15 阅读更多 →

最新新闻

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分

JsLeakWatcher 报出一批对象,真的是内存泄漏吗:页面缓存、监听器和可达路径怎么分 页面退出后 JsLeakWatcher 报出几十个对象,团队立刻把所有缓存清掉,结果二次进入变慢,告警却仍然存在。工具发现“对象仍可达”&…

2026/10/18 15:00:54 阅读更多 →
Aspose.Slides 25.5 JDK 16 集成指南:License校验与模块化配置

Aspose.Slides 25.5 JDK 16 集成指南:License校验与模块化配置

简介:本资源是面向Java开发者的企业级PowerPoint文档处理解决方案,适用于需在Spring Boot、Servlet等后台架构中实现PPT/PPTX自动化生成、格式转换与深度编辑的中高级开发场景。压缩包共2个文件(1个JAR组件 1个XML许可证)&#x…

2026/10/18 15:00:54 阅读更多 →
2026批量查快递轨迹用什么工具好:从预算成本看,小中大团队各自该花多少钱

2026批量查快递轨迹用什么工具好:从预算成本看,小中大团队各自该花多少钱

先说结论:批量查快递轨迹这件事,预算从48元/天到1288元/年,覆盖了所有规模的团队。关键不是花多少钱,是花的钱能不能对应上你的业务规模。下面用需求对照矩阵,把不同预算档位该匹配什么业务量讲清楚。固乔快递批量查询…

2026/10/18 15:00:54 阅读更多 →
CentOS 8.2 手动编译 libssh 0.9.5 完整指南:独立安装与版本共存

CentOS 8.2 手动编译 libssh 0.9.5 完整指南:独立安装与版本共存

1. 为什么在 CentOS 8.2 上要手动编译 libssh 0.9.5CentOS 8.2 自带的 libssh 版本是 0.9.4,这个版本在功能上其实已经能满足大部分基础场景,比如简单的 SSH 客户端连接、SFTP 文件传输等。但如果你正在做安全审计、渗透测试工具链搭建,或者需…

2026/10/18 15:00:54 阅读更多 →
Linux 开发工具(三) 深入理解编译器: gcc / g++

Linux 开发工具(三) 深入理解编译器: gcc / g++

目录 一. 编译的四个阶段 1.1 预处理 1.1.1 代码示例 1.1.2 命令行宏定义 1.1.3 条件编译的用处 1.2 编译 1.2.1 代码示例 1.3 汇编 1.3.1 代码示例 1.4 链接 1.4.1 代码示例 二. 动态库和静态库 2.1 什么是库 2.2 库文件的命名规则 2.3 动静态库 2.4 动态链接…

2026/10/18 15:00:54 阅读更多 →
对话工具升级为生成式界面引擎:免费开放与交互范式切换

对话工具升级为生成式界面引擎:免费开放与交互范式切换

1. 这次升级到底改了什么:从“对话工具”到“生成式界面引擎”先把结论摆在前面:这次更新的核心不是“模型又聪明了一点”,而是交互范式的切换。过去的对话产品,本质上是一个文本进、文本出的黑盒,你问它答&#xff0c…

2026/10/18 14:59:53 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →