Day22:RAG 王炸进阶!多格式文档 (PDF_Word)+ 多文档知识库搭建

张开发
2026/5/2 23:59:03 15 分钟阅读

分享文章

Day22:RAG 王炸进阶!多格式文档 (PDF_Word)+ 多文档知识库搭建
Day22RAG 王炸进阶多格式文档 (PDF/Word) 多文档知识库搭建引言哈喽各位 AI 特工之前咱们的 RAG 只能啃TXT纯文本像个只会吃白米饭的小朋友今天直接进化成饕餮巨兽PDF、Word、TXT 通吃批量文档一键入库打造属于你的企业级私有知识库保姆级教程 完整可跑代码看完直接写进简历面试直接封神 今日核心任务人话翻译版万能文件读取器不管是 PDF、Word、TXT一键提取文本告别复制粘贴智能分块大师告别生硬切文本中文专属递归分块语义不断裂多文档知识库100 份文档批量入库RAG 精准检索不迷路双模型适配通义千问在线版 本地 Qwen:7b 全覆盖 核心概念一秒听懂拒绝晦涩DocumentLoader你的万能文件搬运工 LangChain 自带的神器不用自己写解析代码 读 PDF自动提取文字跳过图片 / 水印 读 Word直接拿正文无视格式排版 读 TXT基础操作轻松拿捏TextSplitter你的金牌切菜师傅 之前生硬切文本会把一句话砍成两半递归分块优先按段落→句号→问号分割保证每一块文本语义完整RAG 检索精准度直接拉满多文档知识库 把所有文件解析→分块→向量化→存入向量库以后提问模型自动从所有文档里找答案真正的私有 AI 助手️ 环境一键安装复制即跑打开终端执行命令所有依赖一次性搞定# 核心依赖多格式解析向量库模型对接 pip install langchain langchain-community langchain-core pypdf python-docx chromadb dashscope-i https://pypi.tuna.tsinghua.edu.cn/simple/pypdf解析 PDF 文件python-docx解析 Word 文件其余都是咱们老朋友啦 第一步准备测试文件在项目文件夹新建 3 个文件测试多格式lpr公告.txt之前的 LPR 利率文案金融知识.pdf随便一个 PDF 文档贷款政策.docx随便一个 Word 文档 实战核心代码完整版直接复制方案 A通义千问在线版推荐新手无本地模型压力RAG多格式文档多文档知识库搭建|通义千问版 支持TXT/PDF/DOCX全格式解析importos from langchain_community.document_loadersimportTextLoader,PyPDFLoader,Docx2txtLoader from langchain.text_splitterimportRecursiveCharacterTextSplitter from langchain_community.vectorstoresimportChroma from langchain_community.embeddingsimportDashScopeEmbeddings from langchain_community.llmsimportTongyi from langchain.chainsimportRetrievalQA from langchain.promptsimportPromptTemplate #配置区# 通义千问APIKey os.environ[DASHSCOPE_API_KEY]你的通义千问API Key# 向量库存储路径PERSIST_DIRECTORY./multi_doc_db# 支持的文件格式FILE_PATH_LIST[lpr公告.txt,金融知识.pdf,贷款政策.docx]#1.多格式文档批量加载defload_all_documents(file_list):批量加载TXT/PDF/DOCX文件documents[]forfile_pathinfile_list:try:# 根据后缀自动选择加载器iffile_path.endswith(.txt):loaderTextLoader(file_path,encodingutf-8)elif file_path.endswith(.pdf):loaderPyPDFLoader(file_path)elif file_path.endswith(.docx):loaderDocx2txtLoader(file_path)else:print(f❌ 不支持的格式{file_path})continuedocsloader.load()documents.extend(docs)print(f✅ 成功加载{file_path} | 页数{len(docs)})except Exceptionase:print(f❌ 加载失败 {file_path}{str(e)})returndocuments # 加载所有文档 all_docsload_all_documents(FILE_PATH_LIST)#2.中文专属智能分块text_splitterRecursiveCharacterTextSplitter(chunk_size300,# 每块300字符适合中文阅读 chunk_overlap50,# 重叠50字符防止语义断裂 separators[\n\n,\n,。,,, ]# 中文优先分割符)# 执行分块 split_docstext_splitter.split_documents(all_docs)print(f\n 分块完成总文档块数量{len(split_docs)})#3.构建多文档向量库print(\n 正在构建多文档知识库...)embeddingDashScopeEmbeddings(modeltext-embedding-v3)vector_dbChroma.from_documents(documentssplit_docs,embeddingembedding,persist_directoryPERSIST_DIRECTORY)vector_db.persist()print(✅ 多文档知识库构建完成)#4.RAG问答系统# 初始化通义千问大模型 llmTongyi(modelqwen-plus,temperature0.1)# 专业Prompt prompt 你是专业金融AI助手严格按照参考资料回答不编造、不胡说。 参考资料{context}用户问题{question}PROMPTPromptTemplate(templateprompt,input_variables[context,question])# 构建检索链 qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,retrievervector_db.as_retriever(search_kwargs{k:3}),chain_type_kwargs{prompt:PROMPT})#测试提问if__name____main__:question2026年3月的1年期LPR是多少resultqa_chain.run(question)print(\n*50)print(f 问题{question})print(f✅ 答案{result})print(*50)方案 B本地大模型版无 API Key离线可用只需要替换模型和 Embedding 部分其余代码完全一致# 替换Embedding为本地模型 from langchain_community.embeddingsimportHuggingFaceEmbeddings embeddingHuggingFaceEmbeddings(model_nameBAAI/bge-small-zh-v1.5,model_kwargs{device:cpu})# 替换LLM为本地Qwen:7b from langchain_community.llmsimportOllama llmOllama(modelqwen:7b,temperature0.1)✨ 效果演示直接看成果运行日志✅ 成功加载lpr公告.txt|页数1✅ 成功加载金融知识.pdf|页数2✅ 成功加载贷款政策.docx|页数1 分块完成总文档块数量12 正在构建多文档知识库...✅ 多文档知识库构建完成 问题2026年3月的1年期LPR是多少 ✅ 答案2026年3月20日1年期LPR为3.00%核心亮点全自动解析不用手动复制文本文件丢进去就行智能分块中文语义不断裂检索精准度拉满多文档兼容100 份文件也能一键入库双模型支持在线 / 本地自由切换⚠️ 新手避坑指南99% 的人都踩过Word 文件报错只支持.docx不支持.doc老版本 WordPDF 乱码扫描版 PDF 无法解析只能解析文字版分块太大 / 太小chunk_size300 字符最适合中文别乱改向量库冲突每次新增文件必须重新构建向量库 今日醍醐灌顶总结今天咱们直接把 RAG 从玩具级升级到生产级学会了万能文件解析PDF/Word/TXT 通吃学会了智能分块中文专属优化检索更准学会了多文档知识库真正的私有 AI 知识库这就是企业级 AI Agent 的核心能力面试、毕设、工作全能用直接写进简历含金量拉满

更多文章