AI代码执行不用Docker行不行?Pydantic说可以
用 Docker 跑 AI 生成的代码?Pydantic 说你可以不用那么重
你有没有被这个问题卡住过——AI 给你生成了一段 Python 代码,你想跑,但不敢直接在本地执行。担心有恶意依赖,担心文件被改,担心网络请求悄悄发出。
大多数人的解法是:Docker 容器。
但 Docker 冷启动要 1500ms。对于需要频繁执行 AI 代码的 Agent 场景,这个开销是不可接受的。想象一下,你的 AI 编程助手每次给你运行代码都要等 1.5 秒——那个体验就像每次点发送都要等半天才看到回音。
Pydantic 刚发布的 Monty,给出了第三种答案。
用 Rust 写一个专用的安全沙箱
Monty 是一个用 Rust 编写的轻量级 Python 解释器,专门用来安全地运行 AI 生成的代码。它的核心思路非常清晰:与其用容器隔离,不如用语言层隔离。
关键数字:
- 冷启动:< 1ms(从已预热的连接池)
- 完整 Agent 运行(10 条 REPL 命令):< 2ms
- 对比竞品:Docker 沙箱 = 1900ms,Pyodide = 2735ms
这个差距不是 10% 的优化,是三个数量级的体验跃升。
怎么做到这么快的
Monty 没有走传统的虚拟化路线。它本质上是一个用 Rust 重写的 Python 3.14 解释器,专注于”只运行 AI 生成的代码片段”这个极窄场景。
在安全模型上,它做了很保守的设计:
- 沙箱内部没有文件系统(读取不到你本地的 .env 和 SSH keys)
- 没有网络访问(不会悄悄把数据外发)
- 没有环境变量(AI 代码看不到你的本地配置)
AI 代码唯一能接触外部世界的方式,是你主动传递进去的函数和挂载。比如下面这个例子中,nutrition 函数运行在宿主机,沙箱里只能拿到返回值:
from pydantic_monty import Monty
code = """
kcal = nutrition('chocolate bar')['kcal']
hours = kcal * 4184 / (bulb_watts * 3600)
print(f'a chocolate bar powers a {bulb_watts} W bulb for {hours:.1f} hours')
"""
with Monty() as pool:
with pool.checkout() as session:
session.feed_run(
code,
inputs={'bulb_watts': 10},
external_lookup={'nutrition': lambda food: {'kcal': 230}},
)
这行代码在沙箱里运行,只能调用你允许它调用的函数,所有危险操作都被屏蔽。
谁在用 Pydantic:自己先跑通再开源
值得注意的一点是,Monty 不是一个实验室项目。Pydantic 已经在自己的产品里大规模使用了它——Pydantic AI 框架的 Code Mode(代码执行模式)底层跑的就是 Monty。换句话说,这个工具已经在生产环境里经过了真实流量的验证,然后才开源给社区。
这很 Pydantic。他们做事的风格一贯是:自己的东西先跑通,再拿出来。
适合谁来用
如果你符合以下任一场景,Monty 值得关注:
- 正在做 AI Agent 开发:需要在 Agent 里安全执行用户提交的代码,不想引入 Docker 的运维复杂度
- 做 AI 应用后端:想给 AI 代码执行提供安全保障,而不是”祈祷它不会做坏事”
- 需要 Code Interpreter 能力:类似 GPT-4 的代码执行,但想自托管、轻量化、毫秒级响应
上手也非常简单:
# Python
uv add pydantic-monty
# JavaScript / TypeScript
npm install @pydantic/monty
# Rust
cargo add monty
文档在 pydantic.dev/docs/monty,包括 Python、JS、Rust 三种语言的快速入门。
GitHub:https://github.com/pydantic/monty
AI 代码执行这件事,Docker 不是终点。Pydantic 正在用 Rust 重新定义什么叫「既快又安全」。
评论区
登录后可评论。