smolagents 文档

多步代理(multi-step agent)是如何工作的?

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

多步代理是如何工作的?

ReAct 框架(Yao et al., 2022)是目前构建代理的主要方法。

这个名字基于两个词的拼接:“Reason”(推理)和“Act”(行动)。的确,遵循此架构的代理将根据需要通过多个步骤来解决任务,每个步骤都包含一个推理步骤,然后是一个行动步骤,在其中它会规划工具调用,从而使其更接近解决手头的任务。

smolagents 中的所有代理都基于单一的 MultiStepAgent 类,它是 ReAct 框架的抽象。

在基础层面上,该类按照以下步骤循环执行操作,其中现有的变量和知识被整合到代理日志中,如下所示

初始化:系统提示被存储在 SystemPromptStep 中,用户查询被记录到 TaskStep 中。

While 循环 (ReAct 循环)

  • 使用 agent.write_memory_to_messages() 将代理日志写入一个 LLM 可读的聊天消息列表。
  • 将这些消息发送给一个 Model 对象以获取其补全结果。解析该补全结果以获得行动(对于 ToolCallingAgent 是一个 JSON blob,对于 CodeAgent 是一个代码片段)。
  • 执行该行动并将结果记录到内存中(一个 ActionStep)。
  • 在每个步骤结束时,我们运行所有在 agent.step_callbacks 中定义的回调函数。

可选地,当规划被激活时,可以定期修订一个计划并将其存储在 PlanningStep 中。这包括将有关手头任务的事实反馈到内存中。

对于一个 CodeAgent,它看起来如下图所示。

以下是其工作原理的视频概述

我们实现了两个版本的代理

  • CodeAgent 将其工具调用生成为 Python 代码片段。
  • ToolCallingAgent 将其工具调用写为 JSON,这在许多框架中很常见。根据您的需求,可以使用任何一种方法。例如,网页浏览通常需要在每次页面交互后等待,因此 JSON 工具调用可能非常适合。

阅读 将开源 LLM 作为 LangChain 代理这篇博文,以了解更多关于多步代理的信息。

< > 在 GitHub 上更新