Hugging Face smolagents 发布
Hugging Face 已推出 smolagents,一个简单的库,旨在为语言模型解锁代理能力。该库的主要创新是推广“代码代理”——即编写其动作为可执行代码的代理——这相比传统的基于 JSON 的工具调用提供了更优的可组合性、对象管理和通用性。
AI 代理的谱系
在 AI 系统中,代理被定义为 LLM 输出对程序工作流的影响程度。这存在于一个连续的谱系中,而不是二元状态:
- 简单处理器:LLM 输出对程序流程没有影响。
- 路由器:LLM 输出决定基本控制流程(例如,if/else)。
- 工具调用:LLM 输出决定执行哪个函数以及使用什么参数。
- 多步骤代理:LLM 输出通过循环控制迭代和程序继续。
- 多代理:一个代理工作流可以触发另一个代理工作流。
何时使用代理工作流
当任务的工作流无法提前确定时,代理系统最为有效。虽然确定性工作流(硬编码逻辑)更可靠,并且应优先用于简单、可预测的任务,但代理为依赖多个变量因素的复杂真实世界请求提供了必要的灵活性。
代码代理 vs. JSON 工具调用
传统的代理框架通常要求 LLMs 将动作输出为 JSON 片段,然后解析并执行这些片段。smolagents 优先考虑以代码形式编写动作,因为编程语言专门设计用来比 JSON 更高效地表达计算机动作。
以代码形式编写动作提供了几个技术优势:
- 可组合性:代码允许嵌套动作和可重用函数的定义。
- 对象管理:代码提供了一种原生方式来存储和操作之前动作的输出。
- 通用性:代码可以表达计算机能够执行的任何操作。
- 训练数据一致性:LLMs 已经在高质量代码上进行了大量训练,因此他们天然擅长这种格式。
smolagents 的主要特性
smolagents 是 transformers.agents 的继承者,并且是基于几个核心目标构建的:
- 简单性:核心逻辑保持最小化,仅几千行代码。
- 一流的代码代理支持:专门支持编写代码的代理,包括通过 E2B 在沙箱环境中安全执行。
- Hub 集成:工具可以共享到并从 Hugging Face Hub 加载。
- 模型不可知:该库支持托管在 Hub 上的模型(通过
transformers或推理 API),以及通过 LiteLLM 集成的 OpenAI 和 Anthropic 模型。
构建和部署代理
创建一个代理需要两个主要组件:tools 列表和一个 model(LLM 引擎)。
通过定义带有类型提示和文档字符串的 Python 函数,然后应用 @tool 装饰器来创建工具。这些工具随后可以推送到 Hugging Face Hub 以进行共享。例如,可以为 CodeAgent 配备一个 Google Maps 工具,通过迭代收集旅行时间并进行计算来规划复杂的旅行行程。
开源模型的性能
基准测试表明,开源模型现在可以在代理工作流中与最好的封闭模型竞争。具体来说,数据表明“代码代理”在各种挑战中始终优于“工具调用代理”,验证了使用可执行代码作为主要动作格式的方法。