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消耗》。

相关新闻

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/7/24 19:48:27阅读更多 →
实时语音翻译中的证据驱动术语适应技术解析

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

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

2026/7/24 19:48:27阅读更多 →
LoRA微调技术解析:轻量化适配大模型的黄金法则

LoRA微调技术解析:轻量化适配大模型的黄金法则

1. LoRA微调技术解析:轻量化适配大模型的黄金法则在自然语言处理领域,微调预训练大语言模型(LLM)一直是提升模型特定任务表现的核心手段。但传统全参数微调方法面临显存占用高、计算资源消耗大等痛点,尤其当模型参数规…

2026/7/24 19:46:27阅读更多 →
Transformer架构详解:革命性深度学习架构的原理与应用

Transformer架构详解:革命性深度学习架构的原理与应用

引言:从RNN到Transformer的范式迁移在 Transformer 出现之前,处理序列数据(如文本、时间序列)的主力是循环神经网络(RNN)及其变体(如LSTM、GRU)。RNN 通过循环连接按时间步顺序处理数…

2026/7/24 21:20:45阅读更多 →
Git团队协作——分支策略、冲突解决和Code Review流程

Git团队协作——分支策略、冲突解决和Code Review流程

一个人写代码,Git随便用都行。但几个人一起写机器人项目,没有规范就乱套了。 我之前实习的时候,团队里三个人同时往develop分支上push代码,有一天直接push冲突了,谁也不敢force push,最后三个人坐在工位上…

2026/7/24 21:20:45阅读更多 →
OS进程管理

OS进程管理

目录 进程是什么 进程的创建 linux下进程的状态 进程状态转换的本质 进程优先级 进程切换 进程调度 进程地址空间(虚拟地址空间) 环境变量 命令行参数(shell指令的本质) 本地变量 linux的命令行关于环境变量和本地变量…

2026/7/24 21:20:45阅读更多 →
【无标题】sqli-labs通关教程

【无标题】sqli-labs通关教程

第一关1.判断注入类型?id1 and 12 -- //不显示用户名 ?id1 and 12 -- //正常显示用户名 //所以第一关是字符型12生效则为字符型注入2.order by 判断行数?id1 order by 3 -- //正常显示 ?id1 order by 4 -- //报错 //所以user表是3列3,判断回显位置位置?…

2026/7/24 21:20:45阅读更多 →
【Python 虚拟环境 venv 创建与管理】

【Python 虚拟环境 venv 创建与管理】

文章目录Python 虚拟环境 venv 创建与管理 🐍什么是虚拟环境? 🤔创建虚拟环境 🛠️激活虚拟环境 ⚡在 Windows 上激活在 Unix/macOS 上激活管理依赖 📦安装包安装特定版本升级包卸载包生成需求文件虚拟环境工作流程示例…

2026/7/24 21:20:45阅读更多 →
融云:AI 客服越努力,用户越想找人工?

融云:AI 客服越努力,用户越想找人工?

只要跟任何一个智能客服对线过,相信你都能懂那种深深的无力感。不管面对什么情况,对面那个机械重复预制台词的智能客服轻轻松松就能毁掉我们的耐心。关键是,你已经忍无可忍了,它依然死板地绕着圈子且始终情绪稳定。这就是大部分智…

2026/7/24 21:18:44阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →