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

原创 发布日期:
62

一、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:Rust编写安全Python解释器,微秒级沙箱执行AI生成代码

五、使用方法

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工具的小萌新