LangChain 入门实战(六):企业知识库预处理全流程实战
1. 本章目标企业知识库资料存放在各类文件产品说明书、员工手册、售后规则、技术文档、FAQ。使用大模型加载私有资料两大核心步骤读取文件 → 切分文档学习完成后掌握理解 LangChain Document 对象加载 TXT、Markdown 文件加载文本型 PDF 文件理解长文档切分的必要性使用 RecursiveCharacterTextSplitter合理配置 chunk_size、chunk_overlap保留来源、页码等元数据 metadata实现企业知识库文档预处理完整案例2. 文档处理标准流程plaintextTXT / MD / PDF 文件 ↓ Document Loader文档加载器 ↓ Document 列表 ↓ Text Splitter文本切分器 ↓ 小型 Document 文档块 chunk ↓ Embedding 向量化 → 向量数据库本章范围文件 → Document → 文档块 下一章文档块向量化、存入向量数据库3. 安装依赖bash运行pip install langchain-community langchain-text-splitters pypdf # 清华镜像加速 pip install langchain-community langchain-text-splitters pypdf -i https://pypi.tuna.tsinghua.edu.cn/simple表格依赖作用langchain-community提供各类文档加载器langchain-text-splitters文本切分工具pypdf解析文本型 PDF本章无需调用大模型不会消耗 API 额度4. Document 文档对象LangChain 使用Document统一封装文本数据。两个核心属性page_content文档正文内容metadata元数据字典格式描述数据的数据示例代码01_document_basic.pypython运行from langchain_core.documents import Document document Document( page_content公司所有正式员工每年享有 5 天带薪年假。, metadata{ source: 员工手册.md, category: 考勤制度, } ) print(document.page_content) print(document.metadata)常用元数据字段文件路径、文件名、PDF 页码、文档分类、chunk_id、文本起始位置。作用问答时展示资料来源支持向量库进行条件过滤筛选。5. 文件加载实战5.1 TextLoader 加载 TXT目录结构plaintextchapter06/ ├── data/ │ └── employee_handbook.txt └── 02_load_text.pypython运行from langchain_community.document_loaders import TextLoader loader TextLoader( file_pathdata/employee_handbook.txt, encodingutf-8, ) documents loader.load() print(f文档数量{len(documents)}) print(f文档内容\n{documents[0].page_content}) print(f元数据{documents[0].metadata})重点load()返回Document 列表单个文件同样返回列表encodingutf-8解决 Windows 环境中文乱码5.2 TextLoader 加载 Markdownmd 文件可直接使用 TextLoader03_load_markdown.pypython运行from langchain_community.document_loaders import TextLoader loader TextLoader( file_pathdata/refund_policy.md, encodingutf-8 ) documents loader.load() print(文档数量 str(len(documents))) print(documents[0].page_content) print(documents[0].metadata)5.3 PyPDFLoader 加载 PDF⚠️ 仅支持可复制文字的文本 PDF扫描图片版 PDF 需要 OCR 识别04_load_pdf.pypython运行from langchain_community.document_loaders import PyPDFLoader loader PyPDFLoader( file_pathdata/XX销售有限公司员工守则.pdf ) documents loader.load() print(文档数量 str(len(documents))) PDF 每一页自动生成一个独立 Document for document in documents: print(document.page_content[-20:]) print(document.metadata) print(当前页码, document.metadata[page])注意metadata 中page页码从 0 开始计数6. 为什么需要切分长文档超长文档直接存入向量库存在诸多问题文本长度超出大模型上下文窗口限制全文参与向量化与检索Token 成本高用户仅询问局部信息大量无关文本造成干扰向量相似度检索难以精准定位片段解决方案将大文档切分成多个语义相对独立的小块chunk7. RecursiveCharacterTextSplitter 递归文本切分器中文知识库首选切分器。分隔符优先级[\n\n, \n, 。, , , , , , ]切分逻辑优先按段落切割段落过长则逐级降级依次使用换行、句号、逗号最后强制切割最大限度保证语句完整。核心参数chunk_size单个文档块最大长度默认按字符统计chunk_overlap相邻文档块重叠字符数量重叠作用避免完整语句被一刀切断保留上下文关联重叠不宜过大会产生大量重复文本增加存储压力与重复检索结果。推荐初始参数chunk_size300chunk_overlap50两个核心方法split_text(text)接收普通字符串返回字符串列表丢失元数据仅用于测试split_documents(documents)接收 Document 列表返回 Document 列表保留元数据正式项目使用案例 1切分普通文本 05_split_text.pypython运行from langchain_text_splitters import RecursiveCharacterTextSplitter text 员工考勤制度 工作时间为周一至周五每天 9:00 至 18:00。 员工每月可以申请两次补卡。超过两次后需要部门负责人审批。 员工请假制度 请假一天以内由直属负责人审批。 请假超过一天需要部门负责人审批。 病假需要提供医院开具的有效证明。 员工年假制度 正式员工每年享有 5 天带薪年假。 工作满三年后每年享有 10 天带薪年假。 splitter RecursiveCharacterTextSplitter( chunk_size300, chunk_overlap50, separators[\n\n, \n, 。, , , , , , ] ) chunks splitter.split_text(text) print(len(chunks)) for index, chunk in enumerate(chunks, start1): print(* * 40) print(f第{index}个文件块的内容:) print(chunk)补充enumerate(对象, start1)同时获取序号与内容start 自定义起始编号案例 2切分 Document保留元数据 06_split_documents.pypython运行from langchain_community.document_loaders import PyPDFLoader from langchain_core.documents import Document from langchain_text_splitters import RecursiveCharacterTextSplitter loader PyPDFLoader( file_pathdata/XX销售有限公司员工守则.pdf ) documents loader.load() print(原始文档数量:, len(documents)) splitter RecursiveCharacterTextSplitter( chunk_size200, chunk_overlap30, add_start_indexTrue, separators[\n\n, \n, 。, , , , , , ] ) chunks splitter.split_documents(documents) print(切分后文档数量, len(chunks)) for index, chunk in enumerate(chunks, start1): print(isinstance(chunk, Document)) print(f第{index}文档预览:) print(chunk.page_content[:20]) print(chunk.metadata)add_start_indexTrue自动在元数据中增加文本在原始文档内的起始位置8. 企业综合案例批量知识库预处理需求递归扫描知识库文件夹读取所有文件根据文件后缀自动选择对应加载器txt/md/pdf统一追加自定义元数据批量切分文档产出可直接存入向量库的 chunk前置知识点列表 / 集合 / 字典推导式python运行# 列表推导式 even [i for i in range(1,11) if i%20] # 集合推导式自动去重 set_data {x for x in [1,2,2,3]} # 字典推导式 square_dict {i:i*i for i in range(1,6)}pathlib 文件路径操作rglob(*)递归遍历当前目录 所有子文件夹glob(*)仅遍历当前文件夹不进入子目录.suffix文件后缀.name完整文件名.stem不带后缀文件名append vs extendappend()将对象整体作为 1 个元素加入列表extend()遍历可迭代对象逐个追加内部元素document_processor.py 完整代码python运行from pathlib import Path from langchain_community.document_loaders import TextLoader, PyPDFLoader from langchain_core.documents import Document from langchain_text_splitters import RecursiveCharacterTextSplitter def split_documents(documents: list[Document]) - list[Document]: splitter RecursiveCharacterTextSplitter( chunk_size200, chunk_overlap30, add_start_indexTrue, separators[\n\n, \n, 。, , , , , , ] ) chunks splitter.split_documents(documents) for index, chunk in enumerate(chunks, start1): chunk.metadata[chunk_id] index return chunks def load_knowledge_base(root_dir: Path) - list[Document]: all_documents [] for f in root_dir.rglob(*): if f.is_dir(): continue file_suffix f.suffix.lower() file_path str(f) docs [] if file_suffix in [.txt, .md]: loader TextLoader( file_pathfile_path, encodingutf-8 ) docs loader.load() elif file_suffix .pdf: loader PyPDFLoader(file_pathfile_path) docs loader.load() # 统一追加自定义元数据 for document in docs: document.metadata[file_name] f.name document.metadata[file_type] file_suffix all_documents.extend(docs) return all_documents def main(): kb_path Path(knowledge_base) documents load_knowledge_base(kb_path) print(原始文档数量, len(documents)) chunks split_documents(documents) print(切分后文档块数量, len(chunks)) for chunk in chunks: print(~ * 30) metadata chunk.metadata print(fchunk_id:{metadata[chunk_id]}) print(f来源文件:{metadata[file_name]}) print(f内容预览:{chunk.page_content[:30]}) if name main: main()运行命令bash运行python document_processor.py9. 切分参数选型参考表格文档类型配置思路FAQ 问答文档chunk_size 偏小保证单条问答完整不拆分员工制度、规范文档chunk_size 200 ~ 350产品操作手册块尺寸适当放大避免操作步骤被切断技术文档尽量保留标题和对应正文chunk 偏大调优判断标准语义完整、标题不与正文分离、操作步骤不截断、无大量重复 chunk最终依靠检索效果验证参数。10. 常见问题chunk_size 统计字符还是 token默认按照字符长度len()计算需要精确按 token 切割使用TokenTextSplitter进阶chunk_overlap 设置越大越好不是推荐取值为 chunk_size 的 10% ~ 20%PDF 提取空白、乱码文件为扫描图片 PDF、加密 PDF、特殊字体 PDF本章加载器仅支持原生文本 PDF为什么不能直接把完整文档交给模型超长文本超出上下文限制、token 成本高、检索精准度差RAG 标准流程必须分块load() 和 lazy_load()load()一次性全部加载到内存适合小型知识库lazy_load()迭代器懒加载节省内存适合海量文件场景11. 本章核心总结Document page_content正文 metadata元数据TextLoader 加载 txt/mdPyPDFLoader 加载文本 PDF

相关新闻

七律•诸葛四友(原创诗)

七律•诸葛四友(原创诗)

隆中高卧岁时深,抱膝长颂四友邻。五人畅谈梁父吟,管仲乐毅尤再临。元直至孝为至亲,举荐诸葛三分天。广元才策无人识,孟公雄辩有才略。崔子名门出大能,清谈道语震洛水。卧龙凤雏安天下,诸葛四友亘古今。

2026/7/31 1:45:33阅读更多 →
2026会计毕业论文工具实战评测:避开这些坑,写作效率倍增

2026会计毕业论文工具实战评测:避开这些坑,写作效率倍增

如果你正在被会计毕业论文折磨,深更半夜对着一堆参考文献发愁,这篇评测就是为你准备的。我们花了近两个月,实测了市面上5款主流工具,最终结论很明确:学范文综合表现最稳,笔杆网在文献综述上有点儿东西&…

2026/7/31 1:45:33阅读更多 →
51单片机汇编实现冒泡排序:从底层指令到嵌入式算法优化

51单片机汇编实现冒泡排序:从底层指令到嵌入式算法优化

1. 项目概述:为什么要在51单片机上用汇编实现冒泡排序?看到这个标题,很多朋友可能会觉得有点“复古”甚至“硬核”。都2024年了,C语言在嵌入式领域如日中天,各种高级库和框架层出不穷,谁还会去碰汇编这种底…

2026/7/31 1:45:33阅读更多 →
STM32外设深度解析:从GPIO到通信接口的实战配置指南

STM32外设深度解析:从GPIO到通信接口的实战配置指南

1. 项目概述:为什么我们需要一份超详细的STM32外设教程?如果你刚接触STM32,面对官方动辄上千页的参考手册和库函数手册,是不是感觉无从下手?如果你已经用了一段时间,是不是还在为某个外设的某个特殊模式配置…

2026/7/31 2:48:37阅读更多 →
10大日志分析工具全解析:从ELK到Loki的选型指南

10大日志分析工具全解析:从ELK到Loki的选型指南

1. 日志分析:从“黑盒”到“透视镜”的运维革命在数字系统的日常运维和开发工作中,日志文件就像系统在持续不断地“自言自语”。它记录了每一次用户请求、每一个后台进程的启动与停止、每一次数据库查询的耗时、每一次错误的堆栈信息。然而,面…

2026/7/31 2:48:37阅读更多 →
Python自动化图片与PDF批量处理:从Pillow到OCR的完整方案

Python自动化图片与PDF批量处理:从Pillow到OCR的完整方案

在实际工作中,我们经常会遇到需要批量处理图片或PDF文档的场景。无论是产品图片统一尺寸、添加水印,还是将多个PDF合并、拆分或转换格式,手动操作不仅效率低下,还容易出错。虽然Photoshop等专业工具提供了批量处理功能&#xff0c…

2026/7/31 2:48:37阅读更多 →
AI旅行规划正在淘汰传统攻略:3步打造个性化行程,错过这波效率提升将多花47%时间

AI旅行规划正在淘汰传统攻略:3步打造个性化行程,错过这波效率提升将多花47%时间

更多请点击: https://kaifayun.com 第一章:AI旅行规划正在淘汰传统攻略:3步打造个性化行程,错过这波效率提升将多花47%时间 过去依赖PDF攻略、小红书合集或旅行社模板行程的旅行者,正被AI驱动的动态规划工具快速取代。…

2026/7/31 2:48:37阅读更多 →
通心译:用中文母语,重新看懂现代物理学(完整版)

通心译:用中文母语,重新看懂现代物理学(完整版)

已将你提供的“通心译”正文与“补全内容”合并整理为一份可直接发布到 CSDN 的完整双语长文,全部格式、表格与流程图均已嵌入。 通心译:用中文母语,重新看懂现代物理学(完整版) 通心译原则:中文活着英文也…

2026/7/31 2:48:37阅读更多 →
Android双屏异显开发避坑指南:从Presentation黑屏到生命周期管理

Android双屏异显开发避坑指南:从Presentation黑屏到生命周期管理

1. 从一次真实的双屏适配“翻车”说起那天下午,我正信心满满地准备给客户演示一个刚开发完的Android双屏应用。主屏是手机,辅助屏是一台通过Type-C转HDMI连接的便携显示器。需求很简单:主屏显示操作界面,辅助屏全屏播放视频。我按…

2026/7/31 2:46:37阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/30 15:03:16阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/30 12:22:27阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/30 15:13:02阅读更多 →
物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:40阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:41阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:41阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/31 0:49:33阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/30 4:47:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/30 15:43:46阅读更多 →