做一个有温度和有干货的技术分享作者 —— Qborfy
前面几篇学习LangChain,基本上完成对 LangChain从开发到上线有一个整体的了解,那么接下来我们就要开始实战了,我们将会使用LangChain开发一个问答机器人,这个问答机器人将会使用到RAG模型,那么接下来我们开始学习RAG。
RAG是什么
RAG是一种用额外数据增强大模型知识的技术,俗称“RAG”(Retrieval-Augmented Generation),中文叫检索增强生成。
RAG是LangChain中一个重要的应用场景,它能够将检索和生成结合起来,从而生成更加精准的答案。
RAG模型由两个部分组成:Retriever和Generator。
Generator
生成索引向量,根据文档中问题和答案生成索引向量数据库。Retriever
检索对比类似,根据用户的问题,从生成的知识库中检索召回最相关的问题和答案。
RAG技术是通过检索和生成相结合的方式找最相关的知识内容, 加入到大模型的提示语中,通过大模型推理得到用户问题在知识库中最合适的答案。
下面是我个人依据网上相关资料整理的通用RAG模型架构图:
生成向量索引(Indexing)
生成向量索引有三个步骤,分别如下:
- 加载(load),加载所需数据,LangChain中提供各种加载器,如:PDFLoader、TextLoader、ImageLoader等。
- 分割(Split),将加载的数据进行分割成一个个块,LangChain中提供各种分割器,如:TextSplitter、ImageSplitter等。
- 存储(Store),得到分割的Chunks,需要将Chunk转成向量索引并存储,这里我们会依赖
Embeddings
模型进行生成索引,然后存储到向量数据库VectorStore
。
Embeddings嵌入模型
RAG模型使用Embeddings
模型将问题和答案进行编码,生成向量数据,这里我们必不可免需要对Embeddings
模型进行初步了解。
Embeddings模型,也叫嵌入模型,是一种将高维度的数据,如:自然语言、图片、视频等,转换成低维度的向量数据,如:多维矩阵数组等,方便后续进行相似度对比。
或者我们可以更加直观的理解,Embeddings
模型可以把我们人类能够理解的内容,转换成计算机能够计算理解的数据,从而实现更多的算法对比逻辑。
检索和生成
- 检索:通过用户输入的内容,使用检索器将内容转换为向量,然后从向量数据库中检索最相关的向量数据。
- 生成:通过检索器检索到的向量数据,使用生成器生成新的向量数据,然后存储到向量数据库中。
这两个步骤一般都是同时进行,一般也是 通过Embeddings嵌入模型去转换搜索内容为向量,然后通过检索到最后生成内容。
实战:做一个问答机器人
实现过程
- 用户上传问题知识内容上传文件
- 服务端对上传文件进行解析,拆分chunk
- 将 chunk 传给 Embeddings模型,生成向量索引
- 将 向量索引存储到向量数据库中
- 用户输入问题,通过检索器检索到最相关的向量数据
- 然后将最相关向量数据传给对话大模型,组织推理得到答案,返回给用户
准备工作
Ollama安装模型:
1 | 对话大模型 |
LangChain和 Streamlit安装
1 | # python环境 3.12.4 |
requirements.txt
文件内容如下:
1 | streamlit==1.39.0 |
streamlit是构建和共享数据应用程序的更快方法, 几分钟内将您的数据脚本转换为可共享的网络应用程序,全部采用纯 Python 编写,无需前端经验。
官方文档:https://docs.streamlit.io/get-started/installation
代码实现
新建一个文件bot_chat.py
, 分步骤实现。
1. stremlit页面搭建
代码参考如下:
1 | import streamlit as st |
执行效果如下:
2. 解析文档并生成知识库检索器
1 |
|
上文件后, 执行效果如下:
3. 初始化聊天消息界面
聊天功能主要几点:
- 记录聊天内容
- 显示聊天内容
- 用户输入框
具体实现代码如下:
1 | # step2 初始化聊天消息界面 |
4. 创建LLM 检索 agent执行
这里实现一个Agent, 过程是 去调用一个检索工具,支持模板和用户输入,调用大模型进行检索,然后返回结果。
具体代码如下:
1 | # step3 创建检索 agent |
5. 用户输入与 Agent返回
这一步基本上就是解决用户输入显示与 Agent返回结果,同时通过 streamlit的 callbank函数去 展示 Agent的执行过程,具体如下:
1 | # step5 用户输入查询与返回 |
最终运行
1 | streamlit run bot_chat.py |
执行效果如下:
对话中:
返回答案:
参考资料
- LangChain官方文档
- LangChain中文教程
- LangChain(0.0.340)官方文档十一:Agents之Agent Types
- (哔哩哔哩视频)2025吃透LangChain大模型全套教程(LLM+RAG+OpenAI+Agent)通俗易懂,学完即就业!
声明:本文部分材料是基于DeepSeek-R1模型生成。
- 本文作者: Qborfy
- 本文链接: https://www.qborfy.com/ailearn/ai-learn08.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!