当前位置: 首页 > news >正文

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

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

引言:

哈喽各位 AI 特工!之前咱们的 RAG 只能啃TXT纯文本,像个只会吃白米饭的小朋友~

今天直接进化成饕餮巨兽!PDF、Word、TXT 通吃,批量文档一键入库,打造属于你的企业级私有知识库

保姆级教程 + 完整可跑代码,看完直接写进简历,面试直接封神!

🎯 今日核心任务(人话翻译版)

  1. 万能文件读取器:不管是 PDF、Word、TXT,一键提取文本(告别复制粘贴)

  2. 智能分块大师:告别生硬切文本,中文专属递归分块,语义不断裂

  3. 多文档知识库:100 份文档批量入库,RAG 精准检索不迷路

  4. 双模型适配:通义千问在线版 + 本地 Qwen:7b 全覆盖

🧠 核心概念(一秒听懂,拒绝晦涩)

  1. DocumentLoader:你的万能文件搬运工 LangChain 自带的神器,不用自己写解析代码! 读 PDF:自动提取文字,跳过图片 / 水印 读 Word:直接拿正文,无视格式排版 读 TXT:基础操作,轻松拿捏

  2. TextSplitter:你的金牌切菜师傅 之前生硬切文本会把一句话砍成两半!递归分块:优先按段落→句号→问号分割,保证每一块文本语义完整,RAG 检索精准度直接拉满!

  3. 多文档知识库 把所有文件解析→分块→向量化→存入向量库以后提问,模型自动从所有文档里找答案,真正的私有 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 个文件(测试多格式):

  1. lpr公告.txt(之前的 LPR 利率文案)

  2. 金融知识.pdf(随便一个 PDF 文档)

  3. 贷款政策.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"):loader=TextLoader(file_path,encoding="utf-8")elif file_path.endswith(".pdf"):loader=PyPDFLoader(file_path)elif file_path.endswith(".docx"):loader=Docx2txtLoader(file_path)else:print(f"❌ 不支持的格式:{file_path}")continuedocs=loader.load()documents.extend(docs)print(f"✅ 成功加载:{file_path} | 页数:{len(docs)}")except Exceptionase:print(f"❌ 加载失败 {file_path}:{str(e)}")returndocuments # 加载所有文档 all_docs=load_all_documents(FILE_PATH_LIST)#=====================2.中文专属智能分块=====================text_splitter=RecursiveCharacterTextSplitter(chunk_size=300,# 每块300字符(适合中文阅读) chunk_overlap=50,# 重叠50字符,防止语义断裂 separators=["\n\n","\n","。","!","?"," "]# 中文优先分割符)# 执行分块 split_docs=text_splitter.split_documents(all_docs)print(f"\n🎉 分块完成!总文档块数量:{len(split_docs)}")#=====================3.构建多文档向量库=====================print("\n🔧 正在构建多文档知识库...")embedding=DashScopeEmbeddings(model="text-embedding-v3")vector_db=Chroma.from_documents(documents=split_docs,embedding=embedding,persist_directory=PERSIST_DIRECTORY)vector_db.persist()print("✅ 多文档知识库构建完成!")#=====================4.RAG问答系统=====================# 初始化通义千问大模型 llm=Tongyi(model="qwen-plus",temperature=0.1)# 专业Prompt prompt=""" 你是专业金融AI助手,严格按照参考资料回答,不编造、不胡说。 参考资料:{context}用户问题:{question}"""PROMPT=PromptTemplate(template=prompt,input_variables=["context","question"])# 构建检索链 qa_chain=RetrievalQA.from_chain_type(llm=llm,chain_type="stuff",retriever=vector_db.as_retriever(search_kwargs={"k":3}),chain_type_kwargs={"prompt":PROMPT})#=====================测试提问=====================if__name__=="__main__":question="2026年3月的1年期LPR是多少?"result=qa_chain.run(question)print("\n"+"="*50)print(f"🤖 问题:{question}")print(f"✅ 答案:{result}")print("="*50)

方案 B:本地大模型版(无 API Key,离线可用)

只需要替换模型和 Embedding 部分,其余代码完全一致!

# 替换Embedding为本地模型 from langchain_community.embeddingsimportHuggingFaceEmbeddings embedding=HuggingFaceEmbeddings(model_name="BAAI/bge-small-zh-v1.5",model_kwargs={'device':'cpu'})# 替换LLM为本地Qwen:7b from langchain_community.llmsimportOllama llm=Ollama(model="qwen:7b",temperature=0.1)

✨ 效果演示(直接看成果)

运行日志:

✅ 成功加载:lpr公告.txt|页数:1✅ 成功加载:金融知识.pdf|页数:2✅ 成功加载:贷款政策.docx|页数:1🎉 分块完成!总文档块数量:12🔧 正在构建多文档知识库...✅ 多文档知识库构建完成!==================================================🤖 问题:20263月的1年期LPR是多少? ✅ 答案:20263201年期LPR3.00%==================================================

核心亮点:

  1. 全自动解析:不用手动复制文本,文件丢进去就行

  2. 智能分块:中文语义不断裂,检索精准度拉满

  3. 多文档兼容:100 份文件也能一键入库

  4. 双模型支持:在线 / 本地自由切换


⚠️ 新手避坑指南(99% 的人都踩过)

  1. Word 文件报错:只支持.docx,不支持.doc(老版本 Word)

  2. PDF 乱码:扫描版 PDF 无法解析(只能解析文字版)

  3. 分块太大 / 太小chunk_size300 字符最适合中文,别乱改

  4. 向量库冲突:每次新增文件,必须重新构建向量库


🧠 今日醍醐灌顶总结

今天咱们直接把 RAG 从玩具级升级到生产级

  • 学会了万能文件解析:PDF/Word/TXT 通吃

  • 学会了智能分块:中文专属优化,检索更准

  • 学会了多文档知识库:真正的私有 AI 知识库

这就是企业级 AI Agent 的核心能力!面试、毕设、工作全能用,直接写进简历,含金量拉满!

http://www.jsqmd.com/news/530185/

相关文章:

  • 跨平台键鼠共享:3步实现多设备无缝控制
  • python社区智慧医疗养老系统vue3
  • PolSARpro v6.0 (Biomass Edition)安装指南:从依赖配置到环境搭建
  • 回调函数到底算哪一层的?——嵌入式分层设计里最纠结的问题
  • 动画制作行业变革:HY-Motion推动文生动作商业化落地
  • 基于Matlab的信号处理GUI人机交互探索
  • 小白友好!造相-Z-Image极简部署,无需网络也能玩转AI绘画
  • 鸣潮自动化工具ok-ww深度评测:图像识别驱动的游戏效率革新
  • PP-DocLayoutV3入门指南:Gradio界面各组件功能详解与交互逻辑说明
  • Grafana中文汉化实战:从零打造本土化监控仪表盘
  • 猫抓:突破网页资源限制的全能媒体捕获工具
  • 蒸馏模型到底强在哪?DeepSeek-R1-Distill-Qwen-1.5B实战验证教程
  • Token经济学全景报告 2026
  • QQ音乐加密音频解决方案:qmcdump技术指南
  • MpcVideoRenderer
  • VideoAgentTrek-ScreenFilter一文详解:屏幕内容过滤验证全流程
  • Python代码秒变C语言?Cython实战教程:加密与性能提升全攻略(附避坑指南)
  • 能碳 IBMS 集成平台:打破数据孤岛,实现建筑全维度智能管控
  • Day23:Embedding与向量化保姆级教程!让大模型读懂你的文字
  • Tesseract.js全栈OCR解决方案:从浏览器到服务器的文本识别技术指南
  • ARM Linux64环境下metaRTC编译全攻略:从源码下载到成功运行
  • Qwen3-ForcedAligner-0.6B效果展示:车载导航语音指令→意图识别+时间戳触发响应
  • 2026年贵阳LED庭院灯选购攻略:5步教你考察工厂,避开高价陷阱 - 精选优质企业推荐榜
  • hotspot桩代码
  • 深求·墨鉴(DeepSeek-OCR-2)开源OCR镜像:支持自定义词典的领域适配教程
  • ChatGPT的App开发实战:如何通过API集成提升开发效率
  • Ultra Adware Killer(超级广告杀手)
  • 20252904 2025-2026-2 《网络攻防实践》第2周作业
  • 别再只盯着漏洞扫描了!用这个‘easy溯源’Linux靶机,实战演练应急响应核心三板斧
  • 春联生成模型-中文-base效果验证:与人工撰写春联在传播力指标对比分析