什么是 smolagents?
smolagents 是一个简单而强大的用于构建 AI Agent 的框架。它为大语言模型 (LLM) 提供了与现实世界互动的 自主性,例如搜索或生成图像。
正如我们在第一单元中学到的,AI Agent 是使用 LLM 根据 "观察" 来生成 "思考" ,从而执行 "动作" 的程序。让我们来探讨一下这在 smolagents 中是如何实现的。
smolagents 的主要优势
- 简洁性: 最小化的代码复杂度和抽象,使框架易于理解、采用和扩展。
- 灵活的 LLM 支持: 通过与 Hugging Face 工具和外部 API 集成,可与任何 LLM 配合使用。
- 代码优先的方法: 对直接用代码编写动作的 Code Agent 提供一流支持,无需解析并简化了工具调用。
- HF Hub 集成: 与 Hugging Face Hub 无缝集成,允许将 Gradio Spaces 用作工具。
何时使用 smolagents?
考虑到这些优势,我们应该在什么时候选择 smolagents 而不是其他框架呢?
smolagents 是以下情况的理想选择
- 您需要一个 轻量级且极简的解决方案。
- 您想 快速进行实验,而不需要复杂的配置。
- 您的 应用程序逻辑简单明了。
构建使用代码的 Agent
代码 Agent 是 smolagents 中的默认 Agent 类型。它们生成 Python 工具调用来执行动作,从而实现高效、富有表现力且准确的动作表示。
为何选择代码 Agent?
在多步 Agent 流程中,LLM 编写并执行动作,通常涉及外部工具调用。传统方法使用 JSON 格式指定工具名称和参数(作为字符串),系统必须解析这些信息才能确定执行哪个工具。
然而,研究表明,直接使用代码能让工具调用型 LLM 更有效地工作。

用代码而非 JSON 编写动作有以下几个关键优势:
- 可组合性:轻松组合和重用动作
- 对象管理:直接处理复杂结构,如图像
- 通用性:能够表达任何计算上可能的任务
- 对 LLM 更自然:高质量的代码已经存在于 LLM 的训练数据中
代码 Agent 如何工作?
上图展示了 CodeAgent.run() 的工作方式,它遵循了我们在第一单元中提到的 ReAct 框架。smolagents 中 Agent 的主要抽象是 MultiStepAgent,它是核心构建块。CodeAgent 是一种特殊的 MultiStepAgent,我们将在下面的例子中看到。
一个 CodeAgent 通过一系列步骤的循环来执行动作,现有的变量和知识被整合到 Agent 的上下文中,并保存在执行日志中。
-
系统提示存储在
SystemPromptStep中,用户查询则记录在TaskStep中。 -
然后,执行以下 while 循环:
2.1 方法
agent.write_memory_to_messages()将 Agent 的日志写入一个 LLM 可读的聊天消息列表。2.2 这些消息被发送给一个
Model,该模型生成一个补全。2.3 解析补全以提取动作,在我们的例子中,由于我们使用的是
CodeAgent,这个动作应该是一个代码片段。2.4 执行该动作。
2.5 结果被记录到内存中的一个
ActionStep里。