云计算百科
云计算领域专业知识百科平台

沙箱管理套件:让 AI Agent 拥有可观测的代码执行环境

一套「Agent 干活,人类围观」的完整沙箱生态 —— SDK 负责创建和操作,Console 负责观察和管理,两者通过共享历史数据库无缝协作。 配套组件开源地址: agent-sandbox-backends:https://gitee.com/rainbow-zhou/agent-sandbox-backend.git sandbox-web:https://gitee.com/rainbow-zhou/sandbox-web.git

为什么需要它?

当 AI Agent(如 Deep Agents)开始在沙箱里写代码、跑命令、改文件时,一个关键问题浮现:人类怎么知道 Agent 到底做了什么?

传统方案要么让 Agent 自说自话(黑盒),要么让人手动翻日志(痛苦)。更棘手的是,如果出了问题——文件被覆盖了、命令跑飞了、沙箱挂了——你连现场都看不到。

OpenSandbox 沙箱管理套件 正是为解决这个问题而生:

  • agent-sandbox-backends —— 给 Agent 用的 SDK,一条命令创建沙箱、执行操作、自动记录完整历史

  • sandbox-console —— 给人用的 Web 控制台,浏览器里查看文件、执行命令、回溯操作历史

两者不直接通信,而是通过沙箱内的共享 SQLite 历史数据库协作。Agent 写入操作记录,Console 同步并展示,形成统一的时间线。

它能做什么?

Console 的五大核心功能

功能说明
沙箱管理 创建、列表、暂停、恢复、删除沙箱
文件浏览器 浏览、读取、编辑(Monaco Editor)、上传、下载
命令执行器 执行命令,SSE 实时流式输出 stdout/stderr
历史时间线 Agent 和 Console 的所有操作统一展示,可过滤、可下钻
连接管理 注册多个 OpenSandbox 实例,加密存储凭证,一键测试连通性

SDK 的核心能力

  • 沙箱生命周期:创建、连接、暂停、恢复、删除、TTL 自动续期

  • 文件操作:读写、编辑(乐观并发 CAS)、删除、批量上传(安全扫描 + Manifest 校验)

  • 命令执行:流式输出、超时控制、取消、输出截断保护

  • 操作历史:自动记录每个操作的 STARTED → OUTPUT → TERMINAL 全生命周期

  • 并发控制:文件 KeyedRWLock、命令队列限流、生命周期互斥

  • Deep Agents 集成:一条命令适配为 Deep Agents Backend 协议

三分钟快速上手

第一步:安装 agent-sandbox-backends和sandbox-web

pip install sandbox-console agent-sandbox-backends

前端已预编译并打包进 wheel,无需 Node.js。启动:

sandbox-console-server                     # 默认 http://localhost:9090
sandbox-console-server –port 3000         # 自定义端口

Console 默认端口 9090,避开 OpenSandbox Service 的 8080。本地使用无需任何环境变量,鉴权默认关闭。

第二步:注册连接

打开浏览器访问 http://localhost:9090,进入 Connections 页面:

  • 点击「New Connection」

  • 填写你的 OpenSandbox Service 地址(如 http://localhost:8080)

  • 如果 Service 开启了鉴权,填入 API Key

  • 点击「Test Connection」验证连通性

  • 第三步:创建沙箱(可以创建,也可以不创建,sdk端会自动创建一个新的)

    在 Sandboxes 页面点击「Create Sandbox」,选择镜像(默认 python:3.12),设置工作目录,即可创建。

    第四步:给 Agent 用

    from agent_sandbox_backends.integrations.deepagents import as_deepagents_backend
    import asyncio
    import os

    from deepagents import create_deep_agent

    from dotenv import load_dotenv
    from agent_sandbox_backends import create_opensandbox_backend
    from langchain.chat_models import init_chat_model
    from langgraph.checkpoint.memory import InMemorySaver

    load_dotenv(override=True)
    API_KEY = os.getenv("API_KEY")
    BASE_URL = os.getenv("BASE_URL")
    model = init_chat_model(
      model="deepseek-v4-flash",
      api_key=API_KEY,
      base_url=BASE_URL
    )
    async def create():
      backend = await create_opensandbox_backend(
          "http://localhost:9090", # 沙箱服务的地址和端口号
          sandbox_name="research-workspace", # 沙箱的名称
      )
      # 创建沙箱
      deepagents_backend = as_deepagents_backend(backend)
      return create_deep_agent(
          model=model,
          backend=deepagents_backend
      )
    agent = asyncio.run(create())

    第五步:回到 Console 观察

    现在回到浏览器,进入沙箱详情页:

    点击Open进入沙箱内部,会看到以下几个标签

    • Files Tab

      • 用于查看文件树

    • Commands Tab

      • 用于执行命令

    • History Tab

      • 用于查看沙箱的操作历史:如创建沙箱和创建文件,执行命令等操作历史

    关键体验:Agent 和你的操作在历史时间线里统一排序展示,你能清楚看到「Agent 先写了文件 → 你手动跑了个命令 → Agent 又改了文件」的完整过程。

    快速体验

    1. 通过Agent创建文件夹和文件,同时写入内容

    1.1 查看操作历史

    注: 操作历史加载可能会慢一点,如果发现没有历史,可以稍等一下刷新一下即可

    2. 对文件内容进行更改

    2.1 查看操作历史

    3. 执行命令

    3.1 查看操作历史

    4. 上传文件操作

    5. web端更改文件内容

    5.1 查看操作历史

    6. web端执行命令

    6.1 查看操作历史

    其他设计

    1. 历史不丢:Dual Cursor 机制

    Console 同步历史时使用双游标确保数据不丢:

    acknowledged_seq ← 已确认 ACK 的位置
    pending_seq       ← 已写入本地但未 ACK 的位置

    流程:拉取变更 → 写入本地 Projection + pending_seq → 提交事务 → ACK → 提升为 acknowledged。ACK 失败?下次重试,pending_seq 保留,数据不丢。

    2. 历史不重:幂等 Upsert

    每条历史事件有 event_id(UUIDv7)和 source_seq(单调递增)。同步时按 event_id 去重,source_seq 更高才更新,天然幂等。

    3. 历史完整:Console 操作也回写

    Console 自己执行的操作(命令、文件编辑)不仅记录在本地 console_activities 表,还通过 SandboxHistoryStore.append() 回写到沙箱的 Canonical History,确保 Agent 和 Console 的操作在同一个数据库里统一管理。

    4. 并发安全:SDK 层的精细化锁

    操作类型锁策略
    文件读 KeyedRWLock 共享模式
    文件写/删除 KeyedRWLock 排他模式
    命令执行 独立 Semaphore + 队列超时
    上传 目标根目录排他锁
    生命周期 Sandbox 级 mutex
    Backend 关闭 引用计数 + 活跃操作排空

    5. 上传安全:防 zip-slip 等

    SDK 的上传管线包含:路径规范化 → 允许根目录校验 → 敏感文件排除(.env/.ssh/.aws/.git)→ SHA-256 Manifest → Staging 安全解压(防绝对路径/../symlink/device)→ 校验 → 原子提交或回滚。

    6. Provider Key 对齐

    Console 的 Adapter 内部强制使用 provider_key="opensandbox-default" 传给 SDK(而非用 connection.id),因为 SDK 在初始化沙箱历史时用这个 key 做身份校验。不匹配会报 History identity conflict,导致 Console 无法读写历史。

    适用场景

    • AI 代码助手开发:给 Agent 一个安全沙箱跑代码,你实时观察

    • 自动化研究流水线:Agent 在沙箱里装包、跑实验,你在 Console 审计每一步

    • 教学与演示:学生看 Agent 操作沙箱的过程,理解 AI 编程的工作方式

    • 多 Agent 协作调试:多个 Agent 共享一个沙箱,通过历史时间线排查冲突

    • 安全审计:所有操作有据可查,命令、文件变更、stdout/stderr 全留存

    总结

    agent-sandbox-backendssandbox-console
    给谁用 AI Agent 程序 人类(浏览器)
    怎么用 pip install 后 import pip install 后启动服务
    核心价值 一行代码创建可观测的沙箱 Backend 浏览器里围观和操作沙箱
    历史角色 写入者(自动) 读取 + 回写
    端口 库,无端口 9090
    依赖 opensandbox SDK agent-sandbox-backends

    一句话:Agent 用 SDK 在沙箱里干活并自动记录历史,你用 Console 在浏览器里看历史、查文件、跑命令。两者通过沙箱内的共享 SQLite 协作,无需 Agent 关心 Console 是否在线,也无需 Console 关心 Agent 是谁。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 沙箱管理套件:让 AI Agent 拥有可观测的代码执行环境
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!