学习笔记 · Obsidian

Sandboxes:隔离执行与生命周期

LangChainPythonVercel

能力地图

/sandboxes 与 /sandboxes/index 当前同正文,定义“让 agent-generated code 在隔离环境执行”的 provider 抽象。索引还列 Daytona、Modal、AgentCore、Runloop、Vercel、E2B、Baponi、OpenShell、Islo、UpstashBox、Leap0、Superserve 与 LangSmith;本站只有四个 provider 深链页。

路由安装/创建生命周期责任
awslangchain-agentcore-codeinterpreter;CodeInterpreter.start() 后包装为 AgentCoreSandbox必须 interpreter.stop(),示例用 try/finally。隔离单元是 AgentCore MicroVM。
daytonalangchain-daytona;Daytona SDK 创建后包装调用方通过 Daytona SDK stop/destroy。
langsmithlangsmith[sandbox] + deepagents;SandboxClient.create_sandbox()sandbox 持续占资源,必须 delete_sandbox();示例明确用 try/finally,也可在 UI 管理。
modallangchain-modal;modal.Sandbox.create(app=...) 后包装调用方负责 terminate。

四个 backend 都可交给 create_deep_agent(backend=...),示例也可直接 backend.execute()。这些页面主要是同步调用示例,没有宣称所有 provider 的创建、执行、文件和销毁具有同一 async/streaming 语义。

隔离不等于安全完成

沙箱仍需显式控制:

  • 基础镜像/依赖 allowlist、CPU/GPU/内存/磁盘/PID、wall-clock 和空闲超时;
  • 默认拒绝网络,只放行任务所需域名;防止 metadata endpoint、内网、控制面和任意代理访问;
  • 不把宿主/生产 secret 注入执行环境;需要的临时凭证应短期、最小 scope、可撤销;
  • 输入文件扫描、路径规范化、大小/数量限制;输出 artifact 做 MIME/大小/恶意内容检查;
  • 每用户/租户独立 sandbox,禁止复用未清理的 cookie、文件、进程或 package state;
  • 创建、命令、网络、artifact、销毁和费用可审计,但 stdout/stderr 先脱敏。

可靠生命周期

建议状态机为 requested → created → ready → running → terminating → terminated,另有 failed/expired/orphaned。创建和销毁使用 provider resource ID 做幂等;请求结束的 finally 之外还要有定时 reaper,对进程崩溃遗留资源补偿删除。监控 active sandbox、age、orphan、create latency、termination failure、资源/费用和拒绝事件。

持久 snapshot、service URL、auth proxy 或浏览器 profile 会改变威胁模型;启用前单独审计数据保留、共享范围和回收策略。不要把“provider managed”理解为无需做租户隔离或删除验证。

验证边界

已精读 6 个官方 Markdown 路由并核对安装、创建和 cleanup 责任。没有实际启动沙箱,也未验证网络隔离、镜像供应链、配额、销毁时延和数据擦除保证。