Guide · 使用教程
E2B AI 代码沙箱教程:隔离执行、出网限制、超时清理与人工验收
用 E2B Sandbox 为 AI Agent 增加受控代码执行:先跑脱敏样本,再检查网络、超时、日志、结果校验和资源回收。
目标与前提
本教程搭建一条最小的“生成代码—规则检查—沙箱执行—人工验收”流程。先用固定测试代码,不直接接真实模型与生产数据。需要 Python、E2B 账户和 API key。SDK 用于创建沙箱;模型提供商的 API key 是另一套凭据,两者不要混放,也不要写进提示词、仓库或沙箱文件。
E2B 的沙箱提供隔离执行环境,但不会自动判断用户是否有权读取数据或执行外部动作。应用侧仍须负责身份、租户边界、审批、预算和审计。以下代码展示 SDK 调用形态,具体版本请以官方文档和安装包为准;上线前必须在自己的账户实测。
第一步:准备最小环境
在本地 Python 虚拟环境安装官方 SDK,并把 E2B API key 放在进程环境变量中。不要将密钥直接硬编码到示例脚本或提交到 Git。
python -m venv .venv
source .venv/bin/activate
pip install e2b
export E2B_API_KEY='从 E2B 控制台获取的测试密钥'
为试点账户设置账单提醒和最小权限。测试代码只使用公开、脱敏的数据。没有账户密钥时可先审查代码与流程,但无法验证真实沙箱行为。
第二步:执行固定的只读样本
官方 Python SDK 提供 Sandbox.create()、sandbox.commands.run() 和 sandbox.kill()。下面禁用沙箱出网,将会话设为 120 秒,命令连接超时设为 30 秒,并在 finally 回收沙箱。初次执行只计算 2+2,不触碰本机文件或外部 API。
from e2b import Sandbox
sandbox = Sandbox.create(
timeout=120,
allow_internet_access=False,
metadata={"purpose": "sandbox-smoke-test"},
)
try:
result = sandbox.commands.run(
"python -c 'print(2 + 2)'",
timeout=30,
)
print(result.stdout)
finally:
sandbox.kill()
预期标准输出为 4。如果 SDK 返回错误、超时或网络异常,应保留任务 ID、沙箱 ID、命令、耗时及异常类型供排查;日志里不要记录 API key。命令连接超时与会话生命周期是不同概念,必须分别测试,并核对错误后沙箱是否仍在计费。
第三步:把模型接入审批点
不要把模型原始回答拼成 Shell 命令直接运行。先要求模型只输出单一代码块或结构化调用,再检查语言、长度、依赖和允许的输入文件。第一版只允许运行已审阅的 Python 片段,禁止外部下载、安装任意包、访问生产服务或读取未授权文件。应用的执行器将代码作为文件或受控命令送入沙箱;对用户发起的每次运行保留审计记录。
如果 Agent 想调用“发送邮件、写数据库、删除文件”工具,在调用前由应用侧生成明确的审批对象:目标、操作、影响范围和预览。审批拒绝时不创建执行任务;批准后也只发放该动作所需的短期凭据。沙箱中的代码输出只作为数据,不作为新的系统指令。
常见问题
- E2B Sandbox 会自动调用模型吗?
- 不会。沙箱负责执行环境;模型调用、工具调度、规则检查和审批都由应用设计。
- E2B_API_KEY 能交给 Agent 代码使用吗?
- 不建议。应由可信的服务端保管并调用 SDK,不把长期密钥写进模型输入或沙箱文件。
- 设置 allow_internet_access=False 就足够安全吗?
- 不够。还需验证网络拓扑、文件权限、密钥、资源上限、日志和外部写入接口。
- 命令超时后沙箱会自动销毁吗?
- 不能仅凭命令超时假定。命令连接时间与沙箱生命周期不同,要在异常路径执行清理并回读状态。
- 什么时候需要人工审批?
- 当 Agent 要发送消息、修改文件、写数据库或调用其他有副作用的工具时,应在应用侧先审批目标和影响范围。
- 如何计算真实费用?
- 将基础月费、按秒 CPU/内存费用、存储、模型调用、失败重试和维护工时相加,再除以通过验收的任务数。