GitHub Explorer
📰 公众号已发布 2026-09-25

GitHub推荐:Google 把 agent 当 K8s workload 跑:开源 6 个月破万星的 ax 怎么做到亚秒级挂起恢复

GitHub: https://github.com/google/ax

一句话总结

ax(Agent eXecutor)是 Google DeepMind + Google Cloud 联合开源的 AI agent 编排框架——它把 agent 当成「stateful、bursty、long-running actor」这种新 workload来跑,把 K8s 的声明式控制面与 Redis Streams 事件队列、Temporal 的 durable execution 思想、Substrate 的 gVisor 快照能力组合在一起,让「亚秒级 suspend/resume」和「8 个 worker pod 跑 250 个 actor」成为声明式 API 的默认能力。

值得关注的理由

  1. Google DeepMind 官方出品,Apache 2.0 开源半年破万星——Google 组织账号(79k 粉丝、14 年历史)背书,主导者 Jaana Dogan(@rakyll,13k 粉丝、Google Go runtime/可观测性布道者、原 AWS principal engineer)亲自操刀,定位明显是 Google 推自家 agent platform 的策略性入口。
  2. 清晰的边界意识——AX 自留「声明式 API + Redis 状态 + 事件队列 + 协调循环」约 6000 行 Go,把沙箱/快照/容器 lifecycle 全部下放给独立开源项目 Agent Substrate(含 gVisor + GCS 快照),这是**「cloud-native 思想迁移到新 workload」的范式样本**,不是另起炉灶的 runtime。
  3. 直接对标 Temporal / Kagent 的差异化卡位——补「agent runtime」这层空白:Temporal 是通用 durable workflow,Kagent 是 K8s-native agent 但缺 sub-second suspend,LangGraph/CrewAI 只做 DSL 不解决 runtime;ax 用 kubectl 风格 CLI(apply/get/watch/ssh/suspend/resume/fork/delete)让 K8s 用户零成本迁移。

项目展示

README 媒体

  1. AX axolotl mascot — 类型: hero(粉色 axolotl 吉祥物,README 顶部 logo)

官网/媒体补充

仓库 assets/ 下目前只有一个 axolotl.svg 吉祥物,官网(agentexecutor.io)以 YAML 代码块叙事为主,没有额外截图或 Demo 视频。视觉素材偏弱,主要靠 mascot + 文字叙事,可视化靠 SPEC 示例承担。

筛选说明

  • 总共发现 1 个原始媒体元素(README 内的 axolotl.svg,已 verified)
  • 官网无独立 image/CDN 图床,CLI 命令与 spec YAML 取代传统架构图
  • README 中包含完整可执行的 demo 脚本(./demo.sh),可作为交互式 demo 入口

项目画像

维度数据
GitHubhttps://github.com/google/ax
Star / Fork / Watcher11,226 / 542 / 52
代码行数约 11,221 行(Go ~94% / YAML ~3% / Proto ~2% / Shell ~1% / Python ~1% / 其它)
文件数量55(核心代码,不含 vendor/生成代码)
项目年龄8.5 个月(首次提交 2026-01-21,仓库创建 2026-03-30)
最近推送2026-09-25(活跃)
开发阶段密集开发(近 30 天 12 commits;近 90 天 123 commits)
贡献模式Google 内部核心团队主推(Top1 占 75.1%,Top5 占 91.4%,20 名贡献者)
热度定位大众热门(半年破万星,发布即爆发)
LicenseApache-2.0
当前版本v0.3.1(7 个 tag,0.x 语义化版本,API 仍在定型期)
质量评级代码[优秀] 文档[优秀] 测试[不足]

作者视角:为什么存在这个项目

创始人/作者背景

主导者 Jaana Dogan(@rakyll,JBD)——Google 资深 Go runtime/可观测性布道者、原 AWS principal engineer,公开 bio 写明「ML/AI Systems」,13.3k 粉丝、249 个公开仓库。她把 Google 内部 agent infra 抽出来开源化的典型人选:长项是把 cloud-native 控制面 + reconciliation 循环这套已验证模式,迁移到 AI agent 这个全新 workload 上。核心贡献者多为 Google 内部员工(joycel-github、wjjclaud、anj-s、zbl94、dberkov 等),外部贡献者寥寥。

问题判断

作者在 DESIGN.md 与 README 中明确写出三条「现有方案不够」的理由:

  1. etcd 装不下——「Storing millions of short-lived tasks as Kubernetes CRDs pushes etcd past its comfort zone (single-digit GB storage limits, write-rate bottlenecks, control plane degradation).」 这就是 AX 把任务状态搬到 Redis + Redis Streams 而不是用 K8s CRD 的根本理由。
  2. 裸 K8s 缺原语——没有 suspend/resume actor + 沙箱快照的能力、没有 per-task MCP server 注入、没有 goal-driven workspace bootstrap、没有 per-task model credential 命名引用。
  3. DSL 层不解决 runtime——LangGraph/CrewAI 管「agent 怎么想」,AX 管「agent 在哪跑、怎么挂、怎么停」。

解法哲学

README 原话「tastefully adding the essential features everyone needs」——作者反复用 kubectl-shaped CLI(apply/get/describe/watch/delete),让 K8s 用户零成本迁移。明确不做什么:

  • 不重造 sandbox runtime —— 委托给 Agent Substrate(gVisor + 快照)
  • 不做模型路由/智能调度 —— 只接 Gemini 一个 provider,其余 provider 走 fallback 文案
  • 不做 workflow DAG —— 只做一个最小可挂起单元 Task,让 agent 自己编排

战略意图

AX ≠ substrate,AX 是声明层。go.mod 同时依赖 github.com/agent-substrate/substrate 与 github.com/agent-substrate/env——前者是控制面(gRPC Control API),后者是数据面(guest gRPC + snapshots)。两个仓库分离说明:substrate 是 runtime,ax 是其上层 declarative orchestrator。商业化层面:Apache 2.0 genuinely open,但 DefaultSnapshotsBucket 写死为 gs://dberkov-gke-dev3/ate-env/(绑定 GCP),且只接 Gemini——这是 Google 推自家 agent platform 的策略性入口。

核心价值提炼

创新之处

按新颖度×实用性排序:

  1. proto ↔ YAML 双向 bridge via protojson + yaml.Node ——pkg/apis/v1alpha1/types.go 把 protojson 输出转换成 yaml.Node 树,关键点是用 dec.UseNumber() 保留数字精度,且给非 RFC3339 字符串打 !!str tag——这是解决「YAML 1.1 把 True 当 bool」历史包袱的最干净做法。可迁移性满分。
  2. Per-task ActorTemplate 命名 = sha256(image + sortedEnv)[:4bytes] ——taskTemplateName() 把 task 名 + image + 排序后 env 做 SHA256,截前 4 字节 hex 作为模板名后缀。改 image 或改 env 自动产出新模板,旧模板由 taskTemplatePattern 正则批量删除——避免 actor 复用错配置的模板。
  3. LaunchTask = proto.Clone(task); launchTask.Status = nil; launchTask.Spec.Suspend = false ——reconciler 把 spec 序列化进 env 时只带 spec 不带 status,且强制 Suspend=false——避免容器里读到的 YAML 反映「过去某次」状态。注释写得很清楚:「Only launch configuration belongs in the template; status and suspend changes must not create new golden snapshots.」
  4. 「声明式 API + Redis Streams 事件队列 + Worker 池」控制面模板 ——apply → server.Save* (ZADD + XADD) → controller.XREADGROUP → reconciler.Reconcile → UpdateTaskStatus (SET + PUBLISH) 的全套链路,参考实现价值极高。
  5. setup.go 的 maiden-run marker 机制 ——/ax/initialized-<workspace-path-sanitized> 文件记录 workspace 是否做过首次初始化(git clone + skills 挂载 + antigravity bootstrap)。每次重启 task runner 都检查 marker,存在则整个 setup 跳过。Git 失败时故意不写 marker,下次启动会重试。
  6. internal/substrate/client.go 的 actor state machine 等待循环 ——EnsureActor 处理 AlreadyExists 时,如果旧 actor 处于 DELETING 状态,每 500ms 重试创建最多 20 次(10 秒)——这是 Substrate gRPC API 没有 wait-for-deletion 语义的合理补丁。
  7. in-container metadata server 同端口多协议(HTTP 1.1 + h2c gRPC) ——metadata.NewServer 用 SetHTTP1(true) + SetUnencryptedHTTP2(true) 同时支持 HTTP/1.1 的 metadata endpoint 和 HTTP/2 (h2c) 的 guest gRPC(ax ssh 用),按 Content-Type 头区分协议。

可复用的模式与技巧

  1. proto-as-schema 单一来源——pkg/apis/v1alpha1/ 用 ax.proto + ax.pb.go + ax_grpc.pb.go + types.go(YAML 桥),整个仓库零行手写 struct tag。任何想避免「OpenAPI/YAML/Go struct 三套 schema 漂移」的 API 项目都适用。
  2. thin wrapper over external runtime——internal/substrate/client.go 是 AX 与 Substrate 边界的全部实现,200 行代码、8 个方法 + BuildActorTemplate。任何「在 X 之上做声明式编排」的项目都该把 X 的 RPC 封装成 1 个 client + 极少方法。
  3. per-task event consumer group——defaultWorkerGroup = "ax-controllers" + consumer = "<hostname>-<nanos>" 让多副本 controller 自动负载均衡且 crash-safe(未 ack 的事件在 PEL 里保留,新 worker 接管时 XREADGROUP 可读到)。
  4. in-container metadata server——runner.Run 启动 metadata.NewServer 提供 /healthz、/readyz、/metadata/v1alpha1/ax/{task,workspaces},让外部 controller 通过 atenet-router 探活并取 spec。这是 cloud-style metadata service(AWS IMDS、GCP Metadata Server)的 agent 化翻版。
  5. ZSet 索引 + Streams 队列 + PubSub 通知 Redis 三件套——internal/store/redis/store.go 把 ax:task:<atespace>:<name> Hash 存 JSON、ax:tasks:index ZSet 按时间排序、ax:stream:tasks XREADGROUP 事件流、ax:pubsub:task:<atespace>:<name> Watch fan-out——大多数中小规模控制面不需要 Kafka。

关键设计决策

  1. 状态全部用 Redis(Hashes + ZSets + Streams + PubSub),不用 K8s CRD

    • 换得 TB 级容量与毫秒级写速;代价是失去 K8s RBAC/审计/kubectl 兼容,必须自建治理(roadmap §4 提到 SPIFFE + Google platform requirements)。
  2. Actor 创建/挂起/恢复/删除通过单一 gRPC client 委托给 Substrate

    • 8 个方法集:EnsureAtespace / EnsureActorTemplate / EnsureActor / ResumeActor / SuspendActor / DeleteActor / ListActorTemplates / DeleteActorTemplate。最关键的架构边界——AX/substrate 的契约就是这一组 8 个 RPC。
  3. sub-second suspend/resume 不在 AX 层实现,由 Substrate snapshot/restore 实现

    • AX 只是把 suspend/resume 当成两个 RPC 调用:SnapshotsConfig{StorageLocation: gs://..., OnPause: SNAPSHOT_CONTENT_SCOPE_DATA, OnResume: FromData: RESUME_SOURCE_GOLDEN},substrate 负责把 actor 状态序列化到 GCS bucket 并在新 worker 上 restore。roadmap §2 还规划「基于 idleness 检测自动 SuspendActor」——进一步下放到 substrate 层。
  4. proto3 message 同时作为 wire format + Go struct + YAML schema 的单一来源

    • pkg/apis/v1alpha1/types.go 用 protojson 做 YAML ↔ proto 的桥——marshalYAML(m proto.Message) 把 protojson 输出转回 yaml.Node,保留字段顺序与字段名(lowerCamelCase);unmarshalYAML 走 yaml → generic map → JSON → protojson 三跳,未知字段直接报错。
  5. Task 的 actor name == task name,简化路由

    • 在 reconciler.Reconcile 强制 task.Status.Actor = task.Metadata.Name;atenet-router 通过 ate-target-actor: <atespace>/<task> header 直接路由。短期 mental model 极简,长期 roadmap §2 提到「splitting Task workspace setup into a separate actor」会打破这个 1:1。
  6. Model 是命名模型配置而非模型本身

    • ModelSpec{provider, model, parameters: Struct, secretKeyRef: {name, key}};internal/model/client.go 把 ModelSpec 转 Config,运行时从 K8s Secret 拉 key 走 Gemini generateContent HTTP API。协议面是 provider-agnostic 的,但当前只硬编码 Gemini,其他 provider 走 fallbackResponse 返回合成字符串。

竞品格局与定位

竞品对比矩阵

维度AX (google/ax)Kagent (Solo.io)TemporalLangGraph/CrewAIInngest/Prefect/Restate裸 K8s Jobs + 自研 CRD
定位层级agent orchestrator(声明层)agent runtime(K8s-native)durable workflow engineagent DSL / 状态机事件驱动 workflow朴素基线
状态存储Redis Streams + HashesK8s CRD + etcd自建持久化数据库进程内存 / 外部 store自建etcd
子秒级 suspend/resume有(委托 Substrate 快照)无无(仅 activity retry)无无需自研
Sandbox 隔离gVisor(通过 Substrate)K8s 默认无无无K8s 默认
Network policyGateway 原语(已 deprecated)→ policies需自接需自接无无NetworkPolicy
LLM credential 抽象ModelSpec + K8s Secret自接自接各框架内置自接需自研
CLI 体验kubectl-stylekubectl-styletctlPython API各家 SDKkubectl
多语言 SDKGo + Python antigravityGo7+ 语言Python / TSTS / Python / Go任意
LicenseApache-2.0Apache-2.0MITMITApache/MITN/A
生产验证新(半年)较新7+ 年2+ 年3+ 年N/A

差异化护城河

  • 信任护城河:Google DeepMind 官方出品 + GCP 背书
  • 技术护城河:Substrate + gVisor + atenet-router 一栈(Google 的底层能力整合)
  • 范式护城河:声明式 spec 让 agent 行为可审计、可回放、可断点恢复——这是其他 runtime 都没解决的
  • 生态护城河:弱——无周边工具链(CLI 只是 kubectl-shape,没有 Terraform provider、没有 Argo Events integration、没有 crossplane provider)

竞争风险

最危险的:

  • Kagent(同样 K8s-native,同样 enterprise 路线,社区已发起「Kagent vs AX」issue #394)
  • Temporal(如果它把 agent 当一等公民,7 年生产验证 + 7+ 语言 SDK 是难以追赶的)
  • AWS Bedrock AgentCore / Vertex AI Agent Engine(云厂商原生集成,对应 ax 这种 self-hosted 路线)

LangGraph/Autogen 不直接竞争(DSL 层 vs runtime 层),可叠加。

生态定位

「AI agent 的 Linux kernel」——不写应用,只提供运行时原语。上层 LangGraph/AutoGen 编 agent 图,下层 Substrate 管 sandbox,AX 居中做声明式控制。

AX 已收录入 DeepWiki;Zread.ai 未收录。无公开 arXiv 论文;起源叙事指向 DeepMind agentic runtime 研究但无具体 paper 链接。

套利机会分析

  • 信息差:ax 已经爆发(11k stars),不属于「低关注度高质量」类套利;但**「AX/substrate 边界」「proto-as-schema」「Redis Streams 替代 Kafka」这三个工程模式**目前在国内社区几乎没有中文深度解读,存在认知差。
  • 技术借鉴:(a) proto ↔ YAML 双向 bridge 模式可直接搬到 K8s CRD/Crossplane 替代品;(b) Redis 三件套(ZSet + Streams + PubSub)适合中小规模控制面,参考价值高于 Temporal;(c) thin wrapper over external runtime 模式适合任何「在 X 之上做编排」的项目。
  • 生态位:填补「agent runtime」这层空白——Temporal 与裸 K8s 之间的灰色地带被 ax 命名了,Kagent 紧跟入场说明这层空白已被市场认可。
  • 趋势判断:agent runtime 是 2026 下半年红海方向(Kagent / Temporal agent focus / AWS Bedrock AgentCore / 各家云厂商),窗口期还在但收窄;ax 凭 Google 背书 + Substrate 技术栈 + 清晰的边界意识仍处第一梯队,但需关注 v1.0 之前的 API 稳定性。

风险与不足

  1. API 仍在定型期 —— README 开头明确 WARNING: We are still actively refining our core concepts, protocols, and specifications. We will likely to introduce major breaking changes prior to a stable release. v0.3.1 + roadmap §1「Stabilize Core Specs」是真实的自我警示。issue #349「Task without spec 触发 controller nil-pointer panic」印证输入校验不充分。
  2. 测试覆盖率严重偏低 —— commit 类型分布中 Test 仅 1.5%(3/200),整个仓库仅 10 个测试文件(reconciler_test.go / worker_test.go / server_test.go / metadata_server_test.go / workspace/setup_test.go / workspace/planner_test.go / model/client_test.go / tunnel/tunnel_test.go / runner/runner_test.go / pkg/apis/v1alpha1/types_test.go / cmd/ax/main_test.go),且没有 controller 端到端 / substrate integration test。对一个负责任务调度的控制器框架是显著短板。
  3. 架构仍在收敛 —— Phase 2 元分析中显示 controller2、experimental、gemini、cmd/gar、proto/gar.proto 等路径曾高频修改(139 commits),后续被 PR #214 / #196 / #179 / #176 整合掉。这是「interface 成形期」特征,但短期内还会再变。
  4. 平台绑定 —— DefaultSnapshotsBucket 写死 GCP GCS,模型只硬编码 Gemini,其他 provider 走 fallback 文案。要真去平台化需要补 AWS S3 / Azure Blob / 多 provider adapter。
  5. 构建链路未覆盖 ARM64 —— issue #358:Makefile/ko build targets hardcode linux/amd64,对 Apple Silicon / AWS Graviton 自部署用户是 blocker。
  6. 生产化配套不足 —— 无 CHANGELOG(git log + GitHub Releases 替代)、无 nightly E2E、无 integration test pipeline、release 走 ko apply 手动部署。

行动建议

如果你要用它

  • 不建议立即生产化——v0.3.x + roadmap §1「Stabilize Core Specs」+ README WARNING 已经说「stable release 之前还会有 breaking changes」
  • 适合评估纳入中远期 stack——尤其是有 K8s 集群 + 跑大量 agent + 需要 sub-second suspend 节省成本的场景
  • 对比 Kagent 决定:ax 优势在 suspend/resume 与 Substrate 一栈;Kagent 优势在 CRD/informer 治理与社区成熟度
  • 小规模自托管:可作为内部 coding agent 的底座(10-1000 个 task/天)

如果你要学它

重点关注这 8 个文件:

#路径行数推荐理由
1DESIGN.md804 分钟读完架构全貌
2pkg/apis/v1alpha1/ax.proto322整个 API 的契约;reserved 字段暴露演化轨迹(gateway 已被删除)
3pkg/apis/v1alpha1/types.go277proto ↔ YAML 桥接的工程典范
4internal/controller/reconciler.go464单文件讲透「controller → substrate → K8s」全链路;status condition 状态机;taskTemplateName SHA trick
5internal/store/redis/store.go711Redis Streams 实战范本:ZSet 索引 + XREADGROUP + PubSub watch + 两阶段删除
6internal/substrate/client.go448AX/substrate 边界全貌;snapshot 配置;actor state machine 等待
7runner/runner.go246in-container 容器主循环;maiden-run marker;SIGTERM grace period;workspace 顺序 mount
8internal/model/client.go622Gemini 集成 + K8s Secret 自动解析 + provider fallback;看 generateGoogle / fallbackResponse 即可

如果你要 fork 它

可改进方向:

  1. 补 substrate mock + reconciler e2e test——把测试覆盖拉到 ≥40%,生产前必做
  2. 解绑 GCP——抽象 SnapshotBackend interface(GS / S3 / Azure Blob),DefaultSnapshotsBucket 改成配置项
  3. 加 provider abstraction——internal/model/client.go 当前只硬编码 Gemini,需要 OpenAI/Anthropic/Bedrock 适配
  4. 修 ARM64 build(issue #358)——Makefile/ko targets 加 GOARCH 变量
  5. 拆分 workspace bootstrap 与 coding agent harness(roadmap §3)——让用户可配置自定义 agent runtime,而不是被 antigravity 绑定
  6. stabalize 4 → 3 primitives 后——Gateway 已 deprecated,可以从 README/docs 清理掉历史叙事

知识入口

资源链接
DeepWikihttps://deepwiki.com/google/ax
Zread.ai未收录
关联论文无(起源叙事指向 DeepMind agentic runtime 研究但无具体 paper 链接)
在线 Demo无官方 Playground;可在本地 clone 后跑 ./demo.sh 体验完整 lifecycle(apply → watch → ssh → suspend → resume → delete)
官网https://agentexecutor.io
外部深度视角Google Open-Sources AX, a Kubernetes-Style Orchestrator for Autonomous AI Agents(InfoQ)— 独立观点:AX 是「foundational execution runtime」而非高层 orchestrator;Temporal 的 durable-execution 思路被借鉴但本地化到 agent;Kagent 共享 K8s-native 定位但 AX 更激进追求 suspension/multiplexing 经济性
外部深度视角Google AX: Safer AI Agent Sandboxes at Scale(Nahornyi AI LAB)— 独立观点:把「不可信 agent 代码」提升为一类独立基础设施是核心思路;批评点在于「billions per cluster」是架构目标而非已验证容量;substrate 是真正执行层,AX 只是声明式 orchestration;价值最终取决于「一个坏 agent 的故障域是否被严格圈在自己 sandbox 内」,公开材料尚未证明

相关报告