AI在线 AI在线

RAG 不止能检索!它还能在 LangGraph 中当“工具调用大脑”

Retrieval-Augmented Generation(RAG)是一种结合信息检索和大型语言模型(LLMs)来回答用户查询的方法。 传统上,这涉及将检索器直接连接到生成流水线。 然而,通过 LangGraph 和 LangChain,我们可以进一步模块化这个过程,将检索器暴露为一个可调用的工具。

Retrieval-Augmented Generation(RAG)是一种结合信息检索和大型语言模型(LLMs)来回答用户查询的方法。传统上,这涉及将检索器直接连接到生成流水线。然而,通过 LangGraph 和 LangChain,我们可以进一步模块化这个过程,将检索器暴露为一个可调用的工具。

在这篇博客中,我将展示如何在 LangGraph 中使用工具调用实现一个 RAG 系统。我将模拟一个餐厅助理代理,回答关于 Bella Vista 餐厅的问题。

目标

构建一个基于 RAG 的代理,能够:

• 将文档检索器封装为一个可调用工具。

• 通过专门的回退工具处理无关话题的输入。

• 通过消息精简保持最小的代理状态。

• 利用 LangGraph 实现清晰的工作流路由。

步骤 1:设置 Python 和 uv

我们的 Agentic RAG 将是一个 Python 程序。首先,检查是否安装了 Python 3.10 或更高版本:

复制

如果没有,从 python.org 下载 Python 3.10 或更高版本。

接下来,安装 uv,这是一个用于 Python 的快速依赖管理工具:

复制

如果遇到权限问题,运行以下命令:

复制

然后确认 uv 版本:

复制

步骤 2:创建项目目录结构

现在创建项目目录和文件:

复制

步骤 3:初始化 Python 项目并安装依赖

创建一个虚拟环境:

复制

现在安装所有需要的包:

复制

在 .env 文件中添加 Gemini API 密钥

从 AI Studio 生成你的 API 密钥并安全存储。可以按照以下步骤操作:

复制

添加以下内容:

复制

步骤 4:更新 .gitignore 以避免暴露密钥

复制

步骤 5:在 tool_calling_agentic_rag.ipynb 中编写 RAG

1. 加载 API 密钥
复制
2. 准备模拟数据集

我定义了一组关于餐厅的简单文档。

复制
3. 创建向量存储和检索器

我们将使用 GoogleGenerativeAIEmbeddings 嵌入这些文档,并使用 Chroma 存储到向量数据库以进行检索。

复制
4. 检查检索器是否正常工作
复制

输出:

复制
5. 定义检索器工具和无关话题工具

我们不直接调用检索器,而是将其转换为一个可调用工具。我还将定义一个无关话题工具,以优雅地处理无关查询。

复制
6. 定义代理状态

状态结构被简化为仅保存消息。LangGraph 使用 reducer 管理更新。

复制
7. 创建代理节点

代理函数将工具绑定到 LLM,并使用当前消息调用它。

复制
8. 定义工作流路由器

条件边决定是转到工具执行节点还是结束工作流。

复制
9. 构建并编译 LangGraph 工作流
复制
10. 显示代理工作流
复制

将 RAG 用作工具调用代理

11. 测试代理
复制

输出:

复制

恭喜!你刚刚创建了一个智能的工具调用 RAG 代理,能够精准地处理用户查询。

局限性

虽然上述实现对于小型、明确范围的领域非常有效,但仍有一些局限性:

• 可扩展性:随着文档库的增长,向量搜索和分类需要优化。

• 内存:当前实现不保留任何历史交互的记忆。LangGraph 的 InMemorySaver 可用于短期会话内存。对于生产级使用,建议使用数据库支持的持久内存解决方案。

将检索器封装为 LangChain 和 LangGraph 的可调用工具,提供了一种比传统 RAG 更简洁的替代方案。

它简化了代理逻辑,并允许语言模型自主决定何时检索信息。

如果这种方法最适合你的应用需求,那就选择它吧!

下载代码:https://github.com/ivrschool/langchain/blob/main/Langgraph/rag_tool_calling_agent.ipynb

相关资讯

结合LangGraph、DeepSeek-R1和Qdrant 的混合 RAG 技术实践

一、引言:混合RAG技术的发展与挑战在人工智能领域,检索增强生成(RAG)技术正成为构建智能问答系统的核心方案。 传统RAG通过向量数据库存储文档嵌入并检索相关内容,结合大语言模型(LLM)生成回答,有效缓解了LLM的“幻觉”问题。 然而,单一的稠密向量检索(如基于Transformer的嵌入模型)在处理关键词匹配和多义词歧义时存在局限性,而稀疏向量检索(如BM25)虽擅长精确关键词匹配,却缺乏语义理解能力。
6/6/2025 3:11:00 AM
大模型之路

内存革命!LangGraph 0.3.19如何实现Python内存使用效率的飞跃?

在构建复杂 AI 应用或大规模分布式系统时,内存管理始终是开发者面临的痛点。 尤其在 Python 生态中,动态类型和垃圾回收机制虽然灵活,但对内存的高效利用提出了更高要求。 近日,LangGraph 团队宣布推出 0.3.19 版本,通过一系列内存优化技术,将 Python 应用的内存占用降低 40% 以上,并支持长期记忆存储,彻底解决了复杂场景下的性能瓶颈。
4/1/2025 12:33:03 AM
智Echo

LangGraph:如何用“图思维”轻松管理多Agent协作?

引言当AI任务变得复杂时,我们需要更好的“调度员”。 随着智能应用场景的深化,单一 Agent 在处理复杂任务(如电商智能客服、金融数据分析流水线)时显现出明显局限性。 传统链式调用框架(如 LangChain)依赖开发者手动编排流程,在面对任务分支、动态决策和资源复用等场景时,往往陷入维护成本高、扩展性差的困境。
4/1/2025 8:48:34 AM
张张
  • 1