Python 代码执行方案学习总结
前言
随着大语言模型(LLM)驱动的 AI Agent 广泛用于代码生成、数据分析和自动化任务,安全执行不可信代码成为关键挑战。本文系统梳理 Python 生态中主流的沙箱(Sandbox)实现方案,从高风险的轻量工具到生产级隔离平台。
一、高风险:语言层执行工具(非真正沙箱)
langchain_experimental.utilities.PythonREPL
PythonREPL
是 LangChain 提供的一个实验性工具,用于在 Agent 中执行 Python 代码。其本质是对 exec()
的封装,不具备安全隔离能力。
- 实现方式:在空命名空间中执行代码,重定向标准输出捕获结果。
- 安全风险:可轻易通过
__import__('os').system(...)
等方式执行任意系统命令、读写文件、发起网络请求 。 - 官方警告:明确提示“可在主机上执行任意代码(例如,删除文件,进行网络请求)。请谨慎使用” 。
- 适用场景:仅限完全可信的内部代码,绝不应用于处理 LLM 生成的不可信输入。
⚠️ 历史教训:该组件曾多次引发远程代码执行(RCE)漏洞(如 CVE-2023-38860、CVE-2024-38459)。
二、中等安全:基于 WebAssembly 的浏览器级沙箱
LangChain Sandbox(Pyodide 方案)
LangChain 官方推出的 @langchain/pyodide-sandbox
是一个面向 AI Agent 的安全执行环境,利用 Pyodide(Python 编译为 WebAssembly) 实现隔离 。
- 隔离原理:
- 代码运行在 WebAssembly 虚拟机中,内存与宿主隔离;
- 无直接系统调用权限,I/O 需通过显式 JS 接口授权;
- 继承浏览器或 Deno 运行时的安全边界 。
- 优势:
- 启动快、无需安装(可通过 Deno 直接运行);
- 支持无状态执行,适合 Serverless 架构;
- 默认禁用危险模块,天然防逃逸 。
- 局限:依赖 Pyodide 生态,部分 C 扩展库(如某些机器学习模型)可能不兼容。
✅ 推荐用于 Web 应用、轻量级 Agent 工具调用等场景。
三、生产级安全:容器化与平台化沙箱
1. llm-sandbox
项目地址:https://vndee.github.io/llm-sandbox/
llm-sandbox
是一个开源、轻量、可移植的沙箱环境,专为 LLM 生成代码设计 。
- 核心特性:
- 基于 Docker/Podman/Kubernetes 实现容器隔离 ;
- 支持多语言(Python、JS、Java、Go 等);
- 提供 Model Context Protocol (MCP) 服务,便于与 Claude、Cursor 等 AI 工具集成 。
- 安全机制:默认禁用网络、限制文件系统、执行后自动销毁 。
2. Daytona 平台
项目地址:https://github.com/daytonaio/daytona
Daytona 是一个完整的托管式平台(而非框架),为 AI Agent 提供弹性、安全的执行基础设施 。
- 关键特色:
- 极速启动:沙箱创建时间低于 90 毫秒(部分宣传称 27ms);
- 强隔离:基于 OCI/Docker 容器,支持任意镜像 ;
- 企业级能力:内置 Git、LSP 支持、网络出口防火墙、持久化状态管理 ;
- SDK 驱动:提供 Python SDK 用于程序化创建工作区、上传文件、执行代码 。
- 定位:面向生产环境的 AI 编码助手、自动化评测流水线等高并发场景 。
✅ Daytona 是目前功能最完整、性能最优的商业级 Agent 沙箱平台之一。
四、方案对比与选型建议
方案 | 隔离级别 | 启动速度 | 多语言 | 安全性 | 适用场景 |
---|---|---|---|---|---|
PythonREPL | 无(仅命名空间) | 极快 | Python | ❌ 极低 | 内部可信代码调试 |
LangChain Sandbox (Pyodide) | WASM 沙箱 | 快 | Python(Pyodide 支持库) | ✅ 中高 | Web 应用、轻量 Agent |
lmm-sandbox | 容器隔离 | 中 | 多语言 | ✅ 高 | 自建服务、开源项目 |
Daytona | 容器 + 平台管理 | 极快(<90ms) | 多语言 | ✅✅ 极高 | 企业级 AI Agent 产品 |
五、总结
- 永远不要信任语言层沙箱:如
exec
+ 白名单、AST 过滤等方案极易被绕过。 - 生产环境必须使用系统级隔离:容器(Docker)、微虚拟机(gVisor)或 WASM 是底线。
- 优先选择成熟平台:对于 AI Agent 应用,推荐使用 LangChain 官方 Pyodide 沙箱(轻量)或 Daytona(企业级)。
- 最小权限原则:即使使用沙箱,也应禁用网络、限制资源、避免持久化敏感数据。
安全无小事。在 LLM 时代,一个可靠的沙箱不是“可选项”,而是构建可信 AI 应用的基础设施基石。