全部產品
Search
文件中心

Function Compute:使用 Code Interpreter Sandbox

更新時間:Jul 23, 2026

Code Interpreter Sandbox 面向需要運行 Python/Node 指令碼、處理使用者檔案、產生結構化結果或報告產物的 Agent。資料分析類 Agent 的核心訴求,是讓模型產生的分析邏輯在隔離環境中處理使用者資料,並返回可解釋、可下載、可審計的結果。直接在商務服務中執行使用者資料和模型產生代碼,風險很高:依賴衝突、檔案殘留、長時間計算、異常日誌和資料許可權都會變成工程問題。

雲沙箱可以作為 Code Interpreter Sandbox 使用。業務系統負責上傳資料、產生或選擇分析指令碼、校正輸入輸出;雲沙箱負責運行指令碼、處理臨時檔案、返回結構化結果。這個模式適合智能問答、營運分析、報表產生、客服資料診斷等情境。

業務情境

  • 使用者上傳 CSV,Agent 自動計算指標並給出摘要。

  • 營運人員用自然語言觸發臨時分析,不需要把資料落到主服務運行目錄。

  • 報表系統把中間計算放到沙箱執行,結果檔案再回傳給業務系統。

  • 多租戶情境下,每次分析使用獨立沙箱,降低資料串擾風險。

推薦流程

建議把分析任務拆成四步:

  1. 寫入輸入資料和分析指令碼。

  2. 使用固定入口執行指令碼,例如 python3 analyze.py。

  3. 要求指令碼輸出 JSON 摘要,必要時組建檔案產物。

  4. 讀取結果並銷毀沙箱。

如果業務需要 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 建議放到模板。

  • 對使用者可見結果和排障日誌分開處理,避免把完整堆棧或敏感性資料直接返回。

相關功能