ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

将 OpenAI Agents SDK SandboxAgent 接入 CubeSandbox MicroVM:E2B 兼容集成实战指南

将 OpenAI Agents SDK SandboxAgent 接入 CubeSandbox MicroVM:E2B 兼容集成实战指南 将 OpenAI Agents SDK SandboxAgent 接入 CubeSandbox MicroVME2B 兼容集成实战指南【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandboxCubeSandbox 暴露 E2B 兼容 API因此 OpenAI Agents SDK 的SandboxAgent可以直接复用官方E2BSandboxClient作为沙箱执行平面无需编写自定义 Provider。本文基于仓库中的可运行示例Shell Agent、SWE-bench 调试、暂停/恢复、Code Interpreter完整讲解从模板创建、环境配置、最小集成代码到源码级适配细节的落地全过程。集成对象与版本基线组件仓库示例使用的基线OpenAI Agents SDK带 Sandbox Agents 支持的 Python 包openai-agents[e2b]Python3.10CubeSandboxE2B 兼容 CubeAPI以及可访问的 CubeProxy 数据平面沙箱模式通用 E2BE2BSandboxType.E2B和 Code InterpreterE2BSandboxType.CODE_INTERPRETEROpenAI Agents SDK 的 Sandbox Agents 目前处于 beta。示例的 requirements.txt 有意安装当前 SDK 版本生产部署应在完成验证后锁定解析出的依赖版本。集成原理为什么无需自定义 ProviderOpenAI Agents SDK 负责模型调用、工具路由和会话恢复CubeSandbox 负责文件读写、命令执行和端口暴露。两者通过 E2B 兼容协议对接┌─────────────────────────┐ ┌──────────────────────────┐ │ OpenAI Agents SDK │ E2B-compatible │ CubeSandbox │ │ (控制面 / Harness) │ gRPC HTTPS │ (执行面 / Compute) │ │ SandboxAgent │ ──────────────▶ │ envd (49983) │ │ ├── Runner │ session.exec() │ ├── sh / python │ │ ├── Capability │ session.write() │ ├── fs read/write │ │ └── Manifest │ session.read() │ └── expose port │ │ E2BSandboxClient ◀─────┘ │ code-interpreter (49999)│ └─────────────────────────┘ └──────────────────────────┘只要E2B_API_URL指向 CubeAPI代码写法和 E2B SaaS 上完全一致底层由 CubeSandbox 提供更强的安全隔离。前置条件已运行的 CubeSandbox 部署并且可以访问 CubeAPI通常为http://cube-host:3000。部署方式参见 快速开始。cubemastercli已连接集群并已获得一个沙箱模板 ID。运行 Agent harness 的主机安装了 Python 3.10。运行完整 Agent demo 时需要 TokenHub 或其他 OpenAI 兼容 LLM 端点的 API Key 和模型名。::: warning 控制平面与数据平面E2B_API_URL用于选择 CubeAPI 控制平面端点。官方 E2B SDK 还会访问每个沙箱的数据平面域名。一键本地部署自带 CoreDNS生产环境应配置泛域名 DNS。若必须在没有泛域名 DNS 的本地环境中使用官方 E2B SDK请使用 E2B 开发 sidecar详见 多节点部署指南。 :::安装与配置1. 选择 CubeSandbox 模板simple_demo.py可以使用任何在49983端口运行 envd 的 Linux 模板。你可以复用已有模板也可以创建仓库调试 demo 使用的 SWE-bench 模板cubemastercli tpl create-from-image \ --image cube-sandbox-image.tencentcloudcr.com/demo/django_1776_django-13447:latest \ --writable-layer-size 1G \ --expose-port 49983 \ --cpu 4000 --memory 8192 \ --probe 49983该命令会异步构建模板。使用输出中的任务 ID 监控构建进度cubemastercli tpl watch --job-id job_id等待状态变为READY然后记录输出中的template_id。2. 安装示例依赖cd examples/openai-agents-example python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt cp .env.example .env配置.env变量用途E2B_API_URLCubeAPI 控制平面地址例如http://cube-host:3000E2B_API_KEYE2B SDK 必填开启 CubeAPI 鉴权时使用鉴权回调接受的e2b_前缀 Key未开启时使用e2b_000000CUBE_TEMPLATE_IDCubeSandbox 模板 IDTOKENHUB_API_KEY仓库 demo 默认使用的 TokenHub Key自动映射为OPENAI_API_KEYOPENAI_API_KEY/OPENAI_BASE_URL其他 OpenAI 兼容 LLM 的凭据和端点CUBE_SSL_CERT_FILE可选自签名 CubeSandbox 部署的 CA bundle模型名必须存在于配置的 LLM 端点。模板变量名由应用自行决定现有 E2B 应用可以保留原变量名仓库示例为了清晰使用CUBE_TEMPLATE_ID。OPENAI_BASE_URL未设置时示例默认指向https://tokenhub.tencentmaas.com/v1。最小集成代码保留原有 Agent 定义只替换沙箱连接配置import asyncio import os from agents import Runner from agents.run import RunConfig from agents.sandbox import SandboxRunConfig from agents.extensions.sandbox import ( E2BSandboxClient, E2BSandboxClientOptions, E2BSandboxType, ) async def main(): run_config RunConfig( sandboxSandboxRunConfig( clientE2BSandboxClient(), optionsE2BSandboxClientOptions( sandbox_typeE2BSandboxType.E2B, templateos.environ[CUBE_TEMPLATE_ID], timeout300, ), ), workflow_nameCube shell agent, ) result await Runner.run( agent, What OS is running? Show uname and /etc/os-release., run_configrun_config, ) print(result.final_output) # agent 是已有的 SandboxAgent。 asyncio.run(main())这里的SandboxAgent由SandboxRunConfig绑定沙箱平面E2BSandboxClientOptions中的template指定 CubeSandbox 模板 IDtimeout为沙箱生命周期秒。仓库中的 simple_demo.py 在这段核心配置之外补齐了完整的SandboxAgent、模型配置、资源清理以及当前 CubeSandbox envd 所需的兼容处理。Agent 构建示例在simple_demo.py中Agent 定义如下来自 simple_demo.pyagent SandboxAgent( nameCube Demo Agent, modelmake_model(model), instructions( You are a helpful assistant running inside a cloud sandbox. Use shell commands to explore the environment and answer questions. Be concise. ), default_manifestManifest(), capabilities[Shell()], model_settingsModelSettings(tool_choiceauto), )迁移已有的 E2B Agent客户端类无需更换。只需把现有 E2B 配置指向 Cube并传入 Cube 模板 ID- E2B_API_URLhttps://api.e2b.dev - E2B_API_KEYe2b-cloud-key - SANDBOX_TEMPLATEe2b-template E2B_API_URLhttp://cube-host:3000 E2B_API_KEYe2b_000000 SANDBOX_TEMPLATEcube-template-id上例适用于未开启 CubeAPI 鉴权的部署。如果已经开启鉴权请把e2b_000000替换为鉴权回调接受的e2b_前缀凭据。SANDBOX_TEMPLATE代表应用原先传给E2BSandboxClientOptions(template...)的环境变量无需特意改名。源码级适配CubeSandbox envd 兼容补丁示例脚本的顶部都带有一段兼容补丁这是让官方 E2B SDK 能在 CubeSandbox envd 上正常工作的关键补丁原因代码位置default_username root Filesystem 方法包装CubeSandbox envd 只服务root用户而 E2B SDK 默认user两个示例文件顶部Commands.run移除stdin参数兼容旧版 envdENVD_COMMANDS_STDIN版本判断两个示例文件顶部LLM 客户端使用系统 CA bundle避免SSL_CERT_FILEcube gRPC污染 TokenHub HTTPSmake_model()强制OpenAIChatCompletionsModelTokenHub 不支持 Responses APImake_model()第一个补丁的核心逻辑来自 simple_demo.py_e2b_rpc.default_username root for _name in (read, write, write_files, list, exists, get_info, remove, rename, make_dir, watch_dir): _orig getattr(_AsyncFS, _name, None) ...第二个补丁针对Commands.run当探测到 envd 版本低于ENVD_COMMANDS_STDIN时从调用参数中移除stdin避免旧版 envd 不支持该参数而报错。LLM 模型构造SSL 隔离 Chat Completions APICubeSandbox 的 gRPC 需要自定义 CA但SSL_CERT_FILE会污染 LLM 的 HTTPS 请求。解法是给 LLM 客户端单独用系统 CA来自 code_interpreter_demo.pydef make_model(model_name: str) - OpenAIChatCompletionsModel: import ssl ssl_ctx ssl.create_default_context() # 系统 CA不受 SSL_CERT_FILE 影响 client AsyncOpenAI( timeouthttpx.Timeout(120, connect15), http_clienthttpx.AsyncClient(verifyssl_ctx), ) bare model_name.split(/, 1)[-1] if / in model_name else model_name return OpenAIChatCompletionsModel(modelbare, openai_clientclient)注意必须用OpenAIChatCompletionsModel而非直接传模型字符串——后者会走 Responses API/v1/responses而 TokenHub 只支持 Chat Completions API/v1/chat/completions。simple_demo.py还提供了--no-ssl-patch禁用所有 SSL 自定义和--llm-cube-sslLLM 客户端也使用 cube 证书两个调试开关。可运行 Demo先验证沙箱链路不请求 LLMcd examples/openai-agents-example python main.py --sandbox-only --timeout 60main.py的--sandbox-only模式通过E2BSandboxClient.create()创建沙箱、session.start()启动会话、session.exec(uname -a cat /etc/os-release | head -3)做健康检查然后session.shutdown()销毁沙箱全程不调用 LLM。验证文件系统状态跨暂停/恢复保留python simple_demo.py --pause-resume该模式执行完整闭环来自 simple_demo.py[step 1] 创建沙箱 [step 2] 写入标记文件 pause-resume-test.txtsession.write [step 3] 暂停沙箱stop shutdown, pause_on_exitTrue [step 4] 恢复沙箱client.resume(saved_state) [step 5] 读取文件验证内容一致 → PASS / FAIL [cleanup] 销毁沙箱注意恢复后需将resumed_session.state.pause_on_exit置为False再shutdown()否则沙箱会再次进入暂停状态而非销毁。让 Shell Agent 执行真实任务python simple_demo.py \ --question What OS is running? Show uname and the first 3 lines of /etc/os-release.SWE-bench 完整工作流对于更完整的工作流main.py 会让 Agent 检查 Django 源码并分析 SWE-bench 的django__django-13447Bug在/testbed/django/contrib/admin/templatetags/admin_list.py中定位items_for_result函数、分析根因、提出修复方案。参数和预期流程见 示例 README。main.py还内置了三项工程化能力LLM 预检_preflight_llm正式运行前依次验证纯文本、tool-calling、流式三类请求失败立即退出流式输出与全链路追踪包装E2BSandboxClient.create、session 生命周期方法和OpenAIChatCompletionsModel.stream_response打印每个环节耗时防挂超时LLM 回答后 30 秒无新事件自动退出规避Runner内部 finalization 无限挂起。Code Interpreter 两种形态openai-agents-code-interpreter 目录下有两份功能等价、执行后端不同的 democode_interpreter_demo.pycode_interpreter_demo_ci.py沙箱类型E2BSandboxType.E2BE2BSandboxType.CODE_INTERPRETER底层 SDKe2b.AsyncSandboxe2b_code_interpreter.AsyncSandbox执行方式session.write(script.py)→session.exec(python script.py)sandbox.run_code(code)Jupyter kernel会话状态每次exec都是新进程变量 / imports / DataFrame 跨 cell 保留图像捕获agent 手动plt.savefig(...)自动从Execution.results解 base64模板端口envd (49983)envd (49983) code-interpreter gateway (49999)通用 E2B 写法思路write一个临时脚本 →exec(python -u -I -B script.py)→find output/diff 出新产物。任何装了 Python 的 Cube 模板都能跑。PythonRunner的_invoke实现来自 code_interpreter_demo.pyawait session.mkdir(Path(.scratch), parentsTrue) await session.mkdir(Path(output), parentsTrue) script_rel Path(f.scratch/{uuid.uuid4().hex}.py) await session.write( script_rel, io.BytesIO(request.code.encode(utf-8)), ) ... result await session.exec( python, -u, -I, -B, str(script_rel), shellFalse, timeoutrequest.timeout_s, )Jupyter kernel 写法关键是要绕过 SDK 的 wrapper通过 BFS 找到底层e2b_code_interpreter.AsyncSandbox不同 openai-agents 版本会堆叠多层 wrapperSandboxSession._inner - E2BSandboxSession._sandbox - AsyncSandbox然后调用inner.run_code(code, on_stdout..., on_stderr..., timeout...)。返回的Execution结构携带logs / results / error图像结果直接 base64 解码保存到output/figure_*.png。Jupyter 模式还要求模板镜像在49999端口提供 Code Interpreter 服务并具备就绪探测沙箱内部探测127.0.0.1:49999/health。Code Interpreter 模板创建cubemastercli template create-from-image \ --image cube-sandbox-image.tencentcloudcr.com/demo/e2b-code-interpreter:v1.1-data \ --writable-layer-size 1Gi \ --expose-port 49983 \ --expose-port 49999 \ --probe 49983模板要求汇总形态预装软件暴露端口探针通用 E2Bpython3 业务依赖pandas / numpy / matplotlib …49983 (envd)49983Code Interpreter以上 官方e2b-code-interpreterruntime49983 4999949983code_interpreter_demo.py只需要暴露 49983 端口code_interpreter_demo_ci.py还需要 49999。Manifest 种子文件通过Manifest在沙箱启动时自动写入工作区文件agent 可直接以相对路径读取来自 code_interpreter_demo.pydef build_manifest() - Manifest: return Manifest( entries{ sales.csv: File(contentSALES_CSV.encode(utf-8)), README.md: File(contentb# Sales review\n\nsales.csv has ...), } )进阶用法长任务同时设置E2BSandboxClientOptions(timeout...)的沙箱生命周期以及合适的 Agent 最大轮数main.py通过--max-turns控制默认 50。暂停与恢复设置pause_on_exitTrue保留会话状态然后调用E2BSandboxClient.resume(...)。仓库 demo 完整执行了写入、暂停、恢复、读取和清理流程。Code Interpreter使用 openai-agents-code-interpreter 中的示例。通用执行需要49983端口的 envdJupyter 模式还要求模板镜像在49999端口提供 Code Interpreter 服务。网络与存储控制通过网络策略、安全代理和持久化存储配置 Cube 专有能力。E2B 兼容层未覆盖的能力可以预先写入模板或通过 CubeSandbox 原生 API 管理。注意事项仓库示例把 E2B envd 用户设为root并在对接旧版 envd 时移除stdin参数。如果你的部署仍需这些适配请从可运行示例复制兼容代码块。仅配置E2B_API_URL不能替代数据平面的 DNS 或 sidecar 配置需要同时验证 CubeAPI 和 CubeProxy 的可达性。E2BSandboxType.CODE_INTERPRETER需要专门构建的模板选择该枚举不会自动安装或启动 Jupyter。应把沙箱视为不受信任的执行环境。除非任务明确需要否则把 LLM 凭据保留在 Agent harness 中不要传入 MicroVM。完整调用链路可参考 集成指南 中的链路图load_env → make_model → build_manifest → SandboxAgent → RunConfig → Runner.run → 沙箱创建 → Manifest 写入 → LLM 工具调用 → session.exec / run_code → 最终输出。参考资料可运行的 Shell Agent 与 SWE-bench 示例examples/openai-agents-example含 simple_demo.py 与 main.py可运行的 Code Interpreter 示例examples/openai-agents-code-interpreterOpenAI Agents SDK × CubeSandbox 详细实现说明openai-agents-sandbox-cube-integration_zh.md快速开始docs/zh/guide/quickstart从客户端连接 CubeSandbox 集群多节点部署指南【免费下载链接】CubeSandboxInstant, Concurrent, Secure Lightweight Sandbox for AI Agents.项目地址: https://gitcode.com/GitHub_Trending/cu/CubeSandbox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表