尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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消耗》。
RELATED

相关推荐

3D LUT Color Conversion之查找表索引解析

3D LUT Color Conversion之查找表索引解析

目录 1 硬件基础规格定义 1.1 维度标准化定义 1.2 多维网格转一维索引通用数学公式 2 公式分项物理含义拆解 2.1 第一项 R:R 轴最小粒度偏移 2.2 第二项 9G:G 轴单行跨度权重 2.3 第三项 81B:B 轴整层 RG 平面跨度权重 3 四面体顶点偏…

📅 2026/8/22 16:44:50
实时语音翻译中的证据驱动术语适应技术解析

实时语音翻译中的证据驱动术语适应技术解析

在实时语音翻译(Simultaneous Speech Translation, SimulST)系统中,术语一致性是影响专业领域翻译质量的关键因素。当翻译涉及医疗、法律、技术等专业内容时,同一个术语在原文和译文中的表达必须严格对应,否则会引发歧…

📅 2026/9/14 11:35:38
【路径规划】基于麻雀算法改进粒子群求解栅格路径规划及避障matlab代码

【路径规划】基于麻雀算法改进粒子群求解栅格路径规划及避障matlab代码

1 简介为了提高复杂环境下移动机器人的精准导航作用,提出了移动机器人路径规划的改进粒子群优化(PSO)算法,即利用麻雀算法改进粒子群算法,建立了移动机器人工作环境的栅格模型,利用Matlab软件进行移动机器人路径规划仿真分析.仿真结果表明:改进后的粒子群算法容易使…

📅 2026/8/22 16:44:51
MORE NEWS

更多资讯

📰

OpenClaw智能体平台腾讯云ADP一键部署实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

彻底清除流氓软件全攻略:卸载残留与权限问题一网打尽

“流氓软件”这四个字,经历过的人应该都有心理阴影。最常见的一幕是:你在控制面板里点了卸载,过两天它自己又回来了,桌面多了一堆图标,浏览器主页被改掉,开机后右下角弹窗一茬接一茬。还有更气人的&#xf…

📰

LifeOS Fabric extract_predictions 模式解析:从任意内容中系统化抽取预测、置信度与验证方法

LifeOS Fabric extract_predictions 模式解析:从任意内容中系统化抽取预测、置信度与验证方法 【免费下载链接】LifeOS ⛰️ The Life Operating System — an intent engineering platform that moves you from your current state to your ideal state, in life a…

📰

MacBook自带软件哪些能删?彻底清理系统释放磁盘空间的手册

1. 先搞清楚:MacBook自带软件,到底哪些能删,哪些不能删我刚拿到MacBook的前两周,Dock栏里躺着“地图”“股市”“播客”“家庭”这一排我永远点不到的App,越看越别扭。然后我打开“启动台”翻了翻,发现还有…

📰

WSL2下CSAPP实验环境配置指南:彻底解决32位编译难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

360°视频编码测试条件与参考配置全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬