主要内容
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。一切以"你能读懂并修改"为前提。
安装与 hello world
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 ToolCallingAgentCodeAgent 写 Python 代码调工具(默认,推荐);ToolCallingAgent 走 JSON tool call(兼容老模型)。
@tool decoratordocstring 被 parse 成 tool 描述,args 类型注解被转成 schema。
HfApiModel / LiteLLMModel / TransformersModel三种后端:HF Inference API、LiteLLM 代理、本地 transformers。
additional_authorized_imports扩展 code-agent 可以 import 的白名单,比如 pandas、requests。
适用场景
学习 / 教学
想真懂 agent loop 怎么跑,不是调用黑盒,而是读完整套源码。
开源模型 agent
跑 Llama 3.3 / Qwen 2.5 / DeepSeek V3 当 agent 后端,完全不依赖 OpenAI。
数学 / 数据分析任务
code-agent 模式在这类任务上效果最好,可以直接用 pandas / numpy / sympy。
什么时候别用
- 企业级 SLA 生产服务:功能精简,要自己加稳定性层
- 复杂多 agent 编排:不是它的主战场
vs 相邻选项
vs LangGraph
量级完全不同。smolagents 是教学和原型,LangGraph 是生产。
vs AutoGen
都偏研究,但 smolagents 更轻更透明,AutoGen 功能更全。