Loading...

文章背景图

smolagents:Hugging Face轻量级智能体库安装与使用指南

2026-10-20
0
- 字
- 分钟
|

smolagents

smolagents:Hugging Face轻量级智能体库安装与使用指南

项目名称huggingface/smolagents
仓库地址https://github.com/huggingface/smolagents
官方网站https://huggingface.co/docs/smolagents
官方文档smolagents Docs
最新更新时间2026-10-20(持续活跃更新)
项目定位Hugging Face 官方轻量级 Agent 库,主打"用代码代替 JSON action"的 CodeAgent
开源协议Apache-2.0

一、项目背景

大多数 Agent 框架让 LLM 输出一个 JSON:{"tool": "search", "args": {"q": "..."} }。但 JSON 对 LLM 来说其实很难——格式错一个引号就崩,复杂参数更别想。Hugging Face 的研究者提出一个大胆的想法:既然 LLM 最擅长写代码,那就让它直接写 Python 代码来调用工具。运行时把这段代码在沙箱里跑一遍,得到结果再喂回给 LLM。

这就是 smolagents 的核心思想。它由 Hugging Face 官方维护,核心代码只有几百行,却把"代码即动作"这个范式做到了极致:Agent 不是在选工具,而是在写一个 Python 脚本,脚本里可以自由组合工具、做循环、写条件、调用第三方库。这比传统 JSON 工具调用强大一个数量级。

smolagents 与 Hugging Face 生态深度集成:一行代码就能用 HfApiModel 调任何 Hugging Face 上的模型(包括免费 Inference API),内置 WebSearchTool、DuckDuckGoSearchTool、PythonREPLTool,还支持把任何 Hugging Face Space 变成工具。它已经成为 HF 官方教程里的 Agent 默认框架。

二、核心特性

  • CodeAgent(代码即动作):LLM 直接写 Python 代码调用工具,比 JSON action 灵活得多。
  • ToolCallingAgent(传统模式):也支持经典 JSON 工具调用,兼容老模型。
  • 极轻量:核心库零依赖臃肿,import 即用。
  • HfApiModel:一行接入 Hugging Face Inference API,免费额度可玩。
  • 内置工具集:DuckDuckGo 搜索、Python REPL、网页抓取、文件 IO。
  • 把 Space 变工具:Tool.from_space("owner/space") 一键复用 HF 上任何 Space。
  • MCP 支持:可接入 Model Context Protocol 工具服务器。
  • 多 Agent:可让一个 Manager Agent 派生子 Agent,分工协作。

三、环境要求

  • Python:3.9+,推荐 3.10/3.11。
  • 操作系统:Linux / macOS / WSL2。
  • Hugging Face Token:用 HfApiModel 时需要(免费注册)。
  • (可选)OpenAI Key:用 OpenAI 模型时需要。
  • 磁盘:极小,几 MB。

四、详细部署步骤

第一步:安装

python3 -m venv .venv
source .venv/bin/activate

# 基础安装
pip install smolagents

# 带上默认工具集(web search 等)
pip install 'smolagents[toolkit]'

# 如果要用 litellm 接任意模型
pip install 'smolagents[litellm]'

# 如果要用 E2B 云沙箱跑不可信代码
pip install 'smolagents[e2b]'

第二步:配置模型

import os
from smolagents import HfApiModel, InferenceClientModel

# 方式 A:用 Hugging Face Inference API(免费额度)
os.environ["HF_TOKEN"] = "hf_xxxx"
model = HfApiModel(model_id="meta-llama/Llama-3.3-70B-Instruct")

# 方式 B:用 OpenAI
from smolagents import OpenAIServerModel
model = OpenAIServerModel(
    model_id="gpt-4o-mini",
    api_key=os.environ["OPENAI_API_KEY"],
)

# 方式 C:用本地 Ollama
model = InferenceClientModel(model_id="http://localhost:11434/v1/qwen2.5:7b")

第三步:第一个 CodeAgent

from smolagents import CodeAgent, DuckDuckGoSearchTool

agent = CodeAgent(
    tools=[DuckDuckGoSearchTool()],   # 给它一个搜索工具
    model=model,
    add_base_tools=True,             # 自动加上 Python REPL 等基础工具
)

# 跑一个需要搜索 + 计算的任务
result = agent.run(
    "巴黎到东京的空中距离是多少公里?"
    "如果一只猎豹全速跑这段距离,需要多少秒?"
)
print(result)

你会看到 Agent 自己写出类似这样的 Python 代码:

distance = web_search("distance Paris to Tokyo km")
speed = 100 / 3.6   # 猎豹约 100 km/h
time = distance / speed
final_answer(f"{time} 秒")

第四步:自定义工具

from smolagents import tool

@tool
def get_weather(city: str) -> str:
    """查询城市天气。
    Args:
        city: 城市名,例如 Beijing
    """
    # 这里接你的真实 API
    return f"{city}: 晴,22℃"

agent = CodeAgent(tools=[get_weather], model=model)
agent.run("北京现在天气怎么样?")

第五步:把 Hugging Face Space 变成工具

from smolagents import Tool

# 一键把任何 Space 包成工具
image_classifier = Tool.from_space(
    space_id="microsoft/resnet-50",
    name="image_classifier",
    description="对图片做图像分类",
)

agent = CodeAgent(tools=[image_classifier], model=model)
agent.run("帮我分类这张图片: https://example.com/cat.jpg")

第六步:多 Agent 协作

researcher = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model, name="researcher")
writer = CodeAgent(tools=[], model=model, name="writer")

manager = CodeAgent(
    tools=[],
    model=model,
    managed_agents=[researcher, writer],   # 派生子 Agent
    name="manager",
)

manager.run("研究一下量子计算最新进展,然后写一段 200 字科普")

第七步:MCP 工具接入

from smolagents import MCPServerStdio

server = MCPServerStdio(
    params={"command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]},
)
agent = CodeAgent(tools=[], model=model, mcp_servers=[server])

五、进阶用法与生产建议

5.1 沙箱选型

CodeAgent 默认在本地 PythonREPL 执行 LLM 生成的代码,开发阶段没问题。生产环境请切到:

  • E2B:pip install smolagents[e2b],云沙箱按秒计费;
  • Docker 沙箱:自己包一层 docker exec;
  • 受限 PythonREPL:关闭 allow_dangerous_imports,禁掉 os/subprocess。

5.2 调试技巧

当 Agent 表现异常时:

agent = CodeAgent(..., verbosity_level=2)
# 打开后会打印每一步生成的 Python 代码与 stdout
# 方便定位是 Prompt 没说清,还是工具返回格式不对

5.3 把 Agent 包成 API

from fastapi import FastAPI
app = FastAPI()

@app.post("/run")
def run(task: str):
    result = agent.run(task, max_steps=8)
    return {"result": result}

六、使用方法示例

查看 Agent 思考过程:

agent = CodeAgent(..., verbosity_level=2)   # 0/1/2 三档
agent.run("...")

限制最大步数(防失控):

agent.run("...", max_steps=10)

保存与复用 Agent:

agent.save("my_agent")
# 之后加载
from smolagents import CodeAgent
loaded = CodeAgent.load("my_agent", model=model)

典型任务示例:

  • "查一下今天比特币价格,换算成人民币。"
  • "把这个 CSV 文件读进来,画一张柱状图保存到 output.png。"
  • "搜索 LangGraph 最新 release notes,总结三个新特性。"

默认账号密码:smolagents 是纯 Python 库,没有 Web 服务、不需要登录。使用 HfApiModel 时用 HF Token,使用 OpenAI 时用 OpenAI Key。

七、常见问题(FAQ)

Q1:CodeAgent 安全吗?它跑我机器上的 Python 代码?

默认在本地 PythonREPL 里执行 LLM 生成的代码,不要在生产直接用。生产请切到 E2B 云沙箱(sandbox-e2b)或 Docker 沙箱。

Q2:和 LangChain Agents 比有什么区别?

smolagents 核心只有几百行代码,理念极简;LangChain 生态大但抽象层多。smolagents 适合研究和轻量场景,LangChain 适合企业复杂工作流。

Q3:免费额度够用吗?

Hugging Face Inference API 对注册用户有免费额度,跑几个示例任务足够;生产请用付费模型或自建端点。

Q4:支持 DeepSeek 吗?

通过 OpenAIServerModel,把 base_url 改成 https://api.deepseek.com/v1 即可。

Q5:为什么叫 "smol"?

"smol" 是网络俚语"小小的、可爱的",作者故意起这个名字表达"极简主义"——这个库真的只有几百行。

Q6:CodeAgent 和 ToolCallingAgent 怎么选?

新模型(GPT-4o、Claude 3.5、Qwen2.5)写代码能力强,优先 CodeAgent,灵活度高;老模型或只支持 function calling 的,用 ToolCallingAgent 更稳。

Q7:能和 LangChain 工具混用吗?

可以。from smolagents import LangChainTool 把任何 LangChain Tool 包一层即可。

八、跳转链接

评论交流

文章目录