一条 可恢复、可审计、可扩展 的执行链把事情串起来。
AX 放在技术栈的哪个位置
先看它在技术栈里的位置。AX 既不是模型层,也不是某个具体框架的替代品。 它插在 Agent 应用和底层基础设施中间,负责把上层的任务意图翻译成一套可追踪的执行过程。
mermaid-01.png
图:AX 位于 Agent 应用与底层执行基础设施之间,负责托住执行过程。
这层位置很关键。它意味着 AX 对上层 Agent 实现基本保持中立,对下层模型也不强绑定。你可以继续用 ADK、LangGraph,甚至是自己的 Harness;也可以换模型,而不必动到 AX 的核心职责。换句话说,它想管的是 执行,不是 思考。
真正的核心不是 Agent,而是 Controller
系统里最重要的组件不是某个 Planner Agent,而是 Controller。因为一旦把 Agent 执行当成生产系统问题,第一优先级就不再是"会不会推理",而是"谁在协调、记账、路由和兜底"。
mermaid-02.png
图:Controller 通过 Executor、Registry 和 Event Log 统一托管执行链。
这里有三个角色值得单拎出来:
Executor 决定这次任务该往哪里跑,什么时候继续,什么时候停。
Registry 把可用的 Agent、Tool、Skill 暴露成一张可查询的能力表,运行时不用写死依赖。
Event Log 不是普通日志,它记录的是 执行进度本身,所以它参与恢复,不只是排错。
这也是 AX 和不少"框架式 Agent 编排器"的分水岭。后者更关心节点之间怎么流转,AX 更关心 流转发生以后,系统能不能把整个过程可靠地托住。
一次任务真正怎么跑完
AX 并不是把所有事塞给单个 Agent,而是把请求拆成几段:入口路由、Planner 分析、远程 Agent 执行、Tool 调用、状态回写。中间哪一段出问题,Controller 都能知道当前停在什么位置。
mermaid-03.png
图:一次任务会经过路由、规划、远程执行、工具调用和状态回写。
这条链路里最容易被低估的是 Resumable Stream。如果只是普通 RPC,连接断了就断了,调用方只能重试。AX 把执行过程做成 可恢复的流,等于承认一件很现实的事:长任务在真实环境里就是会被打断,系统应该把"中断"当成常态,而不是异常。
分布式不是卖点,是隔离故障域的手段
很多人一看到"分布式运行时",会先想到扩容。AX 这套设计更实在,它首先解决的是 隔离。Controller、Skills、Tools、Agents 都可以独立部署在不同进程甚至不同节点,远程 Agent 通过 gRPC 和 Controller 通信,失败边界天然被切开了。
这带来几个直接好处:
远程 Agent 跑崩,不会把 Controller 一起拖下去。
高风险工具可以丢到单独环境里跑,权限边界更干净。
资源型任务和轻量型任务能分开调度,不必共享一个执行池。
某个 Agent 的噪声日志、内存暴涨、重试风暴,不会污染整条链路。
不少介绍会把它放成一个单独能力点,但我觉得它其实是整套系统的基础假设:Agent 不该默认和调度器同生共死。
Event Log 不是辅助信息,它就是恢复现场
真正让长任务可恢复的,不是简单保存一个"任务成功 / 失败"状态,而是把执行过程按序号持续落盘,让系统随时知道上次稳定位置停在哪。
mermaid-04.png
图:Event Log 记录稳定序号,让长任务能从中断点继续。
这类设计在几个场景里尤其有用:
深度研究类任务 动辄跑几十分钟,中途掉线很常见。
多工具链路 往往包含外部 API,失败率不受你控制。
人工介入审批后继续执行,天然就是分段运行。
Event Log 是 single source of truth。这不是修辞。只要你真的想做恢复、回放、审计和分叉,系统就必须承认有一份权威执行历史存在,而且它不能只放在内存里。
AX 为什么坚持做框架无关接入
AX 的接入方式做得很杂,但这个"杂"是有理由的。它不要求所有 Agent 都按一种写法来实现,而是给了四条进场路径:
接入方式 适合什么场景 运行时特征
原生远程 Agent 已经有独立 Agent 服务 通过 AgentService.Connect 建立 gRPC 双向可恢复流
Google ADK Agent Python 生态里的 ADK 项目 由 Python ADK Agent 直接接入,底层通信封装为 gRPC
A2A Bridge Agent 团队已有 A2A 兼容 Agent 通过 A2A Bridge 转换协议与标头
Colab Agent 研究和实验任务 支持把 Python 脚本或 Notebook 作为执行入口
mermaid-05.png
图:AX 通过多种接入模式兼容已有 Agent 生态,而不要求统一重写。
这背后的判断很工程化:企业里不会只有一种 Agent 形态。 有人用 Python,有人已经做了 A2A 协议,有人只是想把现成脚本纳入统一调度。让这些东西都重写一遍,系统很难落地。把协议边界做厚一点,反而更现实。
审计和权限别散在各个 Tool 里
AX 最像"基础设施"而不是"框架"的地方,就在 审计与策略控制。所有用户请求、Agent 请求、Tool 调用都经过 Controller 这一个控制面,于是权限校验、调用记录、执行限流和审批流可以集中处理。
mermaid-06.png
图:把权限、限流、审计和审批放回控制面,才能真正治理 Agent 行为。
这套做法的好处很直接:
安全规则不会散落在每个 Tool 的私有实现里。
需要人工确认的危险操作,比如 Bash 执行,可以被统一拦下来。
出了问题以后,能回溯到是哪次请求、哪个 Agent、哪一步工具调用触发的。
尤其是 Bash Tool 的"需用户确认才能执行",看起来像个小功能,其实透露出整套系统的安全姿势:默认不信任 Agent 的执行冲动,必须给控制面留一个人工刹车。
Session Fork 解决的不是重试,而是低成本试错
如果只想断点恢复,事件日志已经够用了。AX 还额外做了 会话分叉,这说明它想支持的不只是"接着跑",还有"从历史某一点拐出去跑另一条线"。
mermaid-07.png
图:同一份执行历史既能恢复原链路,也能从稳定点分叉试错。
这在几个地方很有用:
What-if 分析,不想污染原任务链路。
回溯重试,直接从失败前的稳定点重开。
长任务跑到一半想验证另一套参数,不必整段重来。
这也是为什么 Fork 和 Resumption 必须分开看。恢复解决的是可靠性,分叉解决的是探索效率。 两者依赖同一份事件历史,但目标并不一样。
如果把 AX 当成一句话,它在补"Agent 缺的控制面"
Google AX 想解决的不是 Agent 是否足够聪明,而是 Agent 一旦进入真实执行环境,系统还缺哪几块硬骨头。它给出的答案也很明确:
用 Controller 把执行调度从 Agent 本体里抽出来。
用 Event Log 把任务状态外化,支持恢复、回放和分叉。
用 分布式部署 和 Actor 隔离 切开故障域。
用 统一控制面 接住审计、权限、限流和审批。