通过最简路径快速完成首个 PAI-Sandbox 的创建与调用:创建沙箱空间、基于公共模板创建沙箱实例、通过 E2B SDK 执行命令、销毁实例。
前置条件
在开始使用 PAI-Sandbox前,请确认已完成以下准备:
-
已开通阿里云账号并完成实名认证。
-
已开通 PAI 服务,并创建了 PAI 工作空间。
-
(可选)如需基于自定义镜像创建模板,请先开通容器镜像服务(ACR),并创建标准版或高级版 ACR 企业实例。若仅使用公共模板,则无需配置 ACR。
-
(可选)当使用 EAS 资源组时,需提前准备好沙箱专用资源组。使用公共资源时无需额外准备。
-
(可选)当使用E2B Python SDK时,仅支持小于v2.25.0的版本。
步骤一:创建沙箱空间
-
登录 PAI 控制台,在左侧导航栏选择模型在线服务 (EAS),进入服务列表页。
-
在顶部 Tab 中切换至沙箱页签。
-
单击创建沙箱空间按钮,按以下示例配置:
-
空间名称:自定义,例如
quickstart。 -
资源类型:选择公共资源(按量付费、开箱即用)。
-
专有网络:下拉选择已有 VPC(如无可前往 VPC 控制台创建)。
-
其他参数保持默认。
-
-
单击确认完成创建。
详细参数与高级配置参见管理沙箱空间与模板。
步骤二:选择公共模板
PAI-Sandbox已预置 code-interpreter、browser、desktop 等公共模板,开箱即用。本入门直接使用 code-interpreter,无需自建模板。
-
进入沙箱空间工作台。
-
在沙箱页签的列表中找到步骤一创建的沙箱空间,在调用列单击沙箱空间工作台图标。
-
在弹出的进入沙箱空间工作台对话框中复制管理链接或只读链接,在浏览器中打开。
-
-
在公共模板列表中,选择
code-interpreter,单击模板ID进入模板详情。 -
单击模板详情页右上角的SDK接入获取SDK连接配置及Python示例。
步骤三:通过 SDK 创建沙箱实例并执行命令
安装 E2B SDK
pip install "e2b<2.25.0"
完整示例
以下示例展示一个完整的沙箱使用流程:创建实例 → 获取信息 → 执行命令 → 文件读写 → 销毁。
注意:将 <YOUR-API-TOKEN> 与 <YOUR-DOMAIN> 替换为步骤二中获取的值。
import os
from e2b import Sandbox
import time
# 1. 设置认证信息
os.environ["E2B_API_KEY"] = "<YOUR-API-TOKEN>"
os.environ["E2B_DOMAIN"] = "<YOUR-DOMAIN>"
# 2. 创建 sandbox
sandbox = Sandbox.create(
template="<YOUR-TEMPLATE-ID>",
timeout=300000, # 超时时间(毫秒)
)
print(f"Sandbox ID: {sandbox.sandbox_id}")
# 等待沙箱进入运行中状态
print("Waiting for sandbox to be ready...")
max_attempts = 30
for attempt in range(1, max_attempts + 1):
try:
is_running = sandbox.is_running()
status = "Running" if is_running else "Not Running"
print(f" [{attempt}/{max_attempts}] Sandbox status: {status}")
if is_running:
print(" ✓ Sandbox is now running!")
break
except Exception as e:
print(f" [{attempt}/{max_attempts}] Failed to check status: {e}")
if attempt < max_attempts:
time.sleep(2)
# 3. 获取 sandbox 详细信息(包括 metadata 和 dashboard URL)
info = sandbox.get_info()
print(f"State: {info.state}")
print(f"CPU: {info.cpu_count}, Memory: {info.memory_mb}MB")
# 打印 metadata
if info.metadata:
print("\nMetadata:")
for key, value in info.metadata.items():
print(f" {key}: {value}")
# 获取 dashboard URL
dashboard_url = info.metadata.get('sandbox.alicloud.com/dashboard-url') or \
info.metadata.get('dashboard_url')
if dashboard_url:
print(f"\nDashboard URL: {dashboard_url}")
# 4. 执行命令
result = sandbox.commands.run("echo 'Hello, World!'")
print(result.stdout)
# 5. 文件操作
sandbox.files.write("/tmp/test.txt", "Hello from sandbox!")
content = sandbox.files.read("/tmp/test.txt")
print(content)
# 6. 清理
sandbox.kill()
步骤四:清理资源
-
调用
sandbox.kill()销毁实例后,计算资源与系统盘均停止计费。 -
您也可以在沙箱空间工作台的沙箱列表中找到该实例,单击删除销毁。
-
如不再使用,可在沙箱空间列表中删除整个空间。
未调用 kill() 或未达到 timeout 的沙箱将持续计费(暂停状态也按运行中单价计费)。详见计费说明。