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 搜索网络功能的 10 种创意方法

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

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

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

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

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

阅读更多
10 个强大的 Perplexity AI 提示,让您的营销任务自动化

10 个强大的 Perplexity AI 提示,让您的营销任务自动化

在当今快速变化的数字世界中,营销人员总是在寻找更智能的方法来简化他们的工作。想象一下,有一个个人助理可以为您创建受众档案,建议营销策略,甚至为您撰写广告文案。这听起来像是一个梦想? 多亏了像 Perplexity 这样的 AI 工具,这个梦想现在成为现实。通过正确的提示,您可以将 AI 转变为您的 个人营销助理。在本文中,我将分享 10 个强大的提示,帮助您自动

阅读更多
10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

10+ 面向 UI/UX 设计师的顶级 ChatGPT 提示

人工智能技术,如机器学习、自然语言处理和数据分析,正在重新定义传统设计方法。从自动化重复任务到实现个性化用户体验,人工智能使设计师能够更加专注于战略思维和创造力。随着这一趋势的不断增长,UI/UX 设计师越来越多地采用 AI 驱动的工具来促进他们的工作。利用人工智能不仅能提供基于数据的洞察,还为满足多样化用户需求的创新设计解决方案开辟了机会。 1. 用户角色开发 目的

阅读更多
在几分钟内完成数月工作的 100 种人工智能工具

在几分钟内完成数月工作的 100 种人工智能工具

人工智能(AI)的快速发展改变了企业的运作方式,使人们能够在短短几分钟内完成曾经需要几周或几个月的任务。从内容创作到网站设计,AI工具帮助专业人士节省时间,提高生产力,专注于创造力。以下是按功能分类的100个AI工具的全面列表,以及它们在现实世界中的使用实例。 1. 研究工具 研究可能耗时,但人工智能工具使查找、分析和组织数据变得更加容易。**ChatGPT, Cop

阅读更多
你从未知道的 17 个令人惊叹的 GitHub 仓库

你从未知道的 17 个令人惊叹的 GitHub 仓库

Github 隐藏的宝石!! 立即收藏的代码库 学习编程相对简单,但掌握编写更好代码的艺术要困难得多。GitHub 是开发者的宝藏,那里“金子”是其他人分享的精心编写的代码。通过探索 GitHub,您可以发现如何编写更清晰的代码,理解高质量代码的样子,并学习成为更熟练开发者的基本步骤。 1. notwaldorf/emoji-translate *谁需

阅读更多