AI Agent是一把双刃剑。它在生成并执行 Python 代码来进行高效计算、调用 API 或处理数据时,也带来了破坏系统、泄露敏感数据,或是过度消耗资源的风险。
现有的隔离方案各有局限。Docker 容器安全性够高,但启动慢、资源开销大;直接用 exec() 执行则完全没有安全边界。
今天推荐的开源项目 Monty 是一个轻量级 Python 解释器。它基于 Rust 开发,非CPython 替代品,而是一个专为 AI 生成代码的安全、高效执行打造的定制化沙箱环境。
核心特性
极轻量启动,速度达微秒级
Monty 最直观的优势是极快的启动速度,能控制在 1 微秒以内。对比来看,Docker 容器启动约需 195 毫秒,基于 WebAssembly 的 Pyodide 冷启动更是需要近 3 秒。
这样的速度优势源于它的极简架构。Monty 不依赖完整的 Python 运行时,只内置了经过筛选的 Python 子集,在保证 AI 常用语法可用的前提下,把资源开销压到了最低。
默认拒绝的安全门禁机制
Monty 的安全机制采用默认拒绝的核心策略。代码默认无法访问文件、网络、环境变量等任何外部资源,只有开发者显式授权的操作才被允许。所有对外部函数的调用,都必须通过预先声明的接口完成:
# 外部函数必须显式声明m = pydantic_monty.Monty( code, inputs=['prompt'], external_functions=['call_llm'], # 仅允许调用此函数 type_check=True)
这套机制给系统加了一道专属门禁,哪怕 AI 生成了恶意代码,也无法突破限制进而影响宿主系统。另外,Monty 还支持全维度的资源监控,能跟踪内存使用、分配次数、堆栈深度与执行时间,一旦超出设定阈值就会自动中止运行。
状态快照,支持中断续跑
Monty 支持状态快照与持久化。它能在执行的任意节点(尤其是调用外部函数时),把整个解释器的状态序列化为字节数据。借助这一功能,你可以:
# 保存状态progress = m.start(inputs={'url': 'https://example.com'})state = progress.dump()# 恢复执行progress2 = pydantic_monty.MontySnapshot.load(state)result = progress2.resume(return_value='response data')
这个特性特别适合多轮对话、复杂工作流这类需要长时间运行或支持中断恢复的 AI 任务,能有效避免重复计算、提升任务连续性。
多语言绑定,适配全技术栈
Monty 充分考虑了多技术栈的集成需求,提供了 Python、JavaScript/TypeScript 及 Rust 的SDK,不管你用什么技术栈,都能轻松把它集成到现有系统中:
// 在 Rust 中使用 Montylet runner = MontyRun::new(code.to_owned(), "fib.py", vec!["x".to_owned()], vec![]).unwrap();let result = runner.run(vec![MontyObject::Int(10)], NoLimitTracker, &mut StdPrint).unwrap();
与现有方案的对比
Monty 在众多代码安全执行方案中定位明确:
| | | | |
|---|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| Monty | <1 µs | 高(沙箱) | Python 子集 | AI 生成代码安全执行 |
从表格中能看到,Monty 在速度、安全性与语言表达能力之间找到了精准的平衡点,尤其适合对启动延迟敏感、且需要严格隔离的 AI 代码执行场景。
总结
Monty 是针对 AI 生成代码并执行这种场景的解决方案。它通过实现常见逻辑的 Python 子集,结合基于能力的沙箱安全模型,让 AI 编写的代码既能快速运行,又能始终处于严格受控的环境中。
项目地址:https://github.com/pydantic/monty
点击下方卡片关注我,带你了解前沿技术发展。
欢迎点赞、推荐 和评论,转发让更多的人看到。