数据分析

更新时间:
复制 MD 格式

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 持续占用资源。