Type something to search...
LangGraph:调用代理的工具

LangGraph:调用代理的工具

本文假设读者对 LangGraph / 多代理设计有基本的了解。在此基础上,让我们尝试理解实现工具调用代理的基本原理。

对生成式 AI 感兴趣的人应该对函数调用/工具调用等概念有所了解。这个概念非常简单,模型可以借助一个或多个工具根据用户的提示生成推理。工具就是作为催化剂的函数,帮助模型提供所需的信息以便进行更好的推理。此外,工具可以是内置工具或自定义定义的工具。

在我寻找实现多代理图的工具调用选项时,偶然发现了多个使用 AgentExecutor / ToolNode / ReAct 框架 / create_tool_calling_agent 实现的示例,但没有一个建议如何使用自定义代理进行实现,而自定义代理是任何多代理工作流的核心部分。如果你想设计复杂的工作流,那么我们需要创建自定义代理(而不是使用 ReAct / create_tool_calling_agents)。我希望这个汇编能帮助那些计划实现相同的人。

让我们保持图形简单易懂。这里有三个代理

  1. 自主代理,它在图中充当起始节点
  2. 输出代理,它在图中充当结束节点
  3. 工具箱代理,它作为催化剂为自主代理提供所需的信息。

自主代理可以响应与天气和股票价格相关的查询。(免责声明:我理解代理不应该设计成这样多样化的任务,但请将其视为假设场景,仅作为示例)。接下来,每当用户提示包含与以下任务相关的内容时:

  1. 天气,自主代理将对 get_weather 函数进行工具调用。
  2. 股票价格,自主代理将对 get_stock_price 函数进行工具调用。
  3. 天气股票价格(两者),那么自主代理将使用批处理函数并行调用这两个工具。

任何代理图的基本部分是 图形设计。在这里,我们定义了三个节点,命名为

  1. autonomous_agent : 该代理的工作是回答用户关于天气或股票价格的提示
  2. output : 该代理的工作是使用自主代理生成的最终推理并原样回应用户。没有逻辑/解析。
  3. toolbox : 该代理的工作是理解模型需要从哪个工具/工具中获得帮助 → 调用相应的工具/工具 → 将工具生成的输出回应给自主代理。

任何图形的下一个重要部分是其边缘。它定义了工作流,如果你仔细观察,

  1. 入口点设置为 autonomous_agent
  2. autonomous_agent 有一个条件边。条件边允许图形在两个节点之间动态定义边。在这里,should_continue() 决定下一个应该调用哪个节点。
  3. toolboxautonomous_agent 之间有一个静态边。这意味着一旦 toolbox 完成其执行,流程将默认返回到 autonomous_agent
  4. 退出点定义为 output 代理。

以下是两个将帮助自主代理生成推理的工具。它具有声明性定义,帮助模型理解其实现了什么功能以及需要哪些参数作为输入。为了示例,实施保持简约。

让我们看看 should_continue() 的流程。这个代码块决定下一个应该调用哪个节点。如果你仔细观察,它返回一个字符串。基于此,图形决定在自主代理完成后应该调用哪个节点。我不会在本文中讨论状态及其定义/模式(为了不稀释原始主题)。但请记住,

  1. 如果自主代理请求调用工具,则 → 调用工具箱节点。 (哪个工具??我们在这里不需要担心)
  2. 如果自主代理已完成其推理并且在 tool_calls 中没有值,则 → 调用输出节点。

现在,让我们考虑自主代理希望从工具/工具中获得帮助的场景 → 在这种情况下,将调用工具箱节点。如果你查看上面所示的图形定义,toolbox 节点调用以下函数。让我们深入了解它所做的所有活动。

  1. 该函数将静态函数 _invoke_tool 转换为 RunnableLambda(我稍后会解释这个函数的作用)。
  2. 它从 Runnable 接口调用批处理方法,并将工具/工具信息作为输入从 tool_calls 属性中获取。
  3. 从工具接收到的 val 然后被迭代并设置在状态属性 tool_response 中。
  4. 这个 tool_response 后来在调用模型时用作提示中的占位符。

上面创建的 RunnableLambda 调用这个函数。它根据工具名称调用工具。让我们深入了解其实现:

  1. 该信息作为输入参数从 call_tools() 方法接收,当调用批处理方法时。
  2. 它可以接受单个/多个工具作为输入。
  3. 由于每个工具都是可运行的,我们可以调用其 invoke 函数以从各自的工具获取输出。
  4. 然后将值设置到 ToolMessage 对象中并返回。
  5. 该信息在 call_tools() 中设置为状态属性 tool_response

请记住,我们已经针对每个节点定义了边(参见上面的图像)。我们从 toolboxautonomous_agent 之间有静态边。因此,现在将调用 autonomous_agent 的 invoke()。工具生成的值在调用模型进行推理之前设置到提示中。这次你会注意到模型的响应将具有

  1. tool_call 属性为空。
  2. content 属性将包含推理值。

希望这篇文章有助于理解工具调用代理的基本概念。如果它对你有所帮助,请随意分享。

仅供参考,以下是代码生成的输出。上述提到的所有三种场景都在测试场景中涵盖。

Github : https://github.com/shaktipawar/langgraph_tool_calling

乐于助人!!

Shakti.

https://www.linkedin.com/in/shakti-pawar/

Related Posts

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

结合chatgpt-o3-mini与perplexity Deep Research的3步提示:提升论文写作质量的终极指南

AI 研究报告和论文写作 合并两个系统指令以获得两个模型的最佳效果 Perplexity AI 的 Deep Research 工具提供专家级的研究报告,而 OpenAI 的 ChatGPT-o3-mini-high 擅长推理。我发现你可以将它们结合起来生成令人难以置信的论文,这些论文比任何一个模型单独撰写的都要好。你只需要将这个一次性提示复制到 **

阅读更多
让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

让 Excel 过时的 10 种 Ai 工具:实现数据分析自动化,节省手工作业时间

Non members click here作为一名软件开发人员,多年来的一个发现总是让我感到惊讶,那就是人们还在 Excel

阅读更多
使用 ChatGPT 搜索网络功能的 10 种创意方法

使用 ChatGPT 搜索网络功能的 10 种创意方法

例如,提示和输出 你知道可以使用 ChatGPT 的“搜索网络”功能来完成许多任务,而不仅仅是基本的网络搜索吗? 对于那些不知道的人,ChatGPT 新的“搜索网络”功能提供实时信息。 截至撰写此帖时,该功能仅对使用 ChatGPT 4o 和 4o-mini 的付费会员开放。 ![](https://images.weserv.nl/?url=https://cdn-im

阅读更多
掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

掌握Ai代理:解密Google革命性白皮书的10个关键问题解答

10 个常见问题解答 本文是我推出的一个名为“10 个常见问题解答”的新系列的一部分。在本系列中,我旨在通过回答关于该主题的十个最常见问题来分解复杂的概念。我的目标是使用简单的语言和相关的类比,使这些想法易于理解。 图片来自 [Solen Feyissa](https://unsplash.com/@solenfeyissa?utm_source=medium&utm_medi

阅读更多
在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和技术领域保持领先地位的 10 项必学技能 📚

在人工智能和科技这样一个动态的行业中,保持领先意味着不断提升你的技能。无论你是希望深入了解人工智能模型性能、掌握数据分析,还是希望通过人工智能转变传统领域如法律,这些课程都是你成功的捷径。以下是一个精心策划的高价值课程列表,可以助力你的职业发展,并让你始终处于创新的前沿。 1. 生成性人工智能简介课程: [生成性人工智能简介](https://genai.works

阅读更多
揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

揭开真相!深度探悉DeepSeek AI的十大误区,您被误导了吗?

在AI军备竞赛中分辨事实与虚构 DeepSeek AI真的是它所宣传的游戏规则改变者,还是仅仅聪明的营销和战略炒作?👀 虽然一些人将其视为AI效率的革命性飞跃,但另一些人则认为它的成功建立在借用(甚至窃取的)创新和可疑的做法之上。传言称,DeepSeek的首席执行官在疫情期间像囤积卫生纸一样囤积Nvidia芯片——这只是冰山一角。 从其声称的550万美元培训预算到使用Open

阅读更多
Type something to search...