HoRain云--LangChain 构建 RAG Agent

📅 2026/7/15 4:39:55
HoRain云--LangChain 构建 RAG Agent
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍创建 Retriever 工具实例RAG Agent 的执行流程添加引用来源实例向量存储的持久化实例本篇将它们集成到 Agent 中构建一个完整的 RAG Agent——能够基于私有知识库回答问题的智能助手。创建 Retriever 工具将检索器包装成一个工具Agent 就能在需要时自动搜索知识库实例from dotenv import load_dotenvload_dotenv()from langchain.tools import toolfrom langchain.agents import create_agentfrom langchain.chat_models import init_chat_modelfrom langchain.messages import HumanMessagefrom langchain_openai import OpenAIEmbeddingsfrom langchain_chroma import Chromafrom langchain_text_splitters import RecursiveCharacterTextSplitter# ----- 步骤 1准备知识库 -----# 模拟菜鸟教程 RUNOOB 的知识文档knowledge_docs [菜鸟教程RUNOOB创立于 2013 年是一个完全免费的编程学习平台。,平台已上线 300 套教程涵盖前端、后端、数据库、移动开发等领域。,Python3 基础教程是平台最受欢迎的课程累计学习人次超过 500 万。,Python3 基础教程共 30 章包含环境搭建、基本语法、函数、类、异常处理等内容。,HTML 基础教程共 25 章从 HTML 基本结构讲到表单与多媒体元素。,菜鸟教程支持在线运行代码学习者无需安装任何软件即可编写和运行代码。,平台提供移动端适配用户可以在手机上随时随地学习编程。,菜鸟教程的会员服务提供视频课程、项目实战、一对一答疑等增值服务。,]# 切分text_splitter RecursiveCharacterTextSplitter(chunk_size200, chunk_overlap30)chunks text_splitter.create_documents(knowledge_docs)# 向量化存储embeddings OpenAIEmbeddings(modeltext-embedding-3-small)vector_store Chroma.from_documents(documentschunks,embeddingembeddings,)retriever vector_store.as_retriever(search_kwargs{k: 3})# ----- 步骤 2创建检索工具 -----tooldef search_knowledge_base(query: str) - str:在菜鸟教程 RUNOOB 知识库中搜索相关信息。当用户询问关于菜鸟教程的具体信息时如课程数量、平台历史、功能特性等必须使用此工具查询知识库获取准确信息。Args:query: 搜索关键词或问题docs retriever.invoke(query)if not docs:return 知识库中未找到相关信息。results []for i, doc in enumerate(docs, 1):results.append(f[{i}] {doc.page_content})return \n\n.join(results)# ----- 步骤 3创建 RAG Agent -----model init_chat_model(deepseek:deepseek-v4-flash, temperature0)agent create_agent(modelmodel,tools[search_knowledge_base],system_prompt你是菜鸟教程 RUNOOB 的智能客服助手。## 规则1. 当用户询问关于菜鸟教程的具体信息时必须使用 search_knowledge_base 工具查询2. 基于检索到的信息回答不要编造知识库中没有的内容3. 如果知识库中没有相关信息诚实地告诉用户4. 回答要友好、简洁、准确,)# ----- 步骤 4测试 -----questions [菜鸟教程是什么时候创立的,Python3 基础教程有多少章,菜鸟教程一共有多少套教程,]for q in questions:result agent.invoke({messages: [HumanMessage(contentq)]})print(fQ: {q})print(fA: {result[messages][-1].content})print(- * 60)运行结果Q: 菜鸟教程是什么时候创立的 A: 菜鸟教程RUNOOB创立于 2013 年是一个完全免费的编程学习平台。 ------------------------------------------------------------ Q: Python3 基础教程有多少章 A: Python3 基础教程共 30 章包含环境搭建、基本语法、函数、类、异常处理等内容。 ------------------------------------------------------------ Q: 菜鸟教程一共有多少套教程 A: 菜鸟教程已上线 300 套教程涵盖前端、后端、数据库、移动开发等多个领域。 ------------------------------------------------------------RAG Agent 的执行流程对于上面的第三个问题菜鸟教程一共有多少套教程Agent 的执行流程是用户提问模型判断需要查询知识库 → 调用 search_knowledge_base(菜鸟教程 教程数量)检索器从向量数据库中搜索语义最相似的文档块将检索结果返回给模型模型基于检索结果生成准确回答添加引用来源专业的 RAG 系统通常会附带引用来源让用户知道信息来自哪里实例from langchain_core.documents import Documenttooldef search_with_sources(query: str) - str:在菜鸟教程知识库中搜索返回带来源标注的结果。Args:query: 搜索关键词docs retriever.invoke(query)if not docs:return 未找到相关信息。results []for i, doc in enumerate(docs, 1):source doc.metadata.get(source, 菜鸟教程知识库)results.append(f[来源 {i}: {source}]\n{doc.page_content})return \n\n.join(results)# 如需在文档中保留来源信息可在创建时添加元数据doc_with_meta Document(page_contentPython3 基础教程共 30 章...,metadata{source: Python3 基础教程-课程介绍, url: https://www.runoob.com/python3/})向量存储的持久化在实际项目中你不会每次都重建向量索引。Chroma 支持持久化到本地实例# 创建持久化向量存储首次运行embeddings OpenAIEmbeddings(modeltext-embedding-3-small)vector_store Chroma.from_documents(documentschunks,embeddingembeddings,persist_directory./runoob_vector_db, # 持久化目录)# 后续运行直接加载loaded_store Chroma(persist_directory./runoob_vector_db,embedding_functionembeddings,)retriever loaded_store.as_retriever()# 无需重新计算向量向量存储的持久化可以大幅提升启动速度。在文档量大的情况下成千上万篇重新计算所有向量的 Embedding 可能花费数十分钟。持久化后只需加载即可。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧