1 微秒 vs 195 毫秒。
这不是什么赛车成绩,而是运行一段 Python 代码的启动耗时差。
老实讲,看到这个数字对比的时候,我第一反应是是不是搞错了小数点。但这事儿偏偏就是真的。Pydantic 团队搞了个新项目叫 Monty,号称是用 Rust 写的“最小化、安全”的 Python 解释器,专门为了给 AI 用。
这玩意儿的目标非常直接:干掉那些笨重的容器沙箱,让 LLM 写的代码跑得飞快,还绝对安全。
现在的 AI 圈子有个大痛点:让大模型写代码去执行任务,比传统的“工具调用”要快得多、也聪明得多。但问题来了,你敢让 AI 在你的服务器上随便跑 exec() 吗?不敢。那怎么办?大家都塞进 Docker 容器里,搞隔离。
安全是安全了,但代价太大了。
启动一个容器要几百毫秒,还得折腾镜像、搞网络隔离、防逃逸。这对于追求毫秒级响应的 AI Agent 来说,简直就是骑驴找马——太慢了。
Monty 说:把 Docker 扔了吧。
它是 Python,但也是个“残废”的 Python
Monty 的核心逻辑非常“反直觉”。
既然是给 AI 写的代码跑,那就要把 Python 砍得只剩下骨头。没有标准库(除了 sys, typing 等几个基础模块),不支持第三方库,甚至连类定义和 match 语句目前都还没支持。
有人可能要喷了:这还能叫 Python?
但我个人觉得,这正是 Monty 聪明的地方。
你想啊,AI 写代码是为了干什么?是为了处理逻辑,而不是为了 import 一堆乱七八糟的库去搞复杂操作。Monty 把那些危险的、容易出错的、拖慢速度的功能全砍了,只留下核心逻辑。
而且,它把文件系统、环境变量、网络访问全给堵死了。AI 想读写文件?想联网?没门。除非你显式地把某个函数“喂”给它,它只能通过这个外部函数去跟外界交互。
这就好比你给了一把没有刀刃的刀柄,想捅人?没门,只能用来敲敲桌子。
“暂停”和“快照”,这才是杀手锏
有意思的是,Monty 虽然小,但有些功能却比原生 Python 还科幻。
它支持 “快照”。
什么意思呢?就是代码跑到一半,比如在等待一个外部函数返回结果的时候,你可以把当前的解释器状态——内存、栈、变量统统打包成一串字节,存进数据库或者文件里。
过一会儿,你甚至可以在另一台机器上,把这串字节读出来,接着刚才的地方继续跑。
这对于处理异步任务或者长流程的 Agent 来说,简直是神技。不用一直占着进程,想停就停,想续就续。
这让我想起了以前玩单机游戏的“存档”功能,只不过这次存的是代码运行的灵魂。
为什么不用 Docker?为什么不用 WASM?
这可能是大家最想问的问题。
Monty 的作者直接甩出了一张对比表,把市面上主流的几种方案怼了个遍。
Docker?
启动慢(195ms),镜像大(50MB+),还得装 Docker 守护进程。对于高频次、短任务的 AI 调用来说,这就好比你为了寄封信,每次都要造一辆卡车。
WebAssembly (WASM)?
看着挺美,实际上坑不少。把 Python 编译成 WASM,冷启动要 2800ms!这比 Docker 还慢一个数量级。而且包体巨大(Pyodide 12MB),在服务器端做安全隔离也是个麻烦事。
云服务(Modal, E2B)?
虽然省心,但那是按秒收费的,而且有网络延迟。对于很多企业来说,把核心代码执行丢给别人,心里总是不踏实。
直接用 exec()?
找死。没有任何隔离,AI 随便写个 os.system('rm -rf /') 你就完了。
相比之下,Monty 的启动时间是个位数微秒,包体只有 4.5MB,还是单文件。没有 Docker 守护进程,没有复杂的网络配置,装上就能跑。
程序员的“精神分裂”
看完 Monty 的介绍,评论区里出现了两种截然不同的声音,非常真实。
一种是:“天哪,这正是我想要的!终于不用折腾 Docker 了!”
另一种是:“为什么不直接用 X?这有什么必要吗?”
这其实反映了当下 AI 基础设施建设的一个尴尬现状:大家都在用旧时代的工具(容器、虚拟机)去硬套新时代的需求(AI Agent)。
有人问,既然要重写,为什么不用更快的语言,比如 Java?
也有人问,为什么不用 seccomp 限制系统调用,非要重写一个解释器?
我觉得 Monty 团队的回答很坦诚:现有的技术都有它的道理,但在“让 AI 安全、快速地写代码”这个特定场景下,它们都不够完美。
有时候,为了解决一个极其垂直的问题,最好的办法就是从头造一个极其专用的工具。
尾声
Monty 目前还是实验性的,连类定义都不支持,离“生产就绪”还有段距离。但它指出的方向却很清晰:
AI 时代的运行时,可能不需要那么“通用”,但必须足够“快”和“安全”。
如果未来我们的代码主要是由 AI 来写的,那我们用来运行这些代码的工具,是不是也该换个活法了?
这就好比,以前我们开卡车是为了拉货,现在如果货变成了一个个比特流,也许我们需要的不再是卡车,而是一束光。
参考链接:
https://github.com/pydantic/monty