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 建議放到模板。對使用者可見結果和排障日誌分開處理,避免把完整堆棧或敏感性資料直接返回。