尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Monty入门完全指南:3步安全运行AI生成的Python代码(新手友好)

Monty入门完全指南:3步安全运行AI生成的Python代码(新手友好) Monty入门完全指南3步安全运行AI生成的Python代码新手友好【免费下载链接】montyA minimal, secure Python interpreter written in Rust for use by AI项目地址: https://gitcode.com/GitHub_Trending/monty3/montyMonty 是一个用 Rust 编写的极简、安全的 Python 解释器专为运行 AI 生成的代码而设计。它不需要 Docker 容器或沙箱服务就能在微秒级启动并安全执行 LLM 写出的 Python 代码——本文带你用 3 步完成上手。什么是 Monty为什么 AI 需要它当 AI 智能体Agent被要求写一段代码来完成任务时这些代码总得有个地方运行。常见的选择各有硬伤方案启动延迟安全隔离上手难度Monty0.06ms微秒级严格简单Docker 容器约 195ms较好中等Pyodide (WASM)约 2800ms较弱中等沙箱云服务约 1000ms严格中等直接exec()执行近零几乎没有简单但危险Monty 的核心思路很清晰沙箱内没有权限就不会有危险。 没有文件系统访问——除非你主动挂载目录 没有环境变量、网络、子进程——socket、subprocess、ctypes等模块根本不存在 没有eval、exec、__import__——这些名字在沙箱里查无此名✅ 唯一能越狱的途径是你主动提供的宿主函数host functions完全由你控制 简单说Monty 不是通用 Python 解释器它只做一件事——安全地运行智能体写的短代码。第1步一键安装 MontyMonty 同时提供 Python、JavaScript 和 Rust 三种调用方式都从同一个 Rust 核心构建而来。对新手来说Python 包最简单pip install pydantic-monty或者使用 uvuv add pydantic-monty安装只需约 4.5MB 下载无需 Docker、无需 CPython 依赖、无需额外配置。安装后你就自动获得了monty命令行工具可以立即试玩monty -c print(hello world)前置要求Python 3.10 或更高版本。详细说明见项目内 安装文档。第2步运行你的第一段沙箱代码Monty 的 Python API 遵循池Pool→ 会话Session模式所有代码都在独立的 worker 子进程中执行即使恶意代码触发内存错误死掉的也只是 worker你的主进程毫发无伤此时会抛出MontyCrashedError。最小示例from pydantic_monty import Monty with Monty() as pool: with pool.checkout() as session: print(session.feed_run(1 2)) # 输出: 3会话是有状态的多次feed_run共享同一套全局变量session.feed_run(x 40) print(session.feed_run(x 2)) # 输出: 42如何把宿主函数交给沙箱AI 写的代码经常需要调用你的真实工具查天气、读数据库等。通过external_lookup把宿主函数递进沙箱即可——沙箱执行到函数调用时会暂停由你的代码在宿主侧执行再把结果传回去def get_temperature(city: str) - float: return 21.5 result session.feed_run( f{get_temperature(London)} degrees, external_lookup{get_temperature: get_temperature}, ) # 输出: 21.5 degrees⚠️ 注意Monty 保证沙箱碰不到你没给的东西但保证不了你给的东西是安全的。请像处理任何不可信输入一样在宿主函数内部校验参数。第3步加上资源限制让沙箱更坚固不可信代码迟早会尝试死循环或疯狂吃内存。Monty 提供每会话的资源上限一行配置即可防御limits { max_memory: 10_000_000, # 堆内存上限字节 max_duration_secs: 1.0, # 累计执行时间上限秒 max_recursion_depth: 100, # 函数调用栈深度上限 } with Monty() as pool: with pool.checkout(limitslimits) as session: session.feed_run(while True:\n pass) # 触发 TimeoutError而不是把你的机器跑满几个关键细节⏱️max_duration_secs统计的是累计执行时间等待宿主函数时时钟暂停 可预测的大分配如x * 10**12会在分配前预检查并立即失败而不是耗尽内存️ 内存/超时限制触发后建议直接丢弃该会话用新的checkout()重试推荐的安全配置清单配置项建议limits必设max_memory与max_duration_secsrequest_timeout宿主侧兜底超时防止 worker 卡死type_checkTrue运行前做类型检查不支持的 API 提前报错binary_path运行不可信代码时显式指定 worker 二进制路径Monty 支持哪些 Python 代码Monty 实现了让模型表达意图所需的 Python 子集行为与 CPython 3.14 一致✅ 函数、闭包、lambda、装饰器、简单类无继承、dataclass✅ 列表/字典/集合推导式、f-string、try/except/finally✅async/await、asyncio.run与asyncio.gather✅ 14 个标准库模块json、math、re、datetime、collections、itertools等明确不支持的部分解析期即拒绝❌ 类继承、super()、classmethod/property❌ 生成器yield、match语句、del❌ 第三方库没有sys.path不支持 site-packages❌ 自定义异常类完整的特性差异清单在仓库的 limitations 目录 中有逐条说明每篇对应一个标准库模块。从哪继续学核心资料导航资料路径内容安装指南docs/install.mdPython / JS / Rust / CLI 四种安装方式Python 快速上手docs/quickstart/python.md池、会话、异步、错误处理全解析安全模型docs/security.md安全在这里的确切含义与边界宿主函数docs/host-functions.md沙箱调用宿主工具的完整机制资源限制docs/resource-limits.md四个限制项的含义与踩坑细节Python 子集docs/python-subset.md支持/拒绝的特性总览实战示例examples/费用分析、SQL 沙箱、网页爬虫 3 个完整案例核心解释器源码crates/monty/解析器、字节码 VM、沙箱实现子进程池crates/monty-pool/Python/JS 包底层的崩溃隔离引擎常见问题 FAQQ1Monty 和 Docker 沙箱二选一吗不是。如果你的代码需要pandas这样的真实 Python 生态容器仍是正确选择。Monty 的甜蜜区是模型写的、短生命周期的、主要是调用你已有工具的胶水代码。Q2它真的安全吗Monty 是语言级沙箱而非 OS 级沙箱——没有 seccomp、没有容器隔离来自解释器本身根本不实现任何触碰宿主的操作。项目标注为实验性、尚未独立审计请把它视为有测试背书的设计意图。另外 worker 子进程启动时环境是空的宿主密钥根本不会进入沙箱的内存。Q3能用于生产环境吗Monty 即将作为 code mode 能力集成进 Pydantic AI 框架。目前项目处于实验阶段公开 API 可能在版本间变化生产使用请固定版本并留意更新日志。Q4JavaScript 和 Rust 用户呢JS 用户npm install pydantic/monty即可浏览器端还有 WASM 构建Rust 用户推荐monty-poolcrate 获得与 Python 包相同的崩溃隔离。详见docs/quickstart/javascript.md和docs/quickstart/rust.md。 恭喜你已经掌握了用 Monty 安全运行 AI 代码的完整流程安装 → 运行沙箱会话 → 配置资源限制。下一步建议打开examples/web_scraper/看一个AI 在沙箱里写爬虫的完整实战。【免费下载链接】montyA minimal, secure Python interpreter written in Rust for use by AI项目地址: https://gitcode.com/GitHub_Trending/monty3/monty创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表