为什么AI Agent需要沙箱
让大模型执行代码是Agent的核心能力,但直接让AI在生产环境运行代码极度危险:一个错误的rm -rf就可能清空数据库。E2B(e2b.dev)专为AI Agent提供云端代码执行沙箱:每次执行代码都启动一个独立的隔离环境(包括文件、网络、进程),执行完销毁。这种”用完即弃”的设计让AI Agent安全执行任意Python代码成为可能。本教程详解如何用E2B构建生产级Agent。
第一步:E2B账号注册
- 访问
e2b.dev - 点击”Get API Key”
- 用GitHub账号登录
- 进入Dashboard,可以看到自己的API Key
- 免费套餐:每月100小时沙箱使用时长
- Pro套餐:$0.10/小时,无限使用
- 保存API Key到环境变量
第二步:安装SDK和基础调用
- 安装Python SDK:
pip install e2b - 设置环境变量:
export E2B_API_KEY="e2b_xxxxxxxxxxxxx" - 测试代码:
from e2b import Sandbox
sandbox = Sandbox()
result = sandbox.process.start_and_wait("echo 'Hello World'")
print(result.stdout) # Hello World
sandbox.close() - 运行:
python test.py - 第一次调用约3秒(创建沙箱),之后约0.5秒
提示:沙箱在云端,可以打印长代码执行结果,无需担心本地环境
第三步:执行Python数据分析
- 准备数据文件
sales.csv - 代码:
from e2b import Sandbox
sandbox = Sandbox()
# 上传文件
with open("sales.csv") as f:
sandbox.files.write("/home/user/sales.csv", f.read())
# 执行分析
code = """
import pandas as pd
df = pd.read_csv('/home/user/sales.csv')
print(df.groupby('product')['sales'].sum())
print('Top 5 products:');
print(df.nlargest(5, 'sales'))
"""
result = sandbox.process.start_and_wait(f"python -c '{code}'")
print(result.stdout)
sandbox.close() - 输出:在云端运行pandas的结果
- 无需本地安装pandas
第四步:让AI Agent写代码并执行
用LangChain集成E2B做Agent:
- 安装依赖:
pip install e2b langchain langchain-openai - 代码:
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool
from e2b import Sandbox@tool
def run_python_code(code: str) -> str:
"""Run python code in secure sandbox"""
sandbox = Sandbox()
result = sandbox.process.start_and_wait(f"python -c '{code}'")
sandbox.close()
return result.stdoutllm = ChatOpenAI(model="gpt-4o")
tools = [run_python_code]
agent = create_openai_tools_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)executor.invoke({"input": "分析销售数据.csv,按产品分类汇总销售额"})
- Agent自动:
1. 用pandas读取文件
2. groupby汇总
3. 返回结果
第五步:构建数据分析师Agent
完整实战项目:能读Excel、自动分析的Agent:
- 创建Flask服务,提供HTTP API
- 用户上传Excel文件
- Agent接收用户的自然语言问题(如”显示各区域销售趋势”)
- Agent用E2B Python生成matplotlib图表
- 返回图表的Base64编码,前端展示
代码核心:
from openai import OpenAI
import e2b
client = OpenAI()
sandbox = e2b.Sandbox()
def analyze(file_url, question):
sandbox.files.write('/data.xlsx', requests.get(file_url).text)
code = sandbox.process.start_and_wait(f'python analyze.py {question}')
chart = sandbox.files.read('/chart.png')
sandbox.close()
return chart # base64图片
第六步:爬虫Agent
Agent用E2B沙箱做合规爬虫:
- 沙箱自带requests/beautifulsoup
- Agent写爬虫代码、E2B执行
- 风险点:
• 沙箱有网络限制,避免被恶意用 - 可以设置:
• 允许域名白名单
• CPU使用限制
• 网络带宽限制
沙箱高级配置
生产环境部署考虑:
- 超时:
Sandbox(timeout=30)30秒超时自动关闭 - 资源限制:限制内存2GB、CPU 1核
- 模板:自定义镜像预装更多库(如pandas、sklearn)
- 持久化:用Snapshot保存环境状态
- 审计:所有API调用记录到日志
效率数据
实测E2B性能:沙箱创建中位数700ms,冷启动约3秒。每个沙箱费用约0.001美元。1000次Agent调用约1美元。多数Agent场景成本可忽略不计。
常见误区
- Q:E2B的数据安全?A:沙箱用完销毁,数据不留存。如需持久化用Snapshot
- Q:能否禁用网络?A:
Sandbox(internet_disabled=True) - Q:支持其他语言?A:除了Python还支持JS、Ruby、R、C++
- Q:比Docker便宜?A:纯运维Docker更便宜,但Agent场景E2B极大简化代码