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 持續佔用資源。