全部產品
Search
文件中心

Function Compute:資料分析

更新時間:Jul 22, 2026

Code Interpreter 的常見模式是先把資料寫入 Sandbox,再通過 run_code() 執行分析、轉換或可視化代碼。業務系統負責上傳資料、約束代碼、展示結果;Sandbox 負責隔離運行和返回結構化結果。

寫入 CSV 並執行分析

import os
import textwrap

from e2b_code_interpreter import Sandbox

sandbox = Sandbox.create(
    template="code-interpreter-v1",
    api_key=os.environ["E2B_API_KEY"],
    api_url=os.environ["E2B_API_URL"],
    domain=os.environ["E2B_DOMAIN"],
)

try:
    sandbox.files.write(
        "/tmp/sales.csv",
        "month,revenue\n2026-01,120\n2026-02,180\n2026-03,160\n",
    )

    execution = sandbox.run_code(
        textwrap.dedent(
            """
            import pandas as pd

            df = pd.read_csv("/tmp/sales.csv")
            print(df)
            df["revenue"].sum()
            """
        ),
        timeout=30,
        request_timeout=60,
    )

    if execution.error:
        raise RuntimeError(execution.error)

    stdout = "".join(execution.logs.stdout or [])
    stderr = "".join(execution.logs.stderr or [])

    print("stdout:")
    print(stdout.strip())
    print("stderr:")
    print(stderr.strip())
    print("text:")
    print(execution.text)
finally:
    sandbox.kill()

TypeScript 樣本:

import { Sandbox } from "@e2b/code-interpreter";

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,
});

try {
  await sandbox.files.write(
    "/tmp/sales.csv",
    "month,revenue\n2026-01,120\n2026-02,180\n2026-03,160\n",
  );

  const execution = await sandbox.runCode(`
import pandas as pd

df = pd.read_csv("/tmp/sales.csv")
print(df)
df["revenue"].sum()
`, {
    timeoutMs: 30_000,
    requestTimeoutMs: 60_000,
  });

  if (execution.error) {
    throw new Error(`${execution.error.name}: ${execution.error.value}`);
  }

  console.log("stdout:");
  console.log(execution.logs.stdout.join("").trim());
  console.log("stderr:");
  console.log(execution.logs.stderr.join("").trim());
  console.log("text:");
  console.log(execution.text);
} finally {
  await sandbox.kill();
}

組建圖表檔案

sandbox.run_code("""import matplotlib.pyplot as plt; plt.plot([1, 2, 3], [120, 180, 160]); plt.title("Revenue"); plt.savefig("/tmp/revenue.png")""")

content = sandbox.files.read("/tmp/revenue.png", format="bytes")

TypeScript 樣本:

await sandbox.runCode(`import matplotlib.pyplot as plt; plt.plot([1, 2, 3], [120, 180, 160]); plt.title("Revenue"); plt.savefig("/tmp/revenue.png")`);

const content = await sandbox.files.read("/tmp/revenue.png", { format: "bytes" });

雲沙箱當前只支援檔案降級方案。圖表細節參見圖表與可視化。

接入 AI 產生代碼

把模型產生代碼交給 Sandbox 執行前,應在業務側加入基本約束:

  • 明確資料檔案在 Sandbox 內的路徑。

  • 限制代碼已耗用時間、輸入檔案大小和輸出大小。

  • 把 execution.error、stdout、stderr 和富結果都返回給模型或使用者。

  • 不把使用者資料、API Key 和長期業務狀態寫入產生代碼。

使用建議

  • 小資料檔案可以用 sandbox.files.write() 寫入;大檔案建議使用上傳地址。

  • 分析代碼應顯式讀取 Sandbox 內路徑,例如 /tmp/input.csv。

  • 對圖表和報告檔案,寫入 /tmp 後再下載;表格和文本結果可以從 execution.results 或輸出檔案讀取。

  • 任務結束後主動調用 sandbox.kill(),避免 Sandbox 持續佔用資源。