核心框架11k+ · since 2024 · Python

smolagents

by Hugging Face

~1000 lines readable · code-agent paradigm

HuggingFace 故意极简的 agent 库,核心约 1000 行,一个下午读完;code-agent 模式是它的杀手锏。

主要内容

smolagents 有一个独特信念:让模型直接写 Python 代码来调用工具,而不是走 JSON tool call 的来回。这叫 code-agent 范式。在数学 / 数据分析 / 算法任务上,code-agent 的精度常常比 JSON tool call 高 15-30%,因为 Python 本身就是模型最熟悉的 DSL,还能原生写循环、条件、嵌套调用。三种沙盒可选:E2B(云端)、Docker(本地)、Pyodide(浏览器)。对开源模型(Llama、Qwen、DeepSeek)的支持是一等公民,HuggingFace Hub 上所有模型都能直接当 agent 后端。

核心关注点

让 agent 原理可读,让非 OpenAI 模型也能当 agent。一切以"你能读懂并修改"为前提。

极简透明教学友好开源模型code-agent 范式沙盒隔离

安装与 hello world

$ pip install smolagents
hello-world.py
from smolagents import CodeAgent, HfApiModel, tool
 
@tool
def get_weather(location: str, celsius: bool = True) -> str:
    """
    获取指定地点天气。
 
    Args:
        location: 城市名
        celsius: 是否用摄氏度
    """
    return f"{location} 现在 22 度,晴"
 
agent = CodeAgent(
    tools=[get_weather],
    model=HfApiModel("meta-llama/Llama-3.3-70B-Instruct"),
)
 
# agent 内部直接生成并执行 Python 代码:
# t1 = get_weather("Tokyo")
# t2 = get_weather("Paris")
# print(float(t1.split()[2]) - float(t2.split()[2]))
result = agent.run("比较东京和巴黎现在的气温,差多少度?")

关键 API / 概念

CodeAgent vs ToolCallingAgent

CodeAgent 写 Python 代码调工具(默认,推荐);ToolCallingAgent 走 JSON tool call(兼容老模型)。

@tool decorator

docstring 被 parse 成 tool 描述,args 类型注解被转成 schema。

HfApiModel / LiteLLMModel / TransformersModel

三种后端:HF Inference API、LiteLLM 代理、本地 transformers。

additional_authorized_imports

扩展 code-agent 可以 import 的白名单,比如 pandas、requests。

适用场景

01

学习 / 教学

想真懂 agent loop 怎么跑,不是调用黑盒,而是读完整套源码。

02

开源模型 agent

跑 Llama 3.3 / Qwen 2.5 / DeepSeek V3 当 agent 后端,完全不依赖 OpenAI。

03

数学 / 数据分析任务

code-agent 模式在这类任务上效果最好,可以直接用 pandas / numpy / sympy。

什么时候别用

  • 企业级 SLA 生产服务:功能精简,要自己加稳定性层
  • 复杂多 agent 编排:不是它的主战场

vs 相邻选项

vs LangGraph

量级完全不同。smolagents 是教学和原型,LangGraph 是生产。

vs AutoGen

都偏研究,但 smolagents 更轻更透明,AutoGen 功能更全。