AX(google/ax):把智能体当成集群工作负载——Google 开源的 Agent 执行编排运行时
一、导读
AX(读作 Agent eXecutor)是 Google 以 Apache-2.0 开源的智能体执行编排运行时:它只提供四个声明式原语——Task、Workspace、Gateway、Model,把"跑一个智能体"变成像 kubectl apply 一样可提交、可观察、可挂起、可恢复的集群工作负载。它的定位不是再造一个智能体框架,而是补上框架下面那层工程地基:长时间运行、突发、频繁等待模型与人工确认的智能体,既不是无状态微服务也不是批处理作业,AX 加上底层的 Agent Substrate(沙箱执行层)就是为这种新负载准备的调度与恢复设施。它当日涨星 2,324,是 2026-09-22 GitHub 日榜中涨星最高的合规大模型相关项目。
二、项目速览
| 项目 | 详情 |
|---|---|
| 仓库 | google/ax(文档站 agentexecutor.io;读作 Agent Executor) |
| 作者/团队 | Google(发布者账号 rakyll;仓库含 Google CLA 与 Google LLC 版权声明) |
| 定位 | 声明式智能体执行编排器(orchestration runtime),运行在 Agent Substrate 之上 |
| 主语言 | Go(Go 约 299.3 KB、Shell 6.2 KB、Python 5.0 KB、Makefile 3.6 KB) |
| Star 总数 | 7,482(GitHub API,2026-09-23 抓取;fork 349,开放 issue 31,watch 35) |
| 当日涨星 | +2,324(GitHub Trending daily 榜单,2026-09-23 抓取,为当日榜第一) |
| License | Apache-2.0(仓库根目录含 LICENSE;Substrate 亦为 Apache-2.0) |
| 首次发布 | 仓库创建 2026-03-30;最早 Release v0.1.0 于 2026-05-20(与 Google Cloud 发布文同日) |
| 版本节奏 | 6 个 Release:v0.1.0(05-20)→ v0.2.0/0.2.1/0.2.2(07-21/07-22/07-23)→ v0.2.3(08-13)→ v0.3.0(2026-09-20) |
| 仓库规模 | 约 44.8 MB,10 位贡献者;模块含 cmd/(4 个二进制)、internal/(9 个子包)、pkg/apis、runner/、deploy/ |
| 状态 | Google Cloud 文中标注为 preview;README 明确警告稳定版前会有破坏性变更 |
三、为什么是它
它回答的是"智能体负载放哪里跑"这个正在变贵的问题。 官方给的三层栈是:应用运行时 Agent Executor(AX) 负责状态编排、连接恢复与执行审计;高密度计算与调度层 Agent Substrate 负责海量闲置智能体的极速挂起/恢复;安全隔离层 GKE Agent Sandbox 基于 gVisor/微虚拟机提供强隔离。Google Cloud 的发布文把动机写得很直白:智能体可以跑几小时甚至几天,而"长时间运行的智能体工作流在生产中既脆弱又难以可靠、高效地管理"。它列出的五项原生能力是持久化执行(事件日志 + 快照)、安全隔离、会话一致性(单写入者架构)、连接恢复(从客户端最后确认的序列号回填响应)、轨迹分支(检查点处克隆执行路径)。
第二,它把"智能体不是微服务也不是批处理"翻译成了具体的设计决定。 传统 K8s 假设的是长期稳定驻留的服务,而智能体的特征是:等待模型响应、工具响应或人工审批时大面积闲置,一旦被唤醒又瞬时产生大量子秒级工具调用。把几百万个智能体直接部署成普通 Pod,会撞上三重物理局限——闲置期的算力账单、子秒级调用压垮控制面、以及动态执行生成代码带来的逃逸风险。AX 的取舍是:不在业务框架里解决这件事,而是把它下沉为集群原语。
第三,涨星动因里有明显的"熟悉感"红利。 manifest 长得像 K8s(apiVersion: ax.io/v1alpha1)、CLI 长得像 kubectl(apply/get/describe/watch/delete,另加 ssh/suspend/resume)、原语只有四个——对已经会写 YAML 的团队来说几乎没有学习曲线,这是它一天拿下 2,324 星的直接原因。Hacker News 上相关讨论一度到 656 分(2026-09-20 发布),但情绪并不一边倒:高赞评论多在质疑"把 AI 给 k8s 化"("k8sification of AI")、以及 Google 开源项目的寿命与动机("这个他们不会下线,因为有助于卖 GCP 服务")。这提示一个判断:它的技术问题选得准,但采用决策不该由涨星数驱动。
四、架构原理
4.1 整体架构:控制面 + 执行面
AX 官方设计文档给出了一张很克制的图。链条是:CLI 提交清单 → 无状态 API 服务校验并落库 → Redis 既存状态又当工作队列 → 控制器水平扩展消费 → 通过 gRPC 驱动底层 Agent Substrate。
ax apply -f task.yaml
│
▼
ax-server (无状态 gRPC API :8080)
(校验清单 / 持久化 / 发布事件)
│
存储并发布事件
│
▼
Redis
(Task Hashes + Event Streams + PubSub)
│
XREADGROUP(Streams)
│
▼
ax-controller (可水平扩展的协调 worker)
│
gRPC(Control API)
│
▼
Agent Substrate
┌───────────────────────────────┐
│ • Atespace 供给 │
│ • Actor 创建与激活 │
│ • Worker 分配 │
│ • 出网策略过滤 │
└───────────────────────────────┘
一条任务在集群里的生命周期由 phase 与 condition 两层表达:status.phase 给出单词级摘要(Running、Suspended、Failed、Terminating 等),condition 携带细节。
| Condition | 为 True 的条件 |
|---|---|
WorkspaceReady |
所有绑定的 workspace 都完成准备(之后保持 True) |
GatewayReady |
网关的网络策略已应用到沙箱 |
Ready |
任务在运行且 WorkspaceReady 为 True——等待时应等它 |
两个状态迁移值得记住:挂起会把 Ready 置 False 并给出原因 TaskSuspended,恢复时置回;删除会让任务进入 Terminating 由控制器拆除沙箱,ax delete 会阻塞到拆除完成。
4.2 分层模块拆解
① 四个原语(用户可见的全部声明面)。
| 原语 | 声明职责 | 容易被误当成 |
|---|---|---|
Task |
镜像与命令、CPU/内存 requests 与 limits、环境变量、Gateway 引用、一到多个 Workspace 引用 | 累计 token 预算;业务任务成功的证明 |
Workspace |
Git 仓库、MCP 服务器与注册表、技能注册表与落地路径、可选的自然语言 goal | 对会话文件、密钥与外部副作用的自动持久化 |
Gateway |
监听端口(示例为 gRPC 8494 / HTTP 8080)与出网主机端口白名单 | 按工具、按租户、按文档的细粒度授权 |
Model |
provider(google/anthropic)、模型标识、生成参数、指向 Kubernetes Secret 的密钥引用 |
模型权重、本地推理、任何 SDK 的通用配置 |
Model 这个原语最容易被名字误导:它不是模型,而是一份命名化的模型配置。把它做成集群资源的好处是"轮换一个密钥、锁定一个新模型版本、收紧一个参数"从"翻遍每个任务定义"变成一次 ax apply;AX 自身组件也读它——例如按 goal 规划 workspace 时。
② 控制面四个二进制(cmd/)。 ax 是开发者 CLI(apply/观察/隧道);ax-server 是无状态 gRPC API,负责校验清单、写入 Redis、发布事件;ax-controller 是协调 worker,消费 Redis 流、在 Substrate 上供给 atespace 与 actor、应用出网策略、把任务推向期望状态(加副本即可水平扩展);ax-task-runner 是每个任务容器内的入口进程。内部包按关注点切得很干净:internal/controller(reconciler/worker)、internal/store(memory/redis 双实现)、internal/substrate(客户端)、internal/workspace(planner/setup)、internal/model、internal/server、internal/guest、internal/metadata、internal/tunnel。
③ 对外 API。 控制面暴露 ax.v1alpha1.AX gRPC 服务,Task 侧有 7 个 RPC:GetTask/ListTasks/UpdateTask/DeleteTask/SuspendTask/ResumeTask/WatchTask(服务端流式推送状态与条件迁移),Gateway、Workspace、Model 各对称提供 Get/List/Update/Delete。健康检查是普通 HTTP:同端口的 GET /healthz。
4.3 核心机制与算法原理
为什么不用 CRD:把状态放 Redis。 设计文档里最关键的一段取舍是:把海量短生命周期任务存成 Kubernetes CRD 会把 etcd 推到舒适区之外(个位数 GB 存储上限、写入速率瓶颈、控制面退化)。因此 AX 把状态放 Redis,并用 Redis Streams 当 API 服务与控制器池之间的工作队列(控制器侧用 XREADGROUP 消费),控制器无状态、加副本即扩容。代价是 Redis 从"缓存"变成了状态与队列的双重承载者,进入关键路径。
沙箱内的启动时序(runner 契约)。 每个任务容器以 ax-task-runner 为 PID 1,boot 四步:加载 Task 与全部 Workspace 规格;在 80 端口起元数据守护进程;首次运行时按绑定顺序准备每个 workspace(克隆 Git、建技能路径、写 MCP 配置,若绑定带 goal 则交给 Antigravity 智能体完成环境准备,需容器内有 GEMINI_API_KEY,默认 10 分钟、可用 AX_BOOTSTRAP_TIMEOUT 调整);最后把 spec.command 作为子进程拉起并监管。runner 在命令退出后继续驻留,因此元数据服务仍在应答、ax ssh 仍可用;停止或挂起时它向命令的进程组发 SIGTERM、等 10 秒、再 SIGKILL 剩余进程。控制器从不把 spec.command 当容器入口,而是永远用固定入口启动容器:
| 控制器注入 | 值 |
|---|---|
| 容器镜像 | spec.image,未设则用默认 ax-task-runner 镜像 |
| 容器命令 | 固定为 /usr/local/bin/ax-task-runner |
AX_TASK_YAML |
完整 Task 资源(含 status) |
AX_WORKSPACES_YAML |
所有绑定的 Workspace(多文档流,按绑定顺序) |
spec.env |
逐项注入容器环境 |
GEMINI_API_KEY |
当 atespace 配置了 Gemini 凭据时注入 |
| 卷 | /workspace 挂载一个持久目录 |
| 就绪探针 | GET /readyz on port 80 |
沙箱内的自省接口(不需要 SDK):
| 端点 | 方法 | 返回 | 说明 |
|---|---|---|---|
/healthz |
GET | text/plain | 存活,恒 200 |
/readyz |
GET | text/plain | 就绪:workspace 初始化期间 503,就绪后 200 |
/metadata/v1alpha1/ax/task |
GET | application/yaml | 当前 Task 的完整 spec + status |
/metadata/v1alpha1/ax/workspaces |
GET | application/yaml | 全部绑定 Workspace 的多文档流 |
任务内取配置只要一行:curl -s "$AX_METADATA_URL/metadata/v1alpha1/ax/task"。只有 spec.debug: true 时,同一端口才会用 h2c 复用挂载 Substrate 的 guest 服务(进程与文件服务)——它们允许沙箱内任意进程执行与文件访问,故默认关闭,ax ssh 也会拒绝连接未开启它的任务。
网络平面:一个 header 而不是一套 Ingress。 任务不会分到自己的 Service 或 Ingress,请求都走 Substrate 的 atenet 路由器(ate-system 下的 atenet-router):它只读一个 header ate-target-actor,把 actor 解析到所在 worker,必要时先恢复再代理,而 Host 与 :authority 留给应用。取值是 <atespace>/<task>,控制器总按任务名命名 actor,故 default/task123 即命中:
curl -H "ate-target-actor: default/task123" \
http://atenet-router.ate-system.svc.cluster.local/metadata/v1alpha1/ax/task
# 本机侧:kubectl -n ate-system port-forward svc/atenet-router 8001:80
一份最小可用清单。 官方 examples/task.yaml 是多文档 YAML,一次 apply 创建四类资源:
apiVersion: ax.io/v1alpha1
kind: Task
metadata: { name: task123, atespace: default }
spec:
resources:
requests: { cpu: "500m", memory: "1Gi" }
limits: { cpu: "2", memory: "4Gi" }
workspaces:
- name: default-workspace
path: "/workspace"
goal: "Install dependencies and run the test suite" # 首启交给智能体准备环境
gateway: { name: default-gateway }
debug: true # 打开后才能 ax ssh
---
apiVersion: ax.io/v1alpha1
kind: Workspace
metadata: { name: default-workspace, atespace: default }
spec:
git:
- { name: origin, repo: "https://github.com/chalk/chalk.git", branch: "main" }
mcp:
registries: [{ provider: google, query: "mcp.tags:build" }]
servers: [{ name: git-tools, endpoint: "http://git-mcp.default.svc.cluster.local:8080" }]
skills:
registries: [{ provider: google, query: "skills.tags:nodejs" }]
path: "/.agents/skills"
---
apiVersion: ax.io/v1alpha1
kind: Gateway
metadata: { name: default-gateway, atespace: default }
spec:
listeners:
- { name: grpc, port: 8494, protocol: gRPC }
- { name: http, port: 8080, protocol: HTTP }
egress:
allowlist:
hosts: [{ host: "*", port: 443 }] # 示例即"全放行",生产必须收紧
---
apiVersion: ax.io/v1alpha1
kind: Model
metadata: { name: default-model, atespace: default }
spec:
provider: google
model: gemini-3.8-flash
secretKey: { name: gemini-api-secret, key: GEMINI_API_KEY }
对应操作与 kubectl 几乎同构:
go install github.com/google/ax/cmd/ax@latest
make deploy AX_IMAGE_REPO=<your-registry> # 需 K8s 集群、ko、可拉取 registry、可访问的 Substrate 控制 API
ax apply -f examples/task.yaml
ax watch task task123 # 流式看 phase/condition 迁移
ax ssh task123 -- cd /workspace/go && go build ./...
ax suspend task task123 # 检查点并暂停
ax resume task task123 # 从原地继续
ax delete task task123 # 阻塞到沙箱拆干净
4.4 性能优化手段与设计取舍
取舍一:把"闲置"当成一等公民来省算力。 Substrate 的核心不是"更强的隔离"而是"更聪明的复用":把大量 actor 映射到少量 ready worker 上,靠"智能体大部分时间在发呆"这一事实做重度多路复用。其 README 给出的数字是密度为标准容器运行时的 10 倍、恢复低于 500 毫秒、每秒 500 次以上的挂起/恢复激活,并配了把约 250 个有状态 actor 塞进 8 个物理 Pod 的演示,手段是镜像级快照与温水池。代价是把"有状态"从应用问题变成基础设施契约问题:/workspace 卷持久,但进程树是全新的,内存对象、socket、未落盘缓冲都不保证还在。
取舍二:把"生成式"塞进平台,而不是塞进业务代码。 goal 让 workspace 准备从"写 Dockerfile"变成"用自然语言描述就绪环境长什么样"。收益是环境准备的智力和代码被外置;代价是引入模型依赖(需 GEMINI_API_KEY)、执行不确定(同一段 goal 两次运行未必一致)、以及默认 10 分钟的启动预算。生产环境更稳的做法是把验证过的环境固化成镜像。
取舍三:默认宽松、显式收紧。 debug 默认关闭,示例 Gateway 默认 host: "*" 全放行并在注释里提示生产要收紧——这是"上手成本优先"的默认值设计,文档不假装默认就安全。
取舍四:把编排与推理彻底解耦。 AX 明确 harness-agnostic:可混搭 Antigravity、Google 前沿智能体、自建但由 Google 托管的智能体,以及 LangChain/LangGraph、ADK、A2A 写的自定义智能体;它不做模型调用优化、不管提示词。好处是编排层不随框架潮流过期,代价是你不能指望任何"模型侧的聪明"。
4.5 与其他架构路线的差异
Kubernetes Job / Argo Workflows:面向"跑到完为止"的批处理语义,没有为"等待人工确认"设计暂停/恢复,也没把"每任务一个沙箱 + 出网白名单 + 模型凭据"打包成原语。差别不在调度算法,而在负载语义的假设。
Temporal:持久化执行与重放机制很强,但它是工作流引擎,不提供沙箱隔离与出网策略。
E2B / Daytona / Ray 这类执行与计算运行时:E2B(13,923 星、Apache-2.0)与 Daytona(71,734 星,License 字段为空,待确认)提供"安全跑 AI 生成代码"的沙箱,Ray(43,897 星、Apache-2.0)提供面向 ML 计算的 actor 运行时——它们解决执行面(2026-09-23 抓取);AX 解决控制面:谁提交、谁排队、谁分配、谁能出网、密钥从哪来、如何挂起恢复。两者互补而非替代。
Agent Substrate:脚下的执行层(2,923 星、Apache-2.0,当日榜亦在列、涨星 +301),提供沙箱生命周期、worker 分配与流量路由;AX 提供智能体层抽象与生成式组件。
五、应用场景
场景一:把长跑编码智能体变成可暂停的集群工作负载
痛点:需要跑几十分钟到几小时的编码智能体,大部分时间在等模型响应——跑在常驻容器里,等待期照占资源;跑在服务器函数里,又会被超时切断,中间状态无处安放。
做法:把负载写成 Task,用固定 workspace 承载代码与工具,用 Gateway 限定它只能访问模型 API 与 Git 主机,把 suspend/resume 当一等操作嵌进工作流。
spec:
image: "ghcr.io/my-org/coding-agent:2026.09"
command: ["python", "agent.py"]
resources: { requests: { cpu: "500m", memory: "1Gi" }, limits: { cpu: "2", memory: "4Gi" } }
workspaces: [{ name: my-service, goal: "Install dependencies and run the test suite" }]
gateway: { name: research-egress }
收益与量化:闲置期算力释放依赖底层多路复用——Substrate 公布的指标是 10 倍密度、低于 500 毫秒恢复、每秒 500 次以上挂起/恢复激活,"暂停等人工确认"因此不再等于资源浪费;恢复延迟也从"重新克隆仓库 + 重装依赖"的分钟级降到亚秒级。
适用边界:官方量级宣称("每集群数十亿任务")没有配代表性基准、负载构成、失败率或成本包络,不能当容量规划依据;先能自己复现 examples/simple.yaml,再谈规模。
场景二:多团队共享集群,凭据与出网集中治理
痛点:几十个智能体各自持有模型密钥,散落在环境变量与 CI Secret 里,轮换一次要改一堆地方;出网权限无法按任务收紧,"智能体随手调了外部 API"无人知晓。
做法:用 atespace 做租户隔离,用 Model 集中管理 provider 与密钥(只引用 Kubernetes Secret),用 Gateway 把出网收敛到白名单。
kubectl create secret generic anthropic-api-secret --from-literal=ANTHROPIC_API_KEY="sk-ant-..."
apiVersion: ax.io/v1alpha1
kind: Model
metadata: { name: claude-model, atespace: default }
spec:
provider: anthropic
model: claude-opus-5
secretKey: { name: anthropic-api-secret, key: ANTHROPIC_API_KEY }
parameters: { maxTokens: 16000, temperature: 0.9 }
---
apiVersion: ax.io/v1alpha1
kind: Gateway
metadata: { name: research-egress, atespace: default }
spec:
egress:
allowlist:
hosts: [{ host: llm-gateway.internal.example, port: 443 }] # 换成你自己的模型网关
收益与量化:密钥轮换从"N 处修改"变成一次 ax apply;出网从"默认全通"变成"默认拒、显式放行",且策略由控制器在下发沙箱时应用(对应 GatewayReady 条件)。
适用边界:白名单不等于授权——被允许的工具服务器仍可能代表智能体执行强动作,请求级授权、幂等键与审计必须留在工具侧;而且只有被任务绑定的 Gateway 才生效,控制面里躺着一个未被引用的 Gateway 不会限制任何东西。
场景三:用自然语言描述环境,让平台自己准备 workspace
痛点:"把仓库跑起来"这件小事消耗掉任务中最易失败的一段时间:装工具链、装依赖、对齐版本;写进镜像太慢,写进脚本太脆。
做法:在工作区绑定上写 goal,首次启动交给平台侧智能体完成准备;对时间敏感则显式设超时。
workspaces:
- name: python-env
goal: "Set up a Python 3 development environment"
# 默认 10 分钟;用 Go duration 调整
export AX_BOOTSTRAP_TIMEOUT=20m
收益与量化:环境准备从"每个任务重复一遍"变成"每个 workspace 首次一次性完成"——runner 会把"已准备"标记写到持久卷(默认在 /ax 下),恢复后的容器跳过重复克隆,这恰好避免了"恢复时重新克隆覆盖掉智能体已有状态"的事故。
适用边界:这一步需要容器内 GEMINI_API_KEY 且默认 10 分钟预算,引入模型依赖与不确定性;生产建议把验证通过的环境固化成预构建镜像并省略 goal,或实现自己的 runner——但容器入口仍必须是 /usr/local/bin/ax-task-runner,只给一个别的 agent 镜像是不够的。
场景四:并行沙箱批量采集轨迹,服务评测与强化学习
痛点:智能体评测或强化学习需要大量可复现的隔离环境;串行跑太慢,共用环境又会互相污染。
做法:同一个 Workspace 被 N 个 Task 绑定复用,每个任务拿到独立沙箱;用 ax get tasks 批量观察 phase 与 worker IP,按需批量挂起释放算力。
ax get tasks # NAME / ATESPACE / PHASE / ACTOR / WORKER-IP / AGE
ax suspend task rollout-7 && ax resume task rollout-7
收益与量化:复用同一份 workspace 声明,避免"每个环境各自搭一遍";恢复走快照,不必从头预热。官方明确把研究者列为目标用户,场景包括采集轨迹、跑强化学习循环、规模化评测。 适用边界:官方没有发布 AX 侧的吞吐基准,Substrate 的 250 actor / 8 Pod 演示规模也远小于"数十亿"的宣称;容量规划前必须用你自己的模型延迟、工具流量、workspace 体积与恢复模式实测。
场景五:把不可信的工具调用关进带出网围栏的沙箱
痛点:智能体会现场生成代码、调用第三方 MCP 服务器;一旦越界,风险直接落到宿主机与内网。
做法:每任务一沙箱(底层支持微虚拟机与 gVisor),MCP 服务器在 Workspace 里显式声明而非隐式发现,出网按主机端口白名单收敛,debug 保持关闭。
# Workspace 内显式声明 MCP,而非依赖运行时发现
spec:
mcp:
servers: [{ name: git-tools, endpoint: "http://git-mcp.default.svc.cluster.local:8080" }]
# Task 侧:绑定围栏、关闭调试面
gateway: { name: research-egress }
debug: false
收益与量化:debug 默认 false 意味着 ax ssh 这条路本身就被关掉,减少了调试接口被当后门用的可能;出网白名单在沙箱下发阶段应用,配合 GatewayReady 可作验收断言(Wavect,2026-09-20)。
适用边界:沙箱隔离进程,但不隔离账单——当前 API 没有累计 token/金额上限(见第八节),高价值工具仍应放在你自己的模型网关与审批系统之后。
六、快速上手
# 1) 前置:Go 1.27+、ko、Docker/Podman、一个 Kubernetes 集群与 kubeconfig
go install github.com/google/ax/cmd/ax@latest
# 2) 部署控制面(先起 Redis,再用 ko 构建部署 ax-server / ax-controller 到 ax-system)
make deploy AX_IMAGE_REPO=<your-registry>
# 3) 最小任务:不声明 Workspace/Gateway/Model,用默认 runner 镜像 + 空 /workspace + 443 全放行
ax apply -f examples/simple.yaml
ax describe task simple-task
ax ssh simple-task -- ls -la /workspace
七、横向对比
| 维度 | AX(google/ax) | Agent Substrate | E2B | Daytona | K8s Job + Argo | Temporal |
|---|---|---|---|---|---|---|
| 层次 | 智能体编排控制面 | 沙箱执行与调度层 | 沙箱运行时 | 代码执行基础设施 | 通用批处理编排 | 持久化工作流引擎 |
| 核心原语 | Task/Workspace/Gateway/Model | actor/worker/atespace | sandbox | workspace | Pod/Job/Workflow | workflow/activity |
| 挂起恢复 | ax suspend/resume(依赖 Substrate 快照,恢复出新进程树) |
亚秒级(<500ms、>500 次/秒) | 沙箱生命周期管理 | 环境快照 | 无(重跑语义) | 重放而非快照 |
| 出网策略 | Gateway 白名单(控制器下发) | 零信任内核与网络隔离 | 依赖平台配置 | 依赖平台配置 | NetworkPolicy 自建 | 不涉及 |
| 模型凭据 | Model + K8s Secret 集中管理 |
不涉及 | 不涉及 | 不涉及 | 自建 | 不涉及 |
| Star(2026-09-23) | 7,482 | 2,923 | 13,923 | 71,734 | Argo 16,999 | 23,243 |
| License | Apache-2.0 | Apache-2.0 | Apache-2.0 | 字段为空(待确认) | Apache-2.0 | MIT |
| 成熟度 | preview、0.x,明确预警破坏性变更 | 官方声明非生产就绪、非官方支持产品 | 较成熟商用 | 较成熟 | 生产级 | 生产级 |
口径:Star 与 License 取自 GitHub API 2026-09-23 抓取;能力列取自各自 README/DESIGN;E2B/Daytona 仅取仓库自述定位,未做实测。
八、局限、风险与社区观察
一、官方自己贴了"破坏性变更"标签。 README 原文警告:核心概念、协议与规范仍在积极打磨,"稳定版之前很可能会引入重大破坏性变更";仓库 0.x、6 个 Release、10 位贡献者,v0.3.0 的 Release Notes 正文为空(2026-09-23 核查)。生产采用必须锁死修订版本并保留回滚路径。
二、"数十亿任务"目前是目标而非证据。 官网写"每集群数十亿任务",Google Cloud 发布文对底层控制面的措辞是"数亿注册智能体",而 Substrate 给出的是可复现的小规模数字(250 actor / 8 Pod)。第三方复核指出:公开材料没有把这一量级与任何代表性 AX 基准配在一起。
三、没有累计预算与审批的强制路径。 最需警惕的一条:据 2026-09-20 的源码复核(AX 提交 d8ed0fe38bce),TaskSpec 中原承载预算与审批配置的 policies 字段已被标注为"暂时移除";UsageStats 的 token 计数与 PendingApproval 状态类型仍在,但计数器是事后统计,不等于准入控制。CPU/内存 limits 只能约束本机算力,约束不住一个低 CPU 循环发出的付费请求。
四、完成信号需要自己补。 runner 契约明确:控制面当前不会把命令的退出状态从容器读回来。因此 Running、Ready 或健康检查通过都只代表"沙箱活着",不代表业务任务成功,必须要求智能体写显式完成事件或结果产物。
五、恢复语义容易被误读。 实际语义是:/workspace 持久,恢复后是新容器 + 新进程树。会话检查点、已完成操作标识都要显式落到持久路径;而已经发出的邮件、已经发起的支付,文件快照撤不回来——外部副作用需要幂等键与持久完成记录。
六、默认配置偏宽松,依赖仍在早期。 示例 Gateway 的 egress 是 host: "*" 全放行(注释已提示生产收紧);goal 式准备需 GEMINI_API_KEY 并默认吃掉 10 分钟启动预算。底层 Substrate README 声明它非 Google 官方支持产品。
七、社区情绪与信息质量。 Hacker News 656 分讨论(2026-09-20)里技术与质疑并存:既有"AI 的 k8s 化不可避免"的嘲讽,也有对 Google 开源项目长期性的保留。另一现象是——检索 AX 会命中大量 AI 生成的解读,其中不乏杜撰 API 的文章(某篇给出的 AXAgent(...) 代码并非 AX 真实接口,且掺杂模型网关广告)。判断与引用请回到官方仓库 docs。
九、小结与行动建议
AX 的价值不是"又多了个智能体框架",而是把智能体的执行生命周期变成一组集群原语:隔离、网络围栏、环境准备、凭据配置、挂起恢复。对已在自建"框架 + 容器 + 定时器 + 一堆脚本"的团队,它给出清晰的工程分层答案;对只跑几个短任务的团队,它引入的运维面可能大于它消除的问题。
- 先跑最小闭环,再谈规模:从
examples/simple.yaml起,确认apply → watch → ssh → suspend/resume → delete全链路成立。 - 把预算与审批放在 AX 之外:模型调用前加运维掌控的网关,按父任务 + 子任务共享额度做准入控制,并让任务拿不到可绕开它的凭据。
- 给"完成"定义比"沙箱健康"更强的信号:要求智能体写显式完成事件或结果产物,成功与失败路径分别验收。
- 按敌意场景测恢复:在工具请求与响应之间杀掉任务、挂起期间吊销凭据、外部写成功后再恢复——标准是"任务知道自己做过什么",而非"文件还在"。
- 锁版本、收紧默认:固定 AX 与 Substrate 修订版本,
egress改显式主机、保持debug: false,生产优先用预构建环境替代goal引导。
资料来源(抓取日期 2026-09-23):GitHub Trending daily / weekly 榜单与 GitHub REST API(google/ax、agent-substrate/substrate 及对比项目元数据、Releases、目录结构);AX 仓库一手文档 README.md、DESIGN.md、CONTRIBUTING.md、docs/concepts.md、docs/manifests.md、docs/runner.md、docs/sandbox.md、docs/networking.md、docs/development.md、examples/task.yaml、examples/simple.yaml、deploy/*.yaml(main 分支 2026-09-23 状态);Agent Substrate README;Google Cloud 发布文《Agent Executor, Google's distributed Agent Runtime》;官方文档站 agentexecutor.io;第三方分析:Wavect 源码与安全复查(2026-09-20,提交 d8ed0fe38bce)、markhuang.ai 预算边界复核、Tony Bai《Google 开源 AX 与 Agent Substrate》(2026-05-23)、Sebastian Buzdugan 事件日志语义对比、Hacker News item 49780797(2026-09-20,656 分)。凡官方未发布的数据或第三方口径不一致处均已标注待确认,未作补全。
读者留言
COMMENTS 暂无还没有留言,来说第一句?