smolagents 文档
多步骤 Agent 是如何工作的?
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
多步骤 Agent 是如何工作的?
ReAct 框架 (Yao 等人,2022 年) 是目前构建 Agent 的主要方法。
这个名称基于两个词语的组合:“Reason”(推理)和 “Act”(行动)。实际上,遵循这种架构的 Agent 将根据需要执行任意多的步骤来解决任务,每个步骤都包含一个推理步骤,然后是一个行动步骤,在其中制定工具调用,使其更接近解决手头的任务。
smolagents
中的所有 Agent 都基于单一的 MultiStepAgent
类,这是 ReAct 框架的抽象。
在基本层面上,此类在以下步骤循环中执行操作,其中现有变量和知识被纳入到 Agent 日志中,如下所示
初始化:系统提示存储在 SystemPromptStep
中,用户查询记录到 TaskStep
中。
While 循环 (ReAct 循环)
- 使用
agent.write_memory_to_messages()
将 Agent 日志写入 LLM 可读的 聊天消息列表。 - 将这些消息发送到
Model
对象以获取其补全结果。解析补全结果以获取操作(ToolCallingAgent
的 JSON blob,CodeAgent
的代码片段)。 - 执行操作并将结果记录到内存中 (
ActionStep
)。 - 在每个步骤结束时,我们运行在
agent.step_callbacks
中定义的所有回调函数。
可选地,当规划被激活时,可以定期修订计划并将其存储在 PlanningStep
中。这包括将有关手头任务的事实馈送到内存中。
对于 CodeAgent
,它看起来如下图所示。

这是一个关于其工作原理的视频概述


我们实现了两个版本的 Agent
- CodeAgent 是首选的 Agent 类型:它将其工具调用生成为代码 blob。
- ToolCallingAgent 将工具调用生成为其输出中的 JSON,这在 Agentic 框架中很常见。我们加入此选项是因为在某些狭窄的用例中它可能很有用,在这些用例中,每步只需进行一次工具调用即可:例如,对于 Web 浏览,您需要在页面上的每个操作之后等待以监控页面如何变化。
阅读 开源 LLM 作为 LangChain Agent 博客文章,以了解有关多步骤 Agent 的更多信息。