smolagents 文档

多步骤 Agent 是如何工作的?

Hugging Face's logo
加入 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 的更多信息。

< > 在 GitHub 上更新