15天学会AI应用开发(二十)使用LangChain实现RAG检索功能 之前的文章《15天学会AI应用开发十三上下文与RAG的阶段性总结》概述了检索RAG知识库的主要步骤现在采用LangChain将其改造为更智能的本地RAG系统。接下来基于LangChain框架与Chroma向量数据库结合离线的文本嵌入模型和大语言模型从零开始搭建本地的RAG检索系统。一、下载RAG需要的离线大模型首先下载离线的大语言模型比如在命令行窗口执行下面命令即可下载国产大模型qwen2:1.5bollama pull qwen2:1.5b接着下载构建向量数据库需要的文本嵌入模型比如在命令行窗口执行下面命令即可下载国产嵌入大模型bge-m3ollama pull bge-m3等待两个大模型下载完毕在命令行窗口执行下面命令即可启动Ollama并加载离线大模型ollama serve二、安装RAG需要的LangChain包使用LangChain实现RAG检索功能用到了多个LangChain包下面分别说明需要安装的LangChain包及其用途。首先在命令行窗口执行下面命令即可安装LangChain及其用到的Ollama插件pip install langchain langchain-core langchain-ollama其次执行下面命令安装Splitters插件用于对文档内容切分文本块pip install langchain-text-splitters再次执行下面命令安装Chroma插件用于让LangChain操作向量数据库Chromapip install langchain-chroma chromadb还要执行下面命令安装LangChain的社区包用于引入PyPDFLoader以便加载PDF文档pip install langchain-community三、编写RAG的检索实现代码基于LangChain与Chroma实现RAG功能的时候主要经过四个步骤解析PDF文档、创建RAG检索器、构建提示词模板、启动RAG链执行问答操作依次说明如下1、解析PDF文档首先准备好待解析的PDF文档比如test.pdf放在python工程目录下接着使用PyPDFLoader加载PDF文档再引入RecursiveCharacterTextSplitter切分文本块。对应的Python代码及其导包语句如下# PDF文档加载 from langchain_community.document_loaders import PyPDFLoader # 文本分割工具 from langchain_text_splitters import RecursiveCharacterTextSplitter # 加载PDF文档 loader PyPDFLoader(./test.pdf) docs loader.load() # 切分文本块 text_splitter RecursiveCharacterTextSplitter( chunk_size500, chunk_overlap80, separators[\n\n, \n, 。, , ] ) split_docs text_splitter.split_documents(docs)2、创建RAG检索器首先使用OllamaEmbeddings加载离线的文本嵌入模型bge-m3接着引入Chroma从文档内容构建向量数据库注意数据库文件保存在persist_directory参数指定的chroma_db目录然后调用数据库实例的as_retriever方法创建RAG检索器该方法的search_kwargs结构可指定最多引用几个文档块。对应的Python代码及其导包语句如下# 文本嵌入模型 from langchain_ollama import OllamaEmbeddings # 向量数据库 from langchain_chroma import Chroma # 引用离线的文本嵌入模型bge-m3 embedding OllamaEmbeddings( modelbge-m3 ) # 从文档内容构建向量数据库数据库文件保存在chroma_db目录 vectordb Chroma.from_documents( documentssplit_docs, embeddingembedding, persist_directory./chroma_db ) # 创建RAG检索器最多引用三个文档块 retriever vectordb.as_retriever( search_kwargs{ k: 3 } )3、构建提示词模板首先编写字符串形式的提示词内容说清楚要让AI做什么事、返回什么样的回答关键要说明上下文来自context字段且用户问题来自question字段。然后调用PromptTemplate的from_template方法从提示词文字构建提示词模板。对应的Python代码及其导包语句如下from langchain_core.prompts import PromptTemplate # 自定义提示词。很重要必须提示context和question这样AI才会有效回答 prompt_template 你是专业文档问答助手只能根据提供的上下文回答问题禁止编造信息。 上下文 {context} 用户问题 {question} 请提供包含主语、谓语、宾语在内的准确、简洁的一句话回答50字以内。 # 从提示词文字构建提示词模板 prompt PromptTemplate.from_template(prompt_template)4、启动RAG链执行问答操作首先使用ChatOllama加载离线的大语言模型qwen2:1.5b接着封装RAG执行链注意输入第三步提示词要求的context和question两个参数其中context字段依次输入第二步的RAG检索器和拼接文档需要的format_docs函数。然后调用RAG执行链的invoke方法根据输入的问题获取RAG检索返回的答案。对应的Python代码及其导包语句如下from langchain_core.runnables import RunnablePassthrough, RunnableLambda from langchain_core.output_parsers import StrOutputParser from langchain_ollama import ChatOllama # 工具函数拼接检索到的多段文档 def format_docs(docs): return \n\n.join(doc.page_content for doc in docs) # 加载离线的大语言模型qwen2:1.5b llm ChatOllama(modelqwen2:1.5b) # 改成你本地的模型 # 构建RAG执行链输入context和question两个参数 rag_chain ( { context: retriever | RunnableLambda(format_docs), question: RunnablePassthrough() } | prompt | llm | StrOutputParser() ) # 令RAG链执行问答操作 query 公共收益是什么 answer rag_chain.invoke(query) print( AI回答 \n, answer)运行上面整合后的Python代码根据提示输入问题内容“公共收益是什么”输出日志结果如下 你的问题 公共收益是什么 AI回答 公共收益是指利用住宅小区业主共有部分以外的共用设施设备开展经营活动而产生的收益。由日志信息发现AI应用能够返回PDF文档中的正确答案。可见引入Chroma向量数据库之后LangChain成功实现了来自PDF文档的RAG知识检索功能。本系列的AI应用开发文章目录为《15天学会AI应用开发全目录零基础小白零Token消耗》。

相关新闻

最新新闻

2026 网安学习资源大盘点,工具书单面试题全都有

2026 网安学习资源大盘点,工具书单面试题全都有

为什么你需要一套系统化的网安学习资源2026 年的网络安全行业早已不是几年前那个“靠几个脚本就能闯天下”的草莽时代。随着数字化转型的深入,企业对安全人才的需求从单纯的“会挖漏洞”变成了“懂体系、能对抗、善应急”。对于正在自学或准备转行的新人来说&#x…

2026/7/24 22:43:29
运维开发想转行,如何利用现有技能快速切入安全圈

运维开发想转行,如何利用现有技能快速切入安全圈

运维与开发背景:你被低估的转行资本很多做运维或者后端开发的朋友,在考虑转行网络安全时,最大的心理障碍往往是“从零开始”。觉得要重新学网络协议、补操作系统原理,甚至担心自己年龄大了拼不过科班出身的年轻人。其实&#xff0…

2026/7/24 22:43:29
Appium 3.x 手势操作实战:clickGesture与dragGesture详解

Appium 3.x 手势操作实战:clickGesture与dragGesture详解

Appium 3.x 实战笔记:mobile 手势标准写法 —— clickGesture / dragGesture 快速上手(适配 Python Client 5.x) 前言 Appium 3.x Appium-Python-Client 5.x 环境下,手势操作统一使用 mobile: 命令,通过 driver.exe…

2026/7/24 22:43:29
Windows键盘重映射终极指南:3分钟免费解决按键失灵问题

Windows键盘重映射终极指南:3分钟免费解决按键失灵问题

Windows键盘重映射终极指南:3分钟免费解决按键失灵问题 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys …

2026/7/24 22:43:29
高效项目管理新选择:GanttProject开源甘特图工具完全指南

高效项目管理新选择:GanttProject开源甘特图工具完全指南

高效项目管理新选择:GanttProject开源甘特图工具完全指南 【免费下载链接】ganttproject Official GanttProject repository. 项目地址: https://gitcode.com/gh_mirrors/ga/ganttproject 想要寻找一款既专业又免费的项目管理工具吗?GanttProject…

2026/7/24 22:43:29
百度网盘下载很慢怎么解决?2026还有突破限速限制的办法吗?

百度网盘下载很慢怎么解决?2026还有突破限速限制的办法吗?

在日常日常使用云端存储进行文件传输时,不少人会发现下载速度未能达到预期。文件传输的效率实际上受到从源端服务器到本地设备整个链路中多个环节的共同影响。以下从技术原理与网络环境角度,分析影响下载表现的主要原因及相应的优化思路。 https://www.…

2026/7/24 22:38:29

月新闻