为什么需要
AI Agent 写出 Python 代码后,传统执行方案是用 Docker / gVisor / Firecracker 跑一个隔离环境,安全性好但开销大——启动要几百毫秒,每个 Agent 实例都要一份资源。如果你要做的是「Agent 写 10 行代码做个数据处理」,容器启动比代码执行还慢。
Monty 是 Pydantic 团队(也是 ty 类型检查器、Logfire 可观测平台的同一拨人)专门为 LLM 写的 Python 解释器。它用 Rust 实现,只支持 Python 的子集(够 Agent 用,不支持第三方库、不支持 class 定义),换来的好处:
- 启动时间 < 1μs — 不是「比容器快」,是「比 CPython 启动快」
- 完全可观测的状态 — 解释器可以在外部函数调用点快照到字节流,存在数据库里、稍后恢复
- 可控的资源限制 — 内存、栈深度、运行时间都能限制,超了自动取消
- 可从 Rust / Python / JS 调用 — 因为不依赖 CPython,任何能跑 Rust 的地方都能用
- 安全沙箱 — 默认不能访问文件系统、环境变量、网络,全部走外部函数
典型场景:Agent 写一段 Python 脚本对 CSV 做处理,传统方案要 300ms 启动 + 50ms 执行 = 350ms,Monty 是 50μs 启动 + 50ms 执行 = 50ms,省 7 倍。
怎么用
Python 集成:
bash
pip install pydantic-monty
python
import monty
def get_data(url: str) -> str:
return requests.get(url).text
code = """
data = get_data("https://api.example.com/users")
users = json.loads(data)
print(f"用户数:{len(users)}")
"""
result = monty.execute(
code=code,
external_functions={"get_data": get_data}
)
print(result.stdout)
Rust 集成可以直接 monty::Interpreter::new(),异步执行用 monty.run_async()。
注意事项
- 实验性项目,版本号还在 0.x,API 可能变化
- 不支持第三方库(不能用 requests、pandas)
- 不支持 class 定义、不支持 match 语句(计划中)
- 内置支持:sys、os、typing、asyncio、re、datetime、json、dataclasses
- 类型检查完整支持现代 Python type hints,自带 ty 引擎
- 跑在 Serverless / Edge 环境里特别合适:冷启动比 Node.js 还快