LangChain RAG | PDF 读取→文本切片→向量入库全流程
本文是基于 LangChain 完整生态搭配主流向量库从零实现 PDF 文档解析、智能文本分割、向量化存储全链路附带可直接运行分段代码 完整工程代码新手复制即可跑通本地知识库。LangChain 核心组件PyPDFLoaderPDF 文件读取解析RecursiveCharacterTextSplitter递归智能文本切片解决段落断裂、语义割裂问题OpenAIEmbeddings/HuggingFaceEmbeddings文本向量化兼顾付费 API 与本地开源模型Chroma轻量本地向量库无需额外部署新手首选拓展生产方案Milvus、FAISS、PGVector、Pinecone底层调用逻辑完全通用仅替换向量库实例即可分步拆解全流程步骤 1加载 PDF 文档使用 LangChain 内置 PDF 加载器自动提取 PDF 全部文字支持多页、图文型 PDF纯文字 PDF 效果最优from langchain_community.document_loaders import PyPDFLoader # 初始化加载器替换为你的PDF文件路径 loader PyPDFLoader(./企业技术手册.pdf) # 读取文档每页生成一个Document对象 pages loader.load() print(fPDF总页数{len(pages)}) print(第一页文本预览) print(pages[0].page_content[:300])步骤 2智能文本切片关键优化点直接整页存入向量库会出现语义混杂、检索精度暴跌采用递归字符分割器设置块大小 重叠区保证上下文不丢失from langchain.text_splitter import RecursiveCharacterTextSplitter # 切片参数配置可根据文档类型调整 text_splitter RecursiveCharacterTextSplitter( chunk_size800, # 单块文本长度 chunk_overlap150, # 块之间重叠文本保留上下文关联 length_functionlen, separators[\n\n, \n, 。, , , ] # 优先按段落、分句切割 ) # 对PDF所有页面文本进行切分 split_docs text_splitter.split_documents(pages) print(f切片后总文本块数量{len(split_docs)}) print(单块切片示例) print(split_docs[0].page_content)步骤 3初始化 Embedding 向量模型云端模型1、OpenAI 接口—国内无法连接废弃from langchain_openai import OpenAIEmbeddings import os # 配置OpenAI密钥 os.environ[OPENAI_API_KEY] 你的OpenAI Key embedding OpenAIEmbeddings(modeltext-embedding-ada-002)2、国内合规大模型厂商 Embedding API百度千帆、阿里通义、腾讯混元、智谱 AI、MiniMax 等全部国内服务器备案合规LangChain 均有对应封装举智谱示例from langchain_zhipuai import ZhipuAIEmbeddings import os os.environ[ZHIPUAI_API_KEY] 国内厂商申请的key embedding ZhipuAIEmbeddings(modelembedding-2)本地模型1、shibing624/text2vec-base-chinese完全离线 ---经典开源 maxKBfrom langchain_community.embeddings import HuggingFaceEmbeddings embedding HuggingFaceEmbeddings( model_nameshibing624/text2vec-base-chinese, model_kwargs{device: cpu}, encode_kwargs{normalize_embeddings: True} )2、bge-base-zh-v1.5部署在内网服务器所有业务机器内网调用from langchain_community.embeddings import OllamaEmbeddings # Ollama部署在内网服务器 192.168.1.100 embedding OllamaEmbeddings( modelbge-base-zh-v1.5, base_urlhttp://192.168.1.100:11434 )关于模型这快会写一个专题专门介绍步骤 4向量存入 Chroma 本地向量库Chroma 零部署自动持久化存储到本地文件夹重启程序向量不丢失from langchain_community.vectorstores import Chroma # 持久化向量库文件夹 persist_dir ./chroma_vector_db # 构建向量库自动完成文本向量化入库 vector_db Chroma.from_documents( documentssplit_docs, embeddingembedding, persist_directorypersist_dir ) # 持久化落地磁盘 vector_db.persist() print(PDF向量数据入库完成) # 加载已存在的向量库下次启动直接调用无需重新解析PDF load_vector_db Chroma(persist_directorypersist_dir, embedding_functionembedding)步骤 5向量相似度检索验证测试检索功能输入问题召回 PDF 中匹配的文本块验证 RAG 基础能力# 创建检索器设置返回top3最相似文本 retriever vector_db.as_retriever(search_kwargs{k: 3}) # 测试查询 query 文档中关于产品售后流程的说明 result_docs retriever.get_relevant_documents(query) print(f检索到匹配文本块数量{len(result_docs)}) for idx, doc in enumerate(result_docs): print(f\n匹配片段{idx1}) print(doc.page_content)完整可运行整合代码# langchain完整RAGPDF读取-切片-向量入库 全流程代码 import os from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma from langchain_community.embeddings import HuggingFaceEmbeddings # 配置区自行修改 PDF_FILE_PATH ./企业技术手册.pdf # 你的PDF路径 VECTOR_STORE_PATH ./chroma_vector_db # 向量库存储目录 USE_LOCAL_EMBEDDING True # True本地模型False OpenAI接口 # def init_embedding(): 初始化向量模型 if USE_LOCAL_EMBEDDING: return HuggingFaceEmbeddings( model_nameall-MiniLM-L6-v2, model_kwargs{device: cpu} ) else: from langchain_openai import OpenAIEmbeddings return OpenAIEmbeddings(modeltext-embedding-ada-002) def load_and_split_pdf(pdf_path): 加载PDF并文本切片 # 1. 读取PDF loader PyPDFLoader(pdf_path) pages loader.load() print(f成功读取PDF总页数{len(pages)}) # 2. 文本分割 splitter RecursiveCharacterTextSplitter( chunk_size800, chunk_overlap150, separators[\n\n, \n, 。, , , ] ) split_docs splitter.split_documents(pages) print(f文本切片完成共生成{len(split_docs)}个文本块) return split_docs def save_to_vector_db(docs, embedding, persist_path): 文本向量化并存入向量库 vector_db Chroma.from_documents( documentsdocs, embeddingembedding, persist_directorypersist_path ) vector_db.persist() print(f向量数据持久化至 {persist_path}入库完成) return vector_db def test_retrieve(vector_db, query): 测试相似度检索 retriever vector_db.as_retriever(search_kwargs{k: 3}) match_docs retriever.get_relevant_documents(query) print(f\n查询问题{query}) print(f检索匹配片段数{len(match_docs)}) for i, doc in enumerate(match_docs): print(f\n【匹配片段{i1}】\n{doc.page_content[:400]}...) if __name__ __main__: # 初始化向量模型 emb_model init_embedding() # 加载并切分PDF doc_chunks load_and_split_pdf(PDF_FILE_PATH) # 存入向量库 db save_to_vector_db(doc_chunks, emb_model, VECTOR_STORE_PATH) # 检索测试 test_retrieve(db, 文档中产品售后流程说明)学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

相关新闻

Unity导入TurtleBot3 URDF模型:ROS机器人仿真与可视化实践

Unity导入TurtleBot3 URDF模型:ROS机器人仿真与可视化实践

1. 项目概述:为什么要在Unity里折腾一个TurtleBot3?如果你同时涉足机器人仿真和虚拟现实/游戏开发,那你肯定对Unity和ROS这两个名字不陌生。Unity是那个能做出《原神》和无数工业仿真应用的强大引擎,而ROS(Robot Opera…

2026/7/22 2:52:13阅读更多 →
CentOS 6.7部署netmap高性能网络方案指南

CentOS 6.7部署netmap高性能网络方案指南

1. 项目背景与需求分析在CentOS 6.7系统上部署netmap是一个典型的旧系统高性能网络方案实施案例。netmap作为高性能网络I/O框架,能绕过传统协议栈直接操作网卡,实现微秒级数据包处理。这个需求通常出现在以下场景:网络安全设备开发需要线速抓…

2026/7/22 2:52:13阅读更多 →
Zephyr学习 - 第二章-1:depends on`与配置文件合并

Zephyr学习 - 第二章-1:depends on`与配置文件合并

02-1:depends on 与配置文件合并 验证方式:源码、生成配置、native_sim/native/64 验证结论:模拟确认 1. 本节目标 理解四个问题: depends on 如何限制 Kconfig symbol;为什么关闭的布尔配置通常不会生成值为 0 的 C 宏…

2026/7/22 2:50:13阅读更多 →
Python字符串拼接性能优化:从+、join到f-string的实战指南

Python字符串拼接性能优化:从+、join到f-string的实战指南

1. 项目概述:为什么字符串拼接值得深究?刚接触Python那会儿,我也觉得字符串拼接不就是加号连一连的事儿吗?直到后来在项目中处理日志、拼接SQL、生成动态配置,甚至是在做性能敏感的数据处理时,才被现实狠狠…

2026/7/22 4:20:25阅读更多 →
Unity与React深度集成:WebView双向通信架构与工程实践

Unity与React深度集成:WebView双向通信架构与工程实践

1. 项目概述:为什么要在Unity WebView里跑React?这个问题乍一听有点“跨界”,一个做游戏和实时3D渲染的引擎,一个做现代Web前端界面的框架,它们俩怎么扯上关系了?但如果你正在开发一个需要复杂UI交互的3D应…

2026/7/22 4:20:25阅读更多 →
从面试翻车到生产落地,吃透长任务Agent的七大工程核心难点

从面试翻车到生产落地,吃透长任务Agent的七大工程核心难点

前段时间一位计算机硕士朋友面试头部AI基础设施公司算法岗,简历上亮眼的“企业级复杂流程Agent系统搭建”项目,本是他的加分王牌,结果被面试官几个直击生产痛点的问题问得全盘失语。 面试官没有追问复杂算法原理、模型微调技巧这些常规考点&a…

2026/7/22 4:20:25阅读更多 →
面试踩坑实录,为什么95%的程序员回答Agent意图识别,刚开口就失去录用机会

面试踩坑实录,为什么95%的程序员回答Agent意图识别,刚开口就失去录用机会

开篇:一场决定岗位去向的面试提问 近几年企业AI智能体岗位面试,有一道必考题反复出现在大厂、中腰部科技公司甚至传统行业数字化团队的笔面试环节,面试官轻描淡写抛出一句,就能快速筛掉绝大多数候选人,这个问题就是Age…

2026/7/22 4:20:25阅读更多 →
Windows LAPS本地管理员密码管理机制与部署实践

Windows LAPS本地管理员密码管理机制与部署实践

1. Windows LAPS 核心机制解析Windows LAPS(Local Administrator Password Solution)是微软针对企业环境中本地管理员账户密码管理难题设计的自动化解决方案。其核心工作原理可分解为三个关键环节:1.1 密码生命周期管理机制LAPS通过组策略客户…

2026/7/22 4:20:25阅读更多 →
PHP容器化部署与WebSocket服务在Kubernetes中的实践

PHP容器化部署与WebSocket服务在Kubernetes中的实践

1. 项目概述在云原生时代,PHP应用的容器化部署一直是个颇具挑战性的任务。最近我在阿里云ACK(Kubernetes)环境中成功部署了一个基于ThinkPHP框架的项目,并实现了WebSocket服务的搭建。整个过程踩了不少坑,也积累了一些…

2026/7/22 4:18:25阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 0:53:59阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 0:53:59阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 0:53:59阅读更多 →
中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业小程序开发公司怎么选:预算、上手和售后避坑指南

中小企业做小程序,最常见的矛盾是预算有限,但又不希望功能太单薄;没有技术团队,但又希望后续能自己运营;想快速上线,又担心隐性收费和售后失联。选型时如果只看“低价套餐”或“案例数量”,很容…

2026/7/22 0:01:17阅读更多 →
GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

GEO优化如何沉淀长期内容资产?广拓时代谈AI搜索时代的内容ROI

企业做营销,最怕钱花完了,资产没有留下。 效果广告能带来一段时间的曝光,但预算停止后,流量往往也随之停止。短视频内容可能在几天内冲高,也可能很快沉下去。AI搜索时代,企业需要重新思考一个问题&#xff…

2026/7/22 0:01:17阅读更多 →
Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复

Agent 终态判定:何时该停止思考、给出最终回复 一、你的 Agent 在"再想想"的循环里绕了 12 轮,用户已经关窗口了 Agent 与人最大的区别是:人知道什么时候该停下来给答案,Agent 会一直"想"下去。你给 Agent 接…

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

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

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

2026/7/21 22:53:50阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

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

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

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

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

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

2026/7/21 18:53:30阅读更多 →