# Hugging Face 代码智能体默认在本机执行 LLM 代码

> 54 分钟的 smolagents 课程讲清代码智能体为何胜过 JSON 工具调用，以及代码该在哪里运行。

原文: https://fdetimes.net/zh/books-courses/smolagents-course-code-agents-review/

DeepLearning.AI 这门讲代码智能体的课程，围绕一个大胆的主张展开：智能体应该自己写代码，而不是一次调用一个工具。

然而 smolagents 文档自己也写得很明白：默认情况下，CodeAgent 会在你自己的环境里运行 LLM 生成的代码。前线部署工程师（FDE）学这门课，两方面都要弄懂：代码智能体为什么强大，以及它写出的代码到底在哪里运行。

课程全名是 *Building Code Agents with Hugging Face smolagents*，是 DeepLearning.AI 与 Hugging Face 合作推出的一门中级短课。

如果你正要把智能体接入客户系统，或者在申请应用 AI 方向的 FDE 岗位，这门课能让你很快掌握一种与常见 JSON 工具调用截然不同的智能体设计思路，也能让你知道这套思路里哪些部分还不能安全部署。

## 向写库的人学这个库

两位讲师是 Hugging Face 联合创始人兼首席科学官（CSO）Thomas Wolf，以及 Hugging Face 项目负责人 Aymeric Roucher。由库的作者亲自讲库，这是优势；但当他们为自己的设计选择辩护时，也要保持一点距离。

课程于 2025 年 4 月上线，此后有过修订。当前版本时长 54 分钟，从代码智能体的概念讲起，经过安全代码执行和智能体评测，最后搭建一个深度研究智能体。

学习门槛只需基础 Python 和对 LLM 的一定了解。平台测试期内课程免费，但评分作业需要 PRO 账户，推荐给同事前请先确认条款。

## 思路一：把多个步骤合进一段代码

工具调用型智能体是一步一步走的：调用工具，拿到结果，再决定下一步。代码智能体则把这些调用合并进一段代码。smolagents 两种都提供：`CodeAgent` 用代码表达动作，`ToolCallingAgent` 沿用 JSON 风格。

设想一家零售客户需要一个智能体，找出 5 家门店中哪一家近 12 个月销售额下滑最严重。JSON 方式要先发出下面这样 5 次调用，每次都要和模型往返一轮，然后才能开始比较：

```json
{"tool": "get_sales", "args": {"branch": "B1", "months": 12}}
{"tool": "get_sales", "args": {"branch": "B2", "months": 12}}
{"tool": "get_sales", "args": {"branch": "B3", "months": 12}}
{"tool": "get_sales", "args": {"branch": "B4", "months": 12}}
{"tool": "get_sales", "args": {"branch": "B5", "months": 12}}
```

代码智能体一次就能完成整件事：遍历 5 家门店，把结果存进 Python 变量，计算变化百分比，然后返回答案。

```python
changes = {}
for b in ["B1", "B2", "B3", "B4", "B5"]:
    s = get_sales(branch=b, months=12)
    changes[b] = (s[-1] - s[0]) / s[0] * 100
worst = min(changes, key=changes.get)
print(worst)
```

Hugging Face 认为代码在三方面胜过 JSON：可组合性、更好的对象管理和通用性。它还指出，编程语言本来就是为描述计算机该做什么而设计的。

这个设计立场很有说服力，但并非定论。请在真实的客户任务上把两种智能体都跑一遍，让数据说话。

## 思路二：模型写的代码是不可信代码

对 FDE 来说，Secure Code Execution 这一课最值得花时间。智能体一旦开始写代码、跑代码，它读到的任何文本，从邮件、网页到内部文档，都可能夹带提示词注入（prompt injection）。smolagents 文档点名的正是这一风险。

如果默认配置直接在客户服务器上运行代码，一条恶意命令就能直接进入客户系统。

文档也坦承，本地 Python 沙箱并不够用。真正可靠的隔离要靠远程执行，例如 E2B 或 Docker。CodeAgent 还支持 Modal、Blaxel 等沙箱。

**要点:** 把模型写的代码当成陌生人写的代码。

到了客户现场，第一件事是问安全团队允许使用哪些容器或沙箱服务。这个答案在选模型之前就决定了架构。

## 思路三：多智能体在 notebook 里简单，进了沙箱就难

最后一课搭建深度研究智能体，并讨论多智能体系统。演示很吸引人，但这里的文档值得细读。简单的沙箱方案只把单段代码发往隔离环境，不支持用托管智能体（managed agents）搭建的多智能体结构。要让它们跑起来，必须把整个智能体系统放进沙箱。

所以，如果客户想要一个多智能体“研究助手”，部署架构会和 notebook 版本大不相同。设计和评测的内容可以沿用，基础设施则要从头重新规划。

Monitoring and Evaluating 一课起到衔接作用：如果无法度量一个智能体，就无法向客户证明再加一个智能体有帮助。

## 谁适合学，按什么顺序学？

这门课适合已经熟练调用 LLM API、想从架构层面理解智能体的工程师。先看导论，然后在 Secure Code Execution 上多花时间，之后再学评测和深度研究。

学完后，去读 smolagents 官方文档中关于安全代码执行的部分，那里把局限讲得最清楚。

就职业发展而言，建议不要止步于证明自己能搭智能体。招聘经理想看到的，是你懂得如何把智能体安全地带进生产环境。

一个小型代码仓库，在同一任务上对比 CodeAgent 和 ToolCallingAgent，跑在 Docker 里，并附上一张评测结果表，比一张证书更有说服力。

简历上要写你如何隔离和度量智能体，而不只是说自己“搭建过智能体”。

54 分钟的课程足以改变你对智能体的理解。而在客户现场赢得信任的，是你清楚智能体写出的代码会在哪里运行。

**本周动手试试:**

- 从实际工作中挑一个多步骤任务，分别用 CodeAgent 和 ToolCallingAgent 运行，记录各自的步骤数和错误数
- 把这个 CodeAgent 改为在 E2B 或 Docker 中运行而非本地运行，再写一页笔记，记下哪些地方必须修改
- 写一行简历，说明你如何隔离智能体生成的代码、如何用数据评测智能体，并附上代码仓库链接

## 信源

- [Building Code Agents with Hugging Face smolagents - DeepLearning.AI](https://www.deeplearning.ai/short-courses/building-code-agents-with-hugging-face-smolagents/)

- [New course! Enroll in Building Code Agents with Hugging Face smolagents - DeepLearning.AI Community](https://community.deeplearning.ai/t/new-course-enroll-in-building-code-agents-with-hugging-face-smolagents/804915)

- [smolagents - Hugging Face documentation](https://huggingface.co/docs/smolagents/index)

- [Secure code execution - smolagents documentation](https://huggingface.co/docs/smolagents/tutorials/secure_code_execution)

- [Introducing smolagents, a simple library to build agents - Hugging Face Blog](https://huggingface.co/blog/smolagents)
