Code Interpreter Sandbox 面向需要运行 Python/Node 脚本、处理用户文件、生成结构化结果或报告产物的 Agent。数据分析类 Agent 的核心诉求,是让模型生成的分析逻辑在隔离环境中处理用户数据,并返回可解释、可下载、可审计的结果。直接在业务服务中执行用户数据和模型生成代码,风险很高:依赖冲突、文件残留、长时间计算、异常日志和数据权限都会变成工程问题。
云沙箱可以作为 Code Interpreter Sandbox 使用。业务系统负责上传数据、生成或选择分析脚本、校验输入输出;云沙箱负责运行脚本、处理临时文件、返回结构化结果。这个模式适合智能问答、运营分析、报表生成、客服数据诊断等场景。
业务场景
用户上传 CSV,Agent 自动计算指标并给出摘要。
运营人员用自然语言触发临时分析,不需要把数据落到主服务运行目录。
报表系统把中间计算放到沙箱执行,结果文件再回传给业务系统。
多租户场景下,每次分析使用独立沙箱,降低数据串扰风险。
推荐流程
建议把分析任务拆成四步:
写入输入数据和分析脚本。
使用固定入口执行脚本,例如
python3 analyze.py。要求脚本输出 JSON 摘要,必要时生成文件产物。
读取结果并销毁沙箱。
如果业务需要 Notebook 类的 run_code 体验,可以使用 e2b_code_interpreter SDK;在最佳实践层面,固定脚本入口更容易做审计、超时和输出校验。
交互式代码执行
两类 SDK 的模板参数和能力差异见 code-interpreter-v1 模板。需要 Notebook 类交互式执行时,可使用 e2b_code_interpreter SDK 直接创建 Sandbox 并调用 run_code。
import os
from e2b_code_interpreter import Sandbox
sandbox = Sandbox.create(
api_key=os.environ["E2B_API_KEY"],
api_url=os.environ["E2B_API_URL"],
domain=os.environ["E2B_DOMAIN"],
)
try:
execution = sandbox.run_code(
"""
import json
data = [
{"segment": "enterprise", "revenue": 2600},
{"segment": "startup", "revenue": 680},
]
total = sum(row["revenue"] for row in data)
top_segment = max(data, key=lambda row: row["revenue"])
print(json.dumps({
"total_revenue": total,
"top_segment": top_segment["segment"],
"top_segment_revenue": top_segment["revenue"],
}, ensure_ascii=False))
"""
)
print("".join(execution.logs.stdout or []))
finally:
sandbox.kill()run_code 更适合模型逐步生成和修正代码的交互式任务;固定脚本入口更适合生产链路,因为脚本版本、输入目录、超时时间和输出格式都更容易固化。
示例代码
以下示例在沙箱中分析分客群收入,并返回总收入、贡献最高客群和摘要。
import { Sandbox } from "e2b";
const sandbox = await Sandbox.create("code-interpreter-v1", {
apiKey: process.env.E2B_API_KEY,
apiUrl: process.env.E2B_API_URL,
domain: process.env.E2B_DOMAIN,
envs: { TASK_TYPE: "data-analysis" },
});
try {
await sandbox.files.makeDir("/tmp/data-analysis");
await sandbox.files.write(
"/tmp/data-analysis/revenue.csv",
`date,segment,revenue
2026-07-01,enterprise,1200
2026-07-01,startup,320
2026-07-02,enterprise,1400
2026-07-02,startup,360
`,
);
await sandbox.files.write(
"/tmp/data-analysis/analyze.py",
`import csv
import json
from collections import defaultdict
revenue_by_segment = defaultdict(int)
with open("revenue.csv", newline="") as f:
for row in csv.DictReader(f):
revenue_by_segment[row["segment"]] += int(row["revenue"])
total = sum(revenue_by_segment.values())
top_segment, top_revenue = max(revenue_by_segment.items(), key=lambda item: item[1])
print(json.dumps({
"total_revenue": total,
"top_segment": top_segment,
"top_segment_revenue": top_revenue,
"summary": f"{top_segment} contributes {round(top_revenue / total * 100, 1)}% of revenue."
}, ensure_ascii=False))
`,
);
const result = await sandbox.commands.run("python3 analyze.py", {
cwd: "/tmp/data-analysis",
timeoutMs: 30_000,
});
if (result.exitCode !== 0) {
throw new Error(result.stderr || result.stdout);
}
console.log(JSON.parse(result.stdout));
} finally {
await sandbox.kill();
}上线建议
输入文件要限制大小、类型和路径,避免一次任务占用过多内存或磁盘。
输出优先使用 JSON 摘要。图表、表格、报告文件可以写入
/tmp后再下载。对
stdout、stderr、退出码和结果文件做统一封装,避免上层 Agent 直接解析非结构化日志。对分析代码做版本化。生产系统不要只保存模型生成的自然语言解释。
常用依赖如
pandas、openpyxl、绘图库和业务 SDK 建议放到模板。对用户可见结果和排障日志分开处理,避免把完整堆栈或敏感数据直接返回。