Skip to content

Sandboxes 与隔离执行

当 Agent 可以执行 shell、安装依赖或运行用户代码时,filesystem 权限已经不够。Sandbox 的目标是 把任意代码执行限制在可销毁环境中,保护宿主文件、凭据和网络边界。

Sandbox 只能降低爆炸半径,不能让不可信代码变成可信代码。允许外网或注入密钥的 sandbox 仍可能发生数据外传。

SandboxBackend 带来什么

具备 sandbox 接口的 backend 除文件工具外,还能向 Agent 暴露 execute。命令结果通常包含 stdout、stderr 与 exit code;过长输出可以写入文件,再让 Agent 用 read_file 分段查看。

前端类比

可以把 remote sandbox 类比为短生命周期的隔离构建容器,而不是浏览器 iframe。iframe 主要隔离 页面能力;Deep Agents sandbox 必须同时治理进程、文件系统、网络、资源配额与凭据。

Deep Agents 原生语义:sandbox 是 filesystem backend 的执行扩展。Deep Agents 负责把 execute 提供给模型并接收结果;真正的隔离强度由 provider、容器或虚拟机策略决定。

Remote sandbox 的生命周期

下面展示官方 LangSmith Sandbox 集成的基本形状。它会创建外部资源,因此必须放在 finally 中 回收;本仓库不会执行该示例。

python
import os

from deepagents import create_deep_agent
from deepagents.backends.langsmith import LangSmithSandbox
from langsmith.sandbox import SandboxClient

client = SandboxClient()
sandbox = client.create_sandbox()

try:
    agent = create_deep_agent(
        model=os.environ["DEEPAGENTS_MODEL"],
        backend=LangSmithSandbox(sandbox=sandbox),
        system_prompt="只在 sandbox 中创建文件和执行验证命令。",
    )
    # result = agent.invoke(...)
finally:
    client.delete_sandbox(sandbox.name)

不同 provider 的创建、认证、停止和销毁方法不同。选择 provider 前至少核对:

  • 是容器、microVM 还是远程开发环境。
  • 默认是否允许公网、DNS 与内网访问。
  • 密钥如何代理,是否会进入环境变量或文件系统。
  • CPU、内存、磁盘、进程数、命令时长和总生命周期限制。
  • 销毁后 artifact 与日志的保留政策。

LocalShellBackend 不是 sandbox

Python 提供 LocalShellBackend 便于可信本地调试:

python
from deepagents.backends import LocalShellBackend

backend = LocalShellBackend()
result = backend.execute("python --version")
print(result.output)

这段代码直接在宿主运行命令。它不应接收不可信网页、用户 prompt、仓库 issue 或外部文件作为 指令来源,也不应在含生产凭据的进程中使用。

最小安全边界

边界最低要求
文件独立临时卷、只挂载所需输入、输出单独导出
网络默认关闭;需要时只开放明确域名与端口
凭据不放进 sandbox;通过外部受限工具或代理代办
资源CPU、内存、磁盘、进程、输出和执行时间上限
生命周期每任务创建、可靠销毁、超时自动回收
审计记录命令、exit code、artifact 与调用 thread
输入输出把 sandbox 输出继续视为不可信数据

Permissions 与 HITL 的关系

Deep Agents permissions 当前只约束内置 filesystem 工具,不自动覆盖 execute。HITL 可以在 模型产生普通工具调用时暂停审批,但审批不是隔离层:

  • 审批人可能看不懂混淆命令。
  • 一个已批准命令可以下载并执行后续内容。
  • interpreter 内的程序化调用不一定经过相同的 tool-call 路径。

因此顺序应是先建立 sandbox 和网络边界,再按风险增加 permissions 与 HITL。

Python 与 TypeScript

两个 SDK 都能连接官方支持的 sandbox integrations,但 provider 包、构造器和生命周期方法并不 完全相同。TypeScript 还需要区分 server/Node 入口与 browser 入口;远程 sandbox 凭据和 Node-only 客户端不应被打进浏览器 bundle。

先修

下一步

官方参考

学习文档整合站点