smolagents 文档
多步代理(multi-step agent)是如何工作的?
加入 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 代理这篇博文,以了解更多关于多步代理的信息。