LangChain RAG | PDF 读取→文本切片→向量入库全流程

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%免费】