跳到主要内容

系统架构

AstraBox 将管理 Agent 的服务与运行 Agent 程序的沙箱分开。即使浏览器或开发者的电脑断开连接,Agent 也可以继续工作;沙箱中的程序则无法直接访问 AstraBox 账户和平台数据。

AstraBox 如何工作

AstraBox 部署中各组件的位置 AstraBox 服务接收来自控制台、API 客户端和消息平台的请求,把 Session Event 和 Agent 程序原生状态保存在数据库中,并请求 OpenSandbox 创建沙箱或分配预热沙箱。沙箱内的 AstraBox 服务负责连接 Agent 程序,Agent 程序再调用已配置的模型服务。浏览器可以直接打开沙箱内的应用,不经过 AstraBox API。 受管沙箱 请求 创建 · 暂停 · 恢复 保存状态 用户与客户端 控制台 · API · 消息平台 AstraBox 服务 会话 · 访问控制 · 实时输出 OpenSandbox 服务 Docker 或 Kubernetes 数据库 Session 事件 · 原生状态 沙箱内的 AstraBox 服务 连接 Agent 程序 Agent 程序 原生能力 · 扩展 沙箱内的应用 HTTP · WebSocket 模型服务 由部署者配置 图例 你部署的 AstraBox 服务 请求与实时输出 浏览器直接打开,不经过 AstraBox 离开沙箱的模型调用
组成部分负责内容
AstraBox 服务提供网页控制台和 API,完成用户认证与资源鉴权,保存 Agent 和 Session 记录,并向客户端实时返回工作进度。
OpenSandbox在 Docker 或 Kubernetes 上创建、连接、暂停、恢复和删除隔离沙箱。
沙箱包含 Agent 程序及其可用的系统软件。Environment 决定沙箱镜像、网络访问和生命周期。
Agent 程序理解任务,调用模型和可用能力,持续工作直至需要用户输入或完成任务。

AstraBox 统一处理鉴权、运行环境分配、凭证、状态保存和输入输出投递。沙箱分配、隔离和 存储使用所选 Provider 支持的操作;Agent 程序通过适配器运行自己的工具、权限机制和 会话协议。这些集成都进入同一套平台工作流程。

在内置镜像中,Agent 程序读写 Session 的 /workspace 工作区。Agent 在沙箱中启动应用后,可以通过 OpenSandbox 提供的地址在浏览器中打开;这部分流量不经过 AstraBox API。

模型端点可以使用内置 LiteLLM、已有 LiteLLM 部署,或模型 Plugin 提供的端点。 Environment 表单列出当前部署已安装的 Agent 程序,并校验所选沙箱镜像。发布版本支持的 Agent 程序和镜像名称统一列在仓库介绍中。

主要组件

Web 控制台与 HTTP API

React 控制台与其他客户端使用同一个 FastAPI 服务。生产镜像在容器内通过 8000 端口 提供这两个入口。服务负责:

  • Agent、Environment、Session、Deployment、Assistant 和管理 API;
  • 身份认证和资源鉴权;
  • 已保存的 Session 历史和实时 SSE;
  • 审批和问题响应;
  • 通过所选 provider 管理沙箱生命周期;
  • 绑定目标地址的 MCP 出站凭证和消息平台集成。

GET /healthz 用于存活检查;GET /readyz 表示当前副本是否应继续接收流量。滚动更新 设置见部署 AstraBox

沙箱 provider

沙箱 provider 接口使用 AstraBox 自己的请求类型传递生命周期、网络、权限和受保护凭证, 不暴露 provider SDK。所选 provider 会转换自己支持的能力,并在任务开始前拒绝其他请求。

内置 open_sandbox Plugin 调用 OpenSandbox Lifecycle 服务。服务镜像可以让它使用本机 Docker,也可以连接到以 Kubernetes 为后端、单独维护的 OpenSandbox 部署。

OpenSandbox 创建沙箱、解析访问地址、续租,并执行部署支持的暂停、恢复和清理操作。 隔离强度由部署选择的容器运行时决定,例如 Docker、gVisor 或 Kata。详见 OpenSandbox provider

对于沙箱内的 HTTP 服务,AstraBox 先完成访问鉴权,再返回 OpenSandbox 地址。浏览器随后 通过 OpenSandbox 的 Docker 端口转发或 Kubernetes ingress 连接;应用流量无需经过 AstraBox,仍可使用相对路径资源、SSE 和 WebSocket。

Agent 程序

每个已安装的 Agent 程序都有一个 adapter,将它的原生 API 接入 AstraBox Session 操作。 推理、工具选择、权限含义和程序专属配置仍由该 Agent 程序定义。

适配器声明镜像、启动输入、状态格式和连接要求。平台的公共启动流程准备工作区、解析 凭证、恢复已保存的原生状态,然后激活适配器。独占沙箱和 Agent 共享沙箱中的隔离会话 使用同一套编排流程。

Environment 选择的镜像必须与 engine_kind 兼容。需要新增 Agent 程序时,按照 接入新的 Agent 程序实现所需接口和检查。

消息平台

服务镜像为当前支持的 Satori 官方 adapter 提供内置网关。AstraBox 保存 provider 配置、 只写 bot 凭证、入站消息、投递状态和来源游标;网关维持第三方连接并转换 provider Event。

具体消息平台无需另外部署 Koishi 或 Satori。Satori Protocol Server 选项用于连接部署方 已经运行的服务。多副本安装可以配置一个经过认证的外部消息网关。

数据与凭证

AstraBox 记录默认保存在 PostgreSQL。通过 mongo extra 可以使用 MongoDB;SQLite 适合 本地开发和测试。团队部署应使用共享 PostgreSQL 或 MongoDB。内置 LiteLLM 使用独立的 数据库和数据库角色。

AstraBox Credential Vault 是组织级资源。local Secret Store 使用 AES-GCM 加密, aws_kms 使用 AWS KMS envelope encryption。管理员把 Vault 分配给 Agent 或 Assistant, 对话请求使用这项管理员分配。

用户身份与运行时凭证相互独立:用户身份决定谁能使用资源。受保护凭证传递也是独立步骤; 启用后,Agent 进程只收到占位符,所选沙箱 provider 只会在请求符合规则时加入真实凭证。 内置 OpenSandbox provider 通过它的出站 Credential Vault 完成映射。

平台先合并模型、MCP 和已配置的环境凭证,再交给所选沙箱 Provider。首次启动、从预热 资源分配和重新连接使用相同的凭证规则。Agent 程序适配器声明所需输入,Provider 实现 自身支持的传递方式。

Session 运行时会发生什么

一次 Session 请求经过的路径 Session 请求到达 AstraBox 服务。AstraBox 请求 OpenSandbox 创建沙箱、分配预热资源、恢复或重新连接沙箱,取得地址后发送任务。Agent 程序返回 Event 和最终结果。AstraBox 把 Session Event 和 Agent 程序原生状态保存到数据库,通过 SSE 实时发送事件,并记录 Session 状态。 POST /api/v1/sessions/{id}/ai-stream 新建/预热分配/恢复/重连 沙箱地址 通过沙箱内的服务发送任务 增量事件与一个最终结果 保存每一条事件 同样的事件以 SSE 流发送 会话的最终状态 控制台 或 API 客户端 AstraBox 服务 会话 · 实时输出 数据库 会话事件 · 原生状态 OpenSandbox 沙箱后端 沙箱运行环境 Agent 程序 · 工作区 图例 Agent 程序运行的位置 请求的一步 对这一步的回复 控制台收到的实时流
  1. 控制台、API 或集成向 Session 发送输入;
  2. AstraBox 认证调用方、检查鉴权,并在开始执行前保存输入;
  3. AstraBox 使用 Session 当前的沙箱。首次准备或重建运行环境时,AstraBox 读取当前 Agent 和 Environment,再请求 OpenSandbox 创建、分配、恢复或重新连接沙箱;
  4. AstraBox 确认工作区和凭证,按需恢复原生状态,连接到所选 Agent 程序后再发送输入;
  5. Agent 程序在 /workspace 中完成任务,并返回自身的原生输出;
  6. AstraBox 保存 Session Event,并通过 SSE 实时发送给客户端;
  7. 最终结果、问题、审批请求、中断或错误会更新 Session 状态。

关闭浏览器不会取消任务。客户端可以携带最后收到的 after_seq 游标重新连接,继续接收已经保存的 Event。详见 SSE Event Stream

运行环境可以通过以下路径启动:

路径接收用户输入前的准备
首次启动分配沙箱或隔离会话,准备工作区和凭证,再建立 Agent 程序连接。
预热启动分配已准备的资源并关联到 Session,选择工作区,完成凭证交接和状态恢复后再激活。
重新连接或恢复连接仍在运行的计算资源,或将已保存的原生状态恢复到替代资源,再调用程序的原生恢复操作。

预热资源可能早于 Session 创建,因此持久工作区在交付前选定。共享沙箱保留已有的根目录, 每个会话使用自己的隔离目录。如果确认计算资源已经丢失,受影响的任务会失败;后续消息 可以从已保存的原生状态继续,不会自动重新执行失败任务的输入。

数据保存在哪里

数据保存位置
Agent、Environment 和 Deployment 记录AstraBox 配置的数据库
凭证值已配置的 Secret Store
Session 状态、消息和 EventAstraBox 配置的数据库
Agent 程序原生状态(SessionStore)AstraBox 数据库,以程序原生记录或快照格式保存
Session 和 Assistant 文件/workspace,可使用持久工作区卷;未配置时随沙箱或受支持的快照保留

原生状态包含 Agent 程序恢复会话所需的记录,也包括原生子会话状态。AstraBox 保存这些 记录,界面展示的消息历史不替代原生状态。替代运行环境恢复会话前,平台通过程序的状态 接口或原生文件还原记录。这项数据库存储不依赖持久工作区卷。

工作区文件有独立的保存方式。配置持久工作区卷后,替代计算资源访问同一个工作区目录。 未配置时,删除沙箱会移除其中的文件,除非已保留受支持的快照、下载文件、提交到代码 仓库或另行保存。Assistant 暂停会先保存原生状态,再释放计算资源;保留工作区文件还需 配置持久工作区存储。详见文件OpenSandbox

启用持久工作区时,存储插件提供底层文件系统,平台的公共 mergerfs 路由为每个沙箱提供 固定的目录入口。交付前,平台把入口关联到新建或已有工作区。OpenSandbox 只挂载工作区 子目录,不挂载路由的管理根目录。Agent 程序不负责选择存储介质或实现目录路由。本地 文件系统适用于单个沙箱主机;多台主机需要访问同一个共享文件系统。未配置工作区卷的 部署不需要运行目录路由。配置方法见工作区部署

mounted_volume 存储插件使用部署配置的卷。aws_efs 插件校验已经配置、支持共享访问的 EFS CSI Kubernetes 卷。两者使用同一套平台目录路由。部署者管理底层文件系统;使用 EFS 时,还需管理 EFS 文件系统、CSI 驱动和 AWS 凭证。

目录在沙箱交付给 Session 前选定。分配完成后,该入口不能改为另一个工作区。mergerfs 辅助进程运行在用户沙箱外,不提供任务执行期间切换文件系统的用户操作。在 Kubernetes 中,目录卷的节点亲和性使沙箱与其文件系统辅助进程运行在同一节点。

隔离与访问

Agent 程序不会收到 AstraBox 登录凭证,也不能直接访问 AstraBox 数据库。Environment 决定沙箱使用 limited 还是 unrestricted 网络模式。启用凭证保护后,受保护的模型、MCP 及已分配的出站 Vault 凭证保存在沙箱外,只会添加到符合规则的出站请求中。 这不代表所有环境变量都受同样保护:原生 tracing 鉴权会传入沙箱内 Agent 程序的 OpenTelemetry 配置,不经过出站 Vault 注入。参见 tracing 配置说明

沙箱启动前,镜像中已经包含 Agent 程序、沙箱内的 AstraBox 服务、系统账户和平台所需能力。预热沙箱可能早于使用它的 Session 创建,因此这些能力不能等到 Session 开始时再安装。通用软件和平台能力应在构建镜像时加入;只在分配沙箱后准备当前 Session 的工作区内容。

运行方式

方式Agent 任务运行在哪里
单台 Docker 主机OpenSandbox 在 AstraBox 主机上为沙箱创建独立容器。
KubernetesOpenSandbox 在已配置的集群中创建沙箱工作负载。
已有 OpenSandbox 服务AstraBox 使用该服务所管理的 Docker 或 Kubernetes 运行环境。

三种方式使用相同的 AstraBox API 和 Session 行为。安装、安全和备份要求见部署 AstraBox

任务如何分布取决于两个独立选择:

选择共享内容
AstraBox 后端副本API 和编排副本使用相同的产品数据库、凭证配置和可访问的沙箱服务。已保存的 Session 与原生状态不依赖某个副本的本机内存。
沙箱工作节点沙箱服务在工作节点上分配计算资源。跨节点使用持久工作区需要共享底层存储,每个 mergerfs 目录视图与使用它的沙箱位于同一节点。

增加后端副本不会把节点本地文件系统变成共享存储。分别配置后端副本的数据库与服务访问, 以及沙箱工作节点的计算资源与工作区存储。

扩展接口

安装 Provider 包后,可以接入其他 Agent 程序、沙箱后端、模型服务、数据存储、Secret Store、身份提供方、工作区存储、扩展来源或消息平台,不需要改变 Session API。AstraBox 会在启动时检查 Provider 兼容性,并拒绝未知或不兼容的配置。

扩展方式见嵌入 AstraBox接入新的 Agent 程序接入新的消息平台

相关文档