smolagents
让大模型用代码驱动行动,轻量级代码优先AI Agent框架,支持任意LLM和工具链
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让大模型用代码驱动行动,轻量级代码优先AI Agent框架,支持任意LLM和工具链
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你对一个大语言模型说「帮我分析这个月的销售报表」,它不是机械地查数据库、输出表格,而是像一位经验丰富的数据分析师一样,先写一段 Python 代码探查数据结构,再根据输出调整查询逻辑——每一步都「想清楚」再行动。smolagents 正是为此而生:它让大模型用代码驱动行动,而不是用一长串预设指令。
2024 年,HuggingFace 团队在复盘大量 Agent 项目后,注意到一个根本性问题:大多数 Agent 框架让大模型「生成文本」,然后用文本去触发工具。但文本本身是模糊的、上下文受限的,模型很难精确表达「我要在内存中创建一个字典并反复查询」这样的意图。
smolagents 的核心洞察是:让模型直接生成并执行 Python 代码。代码具有天然的结构化、确定性、可组合性——这些恰恰是自然语言的弱项。通过代码执行,Agent 可以动态构建变量、操作文件、调用 API、循环推理,而无需依赖框架预设的「工具链编排」逻辑。
这一理念与 OpenAI 的 Code Interpreter、Anthropic 的 Computer Use 方向一致,但 smolagents 更极致:它的核心逻辑全部围绕「代码即行动」设计,Agent 本身约 1000 行代码搞定(见 agents.py),没有沉重的抽象层。
smolagents 提供三种 Agent 类型,其中 CodeAgent 是当家花旦,也是最接近「代码即行动」理念的实现。
CodeAgent 的执行流程如下:
prompts/ 目录加载 YAML 模板,结合用户任务、Jinja2 渲染成系统提示词python 格式的代码块(而非 JSON tool_calls)local_python_executor.py 验证代码安全性(检查危险函数如 os.system、eval)LocalPythonExecutor 在本地 Python 解释器执行,或通过 RemoteExecutor(E2B/Blaxel/Modal/Docker)沙箱执行FinalAnswerTool() 输出最终结果,或达到最大步数限制。代码执行绕不开安全话题。smolagents 做了多层防护:
fix_final_answer_code:如果检测到模型试图直接输出 FinalAnswer 而非通过工具调用,自动修复为合规形式validate_tool_arguments:每个工具调用前验证参数类型,防止注入攻击local_python_executor.py 中明确禁止 __import__、eval、exec 等高危操作smolagents 的代码结构简洁而有序,核心模块各司其职:
| 模块 | 文件 | 职责 |
|---|---|---|
| Agent 核心 | agents.py (~1000行) | Agent 执行循环、消息管理、步骤跟踪 |
| 模型抽象 | models.py | 支持 HF InferenceClient、OpenAI、Anthropic、LiteLLM、vLLM、本地 Transformers |
| 工具系统 | tools.py / default_tools.py | 工具基类、内置工具(搜索、网页访问、文件读写等) |
| 内存管理 | memory.py | AgentMemory 维护历史步骤、ToolCall、ActionStep,支持回调扩展 |
| 代码执行 | local_python_executor.py | 本地安全 Python 执行器 |
| 远程执行器 | remote_executors.py | E2B、Blaxel、Modal、Docker 沙箱适配 |
| Web UI | gradio_ui.py | 可选 Gradio 界面,快速 Demo |
| 提示词 | prompts/ | YAML 模板,可完全自定义 Agent 行为 |
这种分层设计的最大好处是:替换任何组件都不影响其他部分。你想换模型?改一行 model=OpenAIModel(...)。你想换执行器?换 LocalPythonExecutor 为 E2BExecutor。 |
smolagents 真正做到了模型无关(Model-agnostic)。通过统一的 Model 抽象接口,你可以热插拔不同的模型后端:
transformers + accelerate 驱动的本地模型,或 Ollama工具层面同样开放:
WebSearchTool(DuckDuckGo)、VisitWebpageTool(抓取+总结网页)、FinalAnswerTool 等开箱即用ToolCollection.from_mcp() 让你直接复用 Model Context Protocol 生态中的任何工具Tool.from_langchain() 一行导入 LangChain 工具Tool.from_space() 把任何一个 HF Space 当工具用——想象把 GPT-4o Vision 当视觉工具调用BaseTool,实现 _call 方法即可smolagents 的设计哲学是「小而美」,部署极简:
# 最简安装(仅核心)
pip install smolagents
# 带搜索+网页访问工具(推荐)
pip install "smolagents[toolkit]"
# 全量依赖(含 Gradio UI、Docker、沙箱、vLLM 等)
pip install "smolagents[all]"
Python >= 3.10 即可,无需 GPU,无 Dockerfile(纯库模式)。如果需要 Web UI,可选装 Gradio:
from smolagents import CodeAgent
from smolagents.gradio_ui import GradioUI
agent = CodeAgent(tools=[...], model=...)
GradioUI(agent=agent).launch()
这会启动一个 Gradio 界面,供非技术用户通过浏览器与 Agent 交互。
smolagents 并非银弹,以下场景需谨慎:
smolagents 作为依赖安装。smolagents 代表着 AI Agent 的一个重要方向:Code-first Agent。相比传统的 JSON-tool-call 模式,代码生成的优势在于:
transformers 库奠定了 NLP 预训练模型的事实标准,如今 smolagents 正在尝试对 Agent 框架做同样的事——提供一个事实标准,让研究者和工程师可以围绕它快速构建、分享、迭代 AI Agent。
截至分析日,smolagents 已有 27,822 Stars、2,680 Forks,592 个 Open Issues——这个活跃度说明社区对其方向的广泛认可。
总结:smolagents 是一款「刚刚好」的 Agent 框架——核心代码量少(~1000行 Agent 逻辑),但扩展性极强,支持任意模型和任意工具链。适合想深入理解 Agent 工作原理、快速原型验证、或在生产环境构建定制化 AI Agent 的开发者。