Monty:Rust编写安全Python解释器,微秒级沙箱执行AI生成代码

AI新闻 AI工具箱
208

一、Monty是什么

Monty是Pydantic团队推出的一款实验性、轻量级、安全沙箱化Python解释器,底层由Rust语言实现,核心定位是安全运行LLM生成的Python代码,专为AI Agent、自动化工具、动态代码执行场景设计。

它不是完整的Python实现,不追求兼容全部Python语法与标准库,而是提供够用、可控、极快的执行环境,把“安全、速度、轻量”放在第一位,解决AI系统运行动态代码时的安全风险与性能瓶颈。

Monty的核心设计目标可以概括为三点:

  1. 绝对安全:默认完全隔离宿主环境,无文件、网络、环境变量访问权限,仅开放显式授权的外部函数。

  2. 极致快速:启动时间<1μs,远快于容器/进程沙箱,运行性能接近CPython。

  3. 高度可控:支持资源限制、状态快照、类型检查、异步执行、输出捕获等全生命周期管控。

它是Pydantic AI的Code Mode底层执行引擎,也是AI生态中“轻量级代码沙箱”的代表性方案。

二、功能特色

Monty围绕AI代码执行场景,提供一整套开箱即用的安全执行能力,核心特色如下:

1. 微秒级启动,性能接近CPython

  • 代码到执行结果耗时**<1μs**,容器沙箱通常需要数百毫秒。

  • 运行性能与CPython处于同一量级,多数场景在快5倍~慢5倍区间。

  • 无 heavy 依赖,内存占用极低,适合边缘、高并发、Serverless 环境。

2. 强隔离沙箱,默认零权限

  • 默认禁止文件系统、网络、环境变量、进程操作。

  • 代码无法逃逸、无法读写本地数据、无法发起网络请求。

  • 所有对外交互必须通过开发者显式注册的外部宿主函数完成。

3. 可控外部函数调用

  • 只允许调用你明确开放的函数。

  • 函数入参、出参可做类型校验与权限拦截。

  • 支持同步/异步函数,适配现代AI异步架构。

4. 执行状态快照与恢复

  • 在外部函数调用点可将变量、栈、指令指针完整序列化为字节。

  • 可存入数据库/文件,跨进程、跨服务、跨时间恢复执行。

  • 对长流程Agent、断点续算、分布式任务极其友好。

5. 完整现代Python类型支持

  • 支持Python类型提示(Type Hints)。

  • 内置ty类型检查器,单二进制即可做静态检查。

  • 无需依赖CPython环境,实现轻量级类型安全。

6. 资源使用硬限制

  • 可限制内存、执行时间、栈深度、循环次数、分配大小。

  • 超限自动终止,防止死循环、恶意耗资源攻击。

7. 多语言绑定,无CPython依赖

  • 可从Rust、Python、JavaScript直接调用。

  • 不依赖CPython,可编译到WASM,在浏览器/边缘运行。

8. 输出捕获与执行管控

  • 自动捕获stdout/stderr,返回给调用方。

  • 支持暂停、继续、终止、异常捕获全流程控制。

9. 异步原生支持

  • 内部异步事件循环与宿主异步框架无缝对接。

  • 适合AI Agent并发工具调用、批量请求处理。

Monty 与传统沙箱方案核心对比表

方案 启动速度 隔离级别 资源开销 复杂度 适合场景
Monty 微秒级 进程内强隔离 极低 极低 LLM代码、AI Agent、轻量动态逻辑
容器沙箱 百毫秒级 系统级强隔离 高 高 全功能不可信代码
子进程 毫秒级 系统弱隔离 中 中 简单脚本执行
CPython 沙箱 毫秒级 弱隔离 中 高 受限环境执行

三、技术细节

Monty的技术架构围绕“安全、轻量、可控”设计,核心实现如下:

1. 语言与底层

  • 核心实现:Rust,内存安全、无GC、高性能。

  • 解释器类型:递归下降解释器,轻量无JIT。

  • 目标语法:Python子集,专注AI Agent常用逻辑。

  • 无外部依赖,单二进制即可部署。

2. 安全模型

  • 最小权限原则:默认关闭所有系统能力。

  • 白名单机制:仅允许调用显式注册的宿主函数。

  • 状态不可逃逸:解释器状态完全封闭,不泄露宿主信息。

  • 资源硬限额:内存/时间/栈深度三重限制。

3. 执行流程

  1. 代码解析 → 2. 类型检查 → 3. 编译为内部字节码 → 4. 沙箱执行 → 5. 外部函数调用(可快照)→ 6. 结果返回/状态保存

4. 状态快照机制

快照包含:

  • 全局/局部变量

  • 调用栈

  • 程序计数器

  • 异步任务状态

  • 内部堆数据

序列化后为紧凑字节流,可存储、传输、恢复。

5. 支持的语法子集

  • 变量、赋值、表达式

  • 条件判断(if/elif/else)

  • 循环(for/while)

  • 函数定义(def/async def)

  • 基础数据结构(list/dict/set/tuple)

  • 类型注解与类型检查

  • 基础异常处理

  • 即将支持:class定义、match语句

6. 不支持的内容(明确非目标)

  • 完整Python标准库

  • 第三方Python包(如Pydantic、Requests)

  • C扩展模块

  • 系统级API(os、sys、subprocess等)

四、应用场景

Monty专为AI动态代码执行设计,典型场景如下:

1. AI Agent 代码执行(核心场景)

  • LLM生成Python代码做工具调用、数据处理、逻辑路由。

  • 安全执行多步循环、并发请求、条件判断。

  • 代表:Pydantic AI Code Mode、Cloudflare CodeMode。

2. LLM 程序化工具调用

  • 替代单轮工具调用,用一段代码完成批量操作。

  • 减少模型往返次数,提升效率与可靠性。

3. 低代码/无代码平台规则引擎

  • 用户/AI配置的公式、脚本、自动化流程。

  • 安全隔离,防止越权操作。

4. 边缘与Serverless代码执行

  • 启动极快、资源极小,适合高并发、短生命周期任务。

5. 教育与在线代码运行

  • 安全运行用户提交的练习代码,无逃逸风险。

6. 插件系统与动态逻辑

  • 应用内插件脚本,隔离宿主程序。

Monty(图1)

五、使用方法

Monty提供Python绑定,开箱即用,以下为完整使用流程。

1. 安装

使用pip或uv:

pip install pydantic-monty
# 或
uv add pydantic-monty

2. 最简表达式执行

import pydantic_monty

m = pydantic_monty.Monty("1 + 2 * 3")
print(m.run()) # 输出 7

3. 带输入变量

import pydantic_monty

m = pydantic_monty.Monty("x + y", inputs=["x", "y"])
print(m.run(x=1, y=2)) # 3

4. 外部函数调用(核心能力)

import asyncio
import pydantic_monty

async def add(a: int, b: int) -> int:
  return a + b

code = """
async def main():
  return await add(2, 3)
"""

async def run():
  m = pydantic_monty.Monty(code, external_functions={"add": add})
  result = await m.run_async()
  print(result) # 5

asyncio.run(run())

5. 状态快照与恢复

import pydantic_monty

m = pydantic_monty.Monty("x = x + 1", inputs=["x"])

# 第一次运行
m.run(x=1)
# 快照
state = m.dump()

# 恢复并继续
m2 = pydantic_monty.MontySnapshot.load(state)
result = m2.resume()
print(result.output) # 2

6. 资源限制

import pydantic_monty

limits = pydantic_monty.Limits(
  max_memory_bytes=1024*1024,
  max_instructions=10000,
  max_stack_depth=100
)

m = pydantic_monty.Monty("while True: pass", limits=limits)
# 会因超限终止

六、常见问题解答(FAQ)

Monty是完整的Python解释器吗?

不是,Monty是Python子集实现,专注AI Agent所需的核心逻辑,不兼容全部标准库与第三方包,也不替代CPython。

Monty的安全性如何保证?

默认零权限,完全隔离文件、网络、系统调用;仅允许白名单函数;资源硬限制;Rust内存安全,无缓冲区溢出与野指针风险。

Monty可以运行Pandas、NumPy、Requests吗?

不可以,也不是设计目标。Monty不加载任何第三方Python包,所有外部能力必须通过宿主函数提供。

Monty启动速度真的是微秒级吗?

官方数据显示代码到执行<1μs,实际场景中通常在微秒级别,远快于容器、VM、子进程等方案。

Monty可以在浏览器/WASM运行吗?

可以,Monty基于Rust实现,可编译为WASM,在浏览器、边缘函数等无系统环境中安全执行。

Monty支持异步代码吗?

支持,原生支持async/await,可与Python/JavaScript/Rust异步框架无缝集成。

状态快照可以存在数据库里吗?

可以,快照是普通字节数据,可存入SQL、Redis、文件、对象存储等任意介质。

Monty生产环境可用吗?

目前处于实验阶段,API与功能可能变化,Pydantic团队正在快速迭代,适合尝鲜、研究、非核心业务场景。

Monty与RustPython有什么区别?

RustPython目标是完整兼容Python;Monty目标是安全沙箱运行AI生成代码,更小、更快、更安全,但语法更少。

Monty会开源免费吗?

会,Monty采用开源协议,完全免费,由Pydantic团队维护。

七、相关链接

八、总结

Monty是Pydantic团队面向AI时代推出的轻量级安全Python解释器,以Rust构建、沙箱隔离、微秒启动、状态快照、跨语言调用为核心能力,精准解决LLM生成代码执行的安全与性能痛点,它不追求全功能Python兼容,而是专注AI Agent、自动化工具、动态规则等场景的极简安全执行需求,通过白名单函数、资源限额、状态持久化等机制提供可控可靠的运行环境,目前已作为Pydantic AI Code Mode的底层引擎,成为AI生态中轻量级代码沙箱的重要方案,为开发者提供了一种告别重型容器沙箱、转向高效安全动态代码执行的全新选择。

打赏
THE END
作者头像
AI工具箱
一个喜欢收集AI工具的小萌新