入门 📋 7 个步骤 第 429 / 470 篇

用 smolagents 写一个会写代码的 Code Agent(@tool + CodeAgent)

用 Hugging Face smolagents 跑通能自己写 Python 并执行的 Code Agent:@tool 定义工具、InferenceClientModel 接模型、CodeAgent.run 多步编排,并升级多 Agent 协作与 Gradio 可视化。

2026.09.14· 18 分钟阅读· 约 1196 字· 🐙 smolagents / 🧠 Code Agent

大多数 Agent 框架让模型去"选一个函数",而 Hugging Face 的 smolagents 走了一条更直接的路:让模型直接写 Python 代码来解决问题,然后在沙箱里执行。这种 "Code Agent" 特别适合数据分析、批量处理、需要多步逻辑组合的任务。本教程从装包到多 Agent 协作,全程可复制粘贴跑通。

🐙 本教程适合:会一点 Python、想快速跑通"能执行代码"的 Agent 的开发者。你只需要 Python 3.10+,模型可选 Hugging Face 免费 Inference(默认)或自备 OpenAI Key。

先搞懂:Code Agent 和普通工具调用有什么不同?

用一句话理解:普通 Agent 像"填空题"——模型只能从你给的几个固定函数里挑;Code Agent 像"应用题"——模型自己写一小段 Python 把多个工具串起来。比如"比较北京和东京天气",Code Agent 会写出 w_bj = get_weather("北京"); w_tk = get_weather("东京") 再比较,而不需要你预先定义好"对比天气"这个函数。

方式模型产出适合场景
函数调用 Agent选一个已定义函数 + 参数动作固定的流程
Code Agent写 Python 代码并运行需要组合/计算/多步逻辑

Step 1:安装 smolagents

1 一行 pip 装好
pip install smolagents
💡 想要开箱即用的搜索/网页访问等"基础工具",可以装 pip install 'smolagents[toolkit]',或在初始化 Agent 时设 add_base_tools=True。新手先用最小安装,理解原理。

Step 2:用 @tool 写第一个工具

2 函数 + 清晰 docstring 即工具

任何 Python 函数,只要加上 @tool 装饰器、写好类型注解和带 Args: 的 docstring,就能被 Agent 调用。docstring 就是 Agent 的"使用说明书",写得越清楚越好。

from smolagents import tool

@tool
def get_weather(city: str) -> str:
    """获取城市当前天气。
    Args:
        city: 城市名,例如 北京
    Returns:
        天气描述字符串
    """
    # 实际项目里这里接真实天气 API;示例返回固定文本
    return f"{city}:晴,22°C"

docstring 的 Args 段不能省。Agent 完全靠它理解参数含义和类型;省略或含糊,模型很容易传错参数导致工具调用失败。输出类型注解也建议写清楚。

Step 3:接一个大模型

3 InferenceClientModel 默认即用

smolagents 用 InferenceClientModel 对接 Hugging Face Inference API,默认就能跑(部分模型免 token):

from smolagents import InferenceClientModel

model = InferenceClientModel()  # 默认用 HF Inference API
# 想指定模型 / 带 token:
# model = InferenceClientModel(
#     model_id="Qwen/Qwen2.5-Coder-32B-Instruct",
#     token="hf_xxxxxxxx",
# )
🔑 没有 HF token 也能跑默认模型。想用 OpenAI / Anthropic / 本地 Ollama,换成 OpenAIServerModel / LiteLLMModel / OllamaModel 即可(具体参数见 smolagents 官方文档),思路完全一致。

Step 4:初始化 CodeAgent 并运行

4 agent.run 一句话启动
from smolagents import CodeAgent

agent = CodeAgent(tools=[get_weather], model=model, add_base_tools=False)
result = agent.run("北京和上海现在天气分别是怎样的?")
print(result)

CodeAgent 会真正执行模型生成的 Python。请在隔离/可信环境运行,不要给它写文件、访问生产数据库等危险权限;涉及敏感数据时用本地模型或企业版。生产环境建议限制 additional_authorized_imports。

Step 5:再加工具,让 Agent 自己编排

5 多工具组合

工具越多,Code Agent 越能"自编自演"把任务拆成多步:

@tool
def get_news(topic: str) -> str:
    """获取某主题的最新资讯摘要。"""
    return f"关于 {topic} 的 3 条最新动态……"

agent = CodeAgent(tools=[get_weather, get_news], model=model)
print(agent.run("对比北京天气和今天 AI 领域的新闻"))
🚀 模型会自己决定先调天气、再调新闻、最后综合。你不用写编排逻辑——这正是 Code Agent 相比"填空题"式 Agent 的优势。

Step 6:多 Agent 协作(ManagedAgent)

6 一个经理管多个专员

把某个 Agent 包成 ManagedAgent,交给"经理 Agent"调用,适合把复杂任务分层:

from smolagents import ManagedAgent

weather_agent = CodeAgent(
    tools=[get_weather], model=model,
    name="weather", description="查询任意城市天气",
)
manager = CodeAgent(
    tools=[], model=model,
    managed_agents=[weather_agent], max_steps=10,
)
manager.run("把国内主要城市的天气汇总一下")

Step 7:可视化调试(GradioUI)

7 看 Agent 的思考过程

用官方 Gradio UI 起一个网页,能实时看到 Agent 写的代码、执行结果和最终答案,非常适合调试:

from smolagents import GradioUI

GradioUI(agent).launch()
🔎 调试技巧:看 Agent 生成的代码哪里错了,比看一大段"思考文字"直观得多。发现问题就回头改工具 docstring 或加示例,再重跑。

常见问题速查

现象原因 & 解决
工具没被调用docstring 的 Args/类型写不清,重写说明书
模型报 401指定了需 token 的模型却没传 token
代码执行报错看 GradioUI 里的代码,多半是工具返回格式对不上
任务卡住调大 max_steps 或简化问题
← 返回教程中心