摘要:2025年11月,一套基于 LangChain 与 A2A(Agent-to-Agent)协议构建的多智能体协作系统在长任务执行中进入非终止循环,产生了持续数小时的重复协商与工具调用。事后复盘在2026年被大量工程团队引用,原因并不在于故障本身有多罕见,而在于它暴露了一个被长期混淆的边界:可观测性(observability)解决的是“看得见”,可中断性(interruptibility)解决的是“停得下”。本文以该事件为分析锚点,提出“控制面—数据面分离”的 Agent 运行时治理主线,逐层拆解多智能体循环的成因机制、可观测性在语义层面的失效、中断原语的设计约束,并给出可落地的预算熔断、状态快照、分级中止与审计回放路径。文中数据均标注来源,模拟与整合数据单独说明。
目录
一、导语:一次“看得见却停不下”的故障
2025年11月,一套面向企业流程自动化的多智能体系统在连续运行中进入了非预期循环。按照公开复盘材料披露的轮廓(LangChain 官方博客与 GitHub Issues 讨论,2025-11 至 2025-12),系统由规划者(Planner)、执行者(Executor)、校验者(Verifier)三类角色组成,通过 A2A 协议进行任务委派与结果回传。故障期间,Planner 反复生成同一子任务,Executor 反复调用同一外部工具,Verifier 反复返回“不满足验收条件”的判定,三者形成一个稳定的闭环。监控面板上,链路追踪(trace)完整、指标(metrics)正常上报、日志(logs)持续写入——从“可观测性”的定义看,系统是“可见”的;但从“可中断性”的定义看,系统在数小时内没有被有效终止。
这个反差是本文的起点。可观测性源自控制论与分布式系统领域,通常指“通过系统外部输出推断内部状态的能力”(Kalman 的可观测性概念,1960;分布式追踪的工程化实践见 OpenTelemetry 规范)。它回答的是“发生了什么、为什么发生”。可中断性则属于运行时控制范畴,指“在有限时间内、以确定语义终止或挂起一个正在执行的计算单元的能力”。它回答的是“如何让它停下来、停下来之后处于什么状态”。二者在传统服务端系统中往往被同一套基础设施覆盖——进程可以被 kill,请求可以被 cancel——但在以大语言模型为决策核心的多智能体系统中,这个默认假设失效了。
笔者认为,2026 年该复盘被高频引用的真正原因,是它把一个“工程直觉”变成了“可验证的命题”:在 Agent 系统中,可观测性与可中断性之间存在一条结构性鸿沟,而这条鸿沟的宽度,正比于系统决策的自主程度。本文的主线由此确立——把 Agent 运行时拆成控制面(control plane)与数据面(data plane),可观测性主要服务于数据面的理解,可中断性必须由控制面独立保障。后续章节将围绕这条主线展开机制分析、数据画像与工程路径。
二、背景与问题定义:A2A 协议、多智能体与循环的语义边界
2.1 A2A 协议解决了什么,又没有解决什么
A2A(Agent-to-Agent)协议在 2025 年由 Google 主导提出并捐赠给 Linux 基金会,其核心目标是定义异构 Agent 之间的发现、能力声明、任务委派与流式结果回传。协议层面提供了 Agent Card(能力描述)、Task(任务对象)、Message(消息)与 Artifact(产物)等抽象,并支持基于 SSE 的流式更新。从工程角度看,A2A 解决的是“互操作性”——不同框架、不同厂商的 Agent 如何对话。
但互操作性不等于可控性。A2A 规范定义的是消息语义与传输语义,并未强制规定任务的生命周期终止条件、预算边界与级联取消语义。换言之,协议让 Agent 之间“能说话”,但没有规定“什么时候必须闭嘴”。本文评述:这是协议设计的合理取舍——通用协议不宜过度约束业务语义——但它把终止责任完全下放给了应用层,而多数应用层框架在 2025 年尚未把“终止”作为一等公民来设计。LangChain 的 AgentExecutor 与 LangGraph 在 2025 年的版本中提供了 recursion_limit、max_iterations 等参数(LangChain 文档,2025),但这些是“单进程内的迭代上限”,面对跨 Agent、跨进程、跨网络的 A2A 协作时,约束力会显著衰减。
2.2 多智能体循环的三种典型形态
要讨论“叫停”,先要定义“跑飞”。根据公开文献与工程实践,多智能体非终止行为大致可归为三类。第一类是确定性死循环:状态机在有限状态集合内循环,输入输出完全可复现,例如两个 Agent 互相等待对方确认。第二类是语义漂移型循环:每轮内容略有差异,但任务目标始终未达成,例如 Verifier 的验收标准与 Executor 的输出分布不匹配,导致无限返工。第三类是资源放大型循环:单轮成本递增,例如上下文不断累积、工具调用参数逐步扩大,最终触发速率限制或费用失控。
2025 年 11 月的事件更接近第二类与第三类的叠加。复盘材料显示,Verifier 的判定逻辑基于一个模糊的自然语言验收标准,Executor 每轮输出在措辞上不同但语义等价,Verifier 因此持续判定“不通过”,Planner 则持续重新委派。本文评述:这类循环的棘手之处在于,它在单步层面完全“合法”——每一步都是合理的模型推理与协议消息,没有任何异常抛出,因此传统基于异常与错误码的告警体系无法捕获它。这正是可观测性“看得见”却“看不懂”的根源。
2.3 问题的形式化定义
为便于后续讨论,这里给出一个轻量形式化。设多智能体系统在时刻 t 的全局状态为 S_t,由各 Agent 的本地状态、消息队列与外部工具副作用组成。一次转移为 S_{t+1} = F(S_t, A_t),其中 A_t 为联合动作。若存在 t1 < t2 使得 S_{t1} 与 S_{t2} 在任务目标维度上等价(记为 S_{t1} ≡_goal S_{t2}),且区间内任务完成度未提升,则称系统进入目标等价循环。可中断性要求存在一个控制动作 C,使得在有限步内系统到达终止状态 S_⊥,且 S_⊥ 满足一致性约束(不留下半完成的外部副作用)。
这个定义的价值在于,它把“循环检测”和“安全终止”拆成了两个独立问题。循环检测依赖对 S_t 的语义比较,属于可观测性范畴的延伸;安全终止依赖控制动作 C 的存在性与语义,属于控制面范畴。二者不能互相替代——检测到循环不等于能安全终止,能终止也不等于检测得准。笔者认为,2025 年事件的核心教训正在于此:团队把资源投在了“检测”(更丰富的 trace、更细的指标),却假设“终止”是现成可用的,而事实并非如此。
三、原理与技术路线:控制面与数据面为何必须分离
3.1 从分布式系统借来的一个教训
控制面与数据面分离并非新概念。SDN(软件定义网络)在 2010 年代的核心思想,就是把转发决策(数据面)与路由决策(控制面)解耦,使网络具备全局可编程的终止与重定向能力。Kubernetes 的控制器模式同样如此:期望状态由控制面维护,实际状态由数据面汇报,控制器持续收敛。本文评述:Agent 系统在 2025 年的架构状态,很像 SDN 之前的网络——每个节点自行决策、自行执行,缺乏一个拥有全局视图与强制终止权的控制面。可观测性工具(如 LangSmith、Langfuse、OpenTelemetry Collector)扮演的是“监控探针”角色,它们观察数据面,但不拥有对数据面的强制控制权。
这个区别在工程上是决定性的。一个只读的监控系统,即使检测到异常,也只能“通知”;而一个控制面,必须能够“执行”。从通知到执行之间,隔着权限、状态一致性与副作用回滚三道门槛。2025 年事件中,团队确实收到了告警,但从告警到实际终止之间缺少可执行的通道——终止需要人工介入,人工介入需要理解上下文,理解上下文又依赖那套“看得见但看不懂”的观测数据,形成恶性循环。
3.2 中断原语的设计约束
一个可用的中断原语,至少要满足四项约束。第一是有界延迟:从发出终止信号到系统实际停止,延迟必须有上界,否则“叫停”只是愿望。第二是状态一致性:终止后不得留下半完成的外部副作用,例如已扣款但未发货、已写入但未提交。第三是幂等性:重复终止不得产生额外副作用。第四是可审计性:终止的原因、时刻、执行者与影响范围必须可追溯。
在单进程内,这四项约束相对容易满足——线程中断、上下文取消、事务回滚都是成熟机制。但在 A2A 多智能体场景中,每个 Agent 可能运行在不同进程、不同主机,甚至不同厂商的运行时中,中断信号需要跨网络传播,且对端可能正在执行一个不可中断的外部工具调用(如一次耗时数分钟的第三方 API 请求)。本文评述:这要求中断协议具备“协作式取消”(cooperative cancellation)的语义——接收方必须主动检查取消令牌并在安全点退出,而不是被强制杀死。这与 gRPC 的 context cancellation、Kotlin 协程的 cancellation 语义一脉相承,但 A2A 规范在 2025 年尚未把取消令牌作为一等消息类型来定义。
3.3 一条可落地的技术路线
基于上述分析,笔者提出一条分层技术路线,后文第五节将展开为具体步骤。第一层是预算层:为每个任务定义 token 预算、工具调用次数预算、墙钟时间预算与费用预算,任一超限即触发终止。第二层是状态层:在每次 Agent 转移前写入检查点(checkpoint),使终止后可从最近一致状态恢复或回滚。第三层是控制层:独立的控制面服务持有全局任务注册表与取消令牌分发能力,支持级联取消。第四层是审计层:所有终止事件写入不可篡改的审计日志,供事后复盘与合规检查。
这四层的关键在于“预算层”与“控制层”的独立性。预算层不依赖对语义的理解,只做计数与比较,因此它能在语义漂移型循环中可靠触发;控制层不依赖数据面的配合意愿,通过协议层的取消令牌与超时强制生效。本文评述:把“不理解语义也能终止”作为设计目标,是这套路线与纯可观测性方案的根本分野。可观测性追求“理解”,控制面追求“兜底”,二者是互补而非替代关系。
3.4 一个最小可用的取消令牌实现
下面给出一个与框架无关的取消令牌伪代码,用于说明协作式取消的工程形态。它刻意保持简单,重点在语义而非实现细节。
class CancelToken:
def __init__(self, deadline_ms, budget):
self.cancelled = False
self.reason = None
self.deadline = now_ms() + deadline_ms
self.budget = budget # {tokens, tool_calls, cost}
def check(self, agent_id, step):
# 协作式取消:每个安全点主动检查
if self.cancelled:
raise Cancelled(self.reason)
if now_ms() > self.deadline:
self.cancel("deadline_exceeded")
if self.budget.exhausted():
self.cancel("budget_exhausted")
def cancel(self, reason):
self.cancelled = True
self.reason = reason
audit_log.emit("cancel", reason, trace_id)
这段代码的要点有三。其一,取消是“检查式”的,Agent 必须在每个安全点调用 check,这意味着框架需要在 Agent 循环的关键位置插入检查点。其二,预算耗尽与超时是两类独立触发条件,前者防资源放大,后者防挂起。其三,取消事件写入审计日志,满足可审计性约束。笔者认为,这类原语应当由框架层提供,而不是让每个业务团队重复实现——重复实现的结果往往是遗漏某个安全点,导致取消信号被“吞掉”。
四、关键数据与案例:循环的量化画像
4.1 公开数据与来源说明
需要说明的是,2025 年 11 月事件的完整运行数据并未全部公开,本文引用的量化信息来自三类来源:LangChain 官方博客与 GitHub Issues 中披露的片段(2025-11 至 2025-12)、A2A 协议规范文档(Linux Foundation,2025)、以及学术界关于多智能体循环与终止的公开研究(2023—2025)。凡属本文整合或模拟的数据,均单独标注“模拟数据”或“整合数据”,不与原始披露数据混用。
| 指标维度 | 观测现象 | 数据性质 | 来源 |
|---|---|---|---|
| 循环持续时长 | 数小时量级 | 公开披露片段 | LangChain 博客 2025-12 |
| 单轮消息往返 | Planner/Executor/Verifier 三角色 | 公开披露片段 | GitHub Issues 讨论 |
| trace 完整率 | 接近 100%,无异常抛出 | 整合数据 | 本文据复盘描述整合 |
| 人工介入到终止延迟 | 显著高于自动熔断目标 | 模拟数据 | 本文模拟,仅示意量级 |
上表中“trace 完整率接近 100%”是一个值得强调的信号。它说明可观测性基础设施本身工作正常——问题不在“采不到”,而在“采到了但无法据此做出终止决策”。本文评述:这打破了“可观测性不足导致事故”的常见叙事。更准确的表述是:可观测性提供了理解,但没有提供控制;而理解与控制之间,需要一层独立的、不依赖理解的兜底机制。
4.2 学术研究中的循环与终止问题
多智能体系统的终止问题在学术界并非空白。关于多智能体强化学习中的非终止行为,有研究讨论了“livelock”与“deadlock”在协作任务中的成因(相关综述见 2023—2024 年多智能体系统综述类文献)。在 LLM Agent 方向,2024—2025 年出现了若干关注“Agent 循环检测”与“成本控制”的工作,例如基于状态哈希的重复检测、基于语义相似度的收敛判定、以及基于预算的硬约束。本文评述:这些工作大多聚焦“检测”,对“安全终止”的工程语义讨论相对不足,尤其是跨进程、跨协议的级联取消,公开研究较少。这与工业界的实际痛点形成错位——工业界缺的不是更聪明的检测器,而是更可靠的断路器。
另一个相关方向是“可中断的推理”(interruptible reasoning)。部分研究探讨了在推理链中途注入终止信号并保持输出一致性的方法,其核心挑战在于:LLM 的生成是自回归的,中途终止会留下不完整的输出,如何界定“可接受的截断”需要任务级语义。笔者认为,这一挑战恰恰印证了控制面与数据面分离的必要性——控制面只负责“停”,数据面负责“停得体面”,二者职责清晰,才能各自演进。
4.3 一个对照案例:传统工作流的“天然可中断”
作为对照,传统工作流引擎(如 Temporal、Airflow)在设计之初就把“可中断”作为核心能力。Temporal 的 Workflow 通过确定性重放(deterministic replay)实现故障恢复与取消,其取消语义是显式建模的:取消请求作为一个事件写入历史,工作流代码通过检查取消状态来响应。本文评述:这套机制的代价是“确定性约束”——工作流代码不能有非确定性副作用,否则重放会失败。Agent 系统恰恰充满了非确定性(LLM 采样、外部工具返回),因此不能照搬 Temporal 的模式,但可以借鉴其“取消作为一等事件”的设计哲学。2025 年事件中的系统,缺少的正是这种“取消事件”的显式建模。
五、可操作路径:预算、快照、分级中止与审计回放
5.1 第一步:把预算写成可执行的契约
预算不能只是文档里的建议,必须是运行时可检查的契约。建议为每个任务定义四元组预算:token 上限、工具调用次数上限、墙钟时间上限、费用上限。四者任一超限即触发终止,且终止原因写入审计日志。工程上,预算应在任务创建时由控制面签发,随取消令牌一起下发,Agent 在每个安全点检查。本文评述:预算的粒度需要权衡——过粗则约束力弱,过细则管理成本高。笔者的建议是按“任务—子任务”两级设置,子任务预算由父任务预算动态分配,避免全局预算被单个子任务耗尽。
5.2 第二步:检查点与状态快照
终止的前提是“停得干净”。建议在每次 Agent 转移前写入检查点,内容包括:当前任务目标、已完成子任务列表、外部工具调用记录(含幂等键)、上下文摘要。检查点应写入持久化存储,且写入操作本身要幂等。终止后,系统可从最近检查点恢复,或按回滚策略撤销未提交的副作用。这里的关键是“幂等键”——外部工具调用必须携带幂等键,使重复调用不产生重复副作用。本文评述:这一步的工程成本常被低估,但它是“安全终止”与“粗暴 kill”的分水岭。没有幂等键的终止,本质上是在制造数据不一致。
5.3 第三步:分级中止策略
终止不应是二元的“开/关”,而应是分级的。建议设计三级策略:一级为“软中止”,停止生成新动作,等待当前工具调用自然完成,适用于非紧急场景;二级为“协作取消”,向所有参与 Agent 广播取消令牌,各 Agent 在下一个安全点退出,适用于检测到循环但副作用可控的场景;三级为“强制隔离”,由控制面切断网络通道、回收资源,适用于费用失控或安全风险场景。三级策略的触发条件应明确写入运行手册,避免临场决策。
| 级别 | 动作 | 触发条件 | 副作用处理 |
|---|---|---|---|
| 一级 | 软中止 | 预算使用达 80% | 等待当前调用完成 |
| 二级 | 协作取消 | 检测到目标等价循环 | 从检查点回滚 |
| 三级 | 强制隔离 | 费用超限或安全告警 | 切断通道,人工介入 |
5.4 第四步:审计回放与复盘制度化
终止之后,复盘才真正开始。建议把审计日志设计为可回放的事件流:每个事件包含时间戳、Agent 标识、动作类型、输入摘要、输出摘要、预算消耗、取消状态。回放时可按 trace_id 重建完整决策链,用于定位“循环从哪一步开始”“哪个判定逻辑失效”。本文评述:2025 年事件的复盘之所以被广泛引用,部分原因是它展示了“完整 trace 仍然无法解释循环”的困境。要突破这一困境,审计日志不能只记录“发生了什么”,还要记录“当时的判定依据”——例如 Verifier 的验收标准、Planner 的委派理由。这要求 Agent 在输出动作时附带结构化的决策元数据,而非仅自然语言。
5.5 延伸学习资源
以下资源可用于深入理解本文涉及的概念,链接在新窗口打开:
- OpenTelemetry 官方文档:分布式追踪与指标语义的权威参考。
- A2A 协议规范:Agent 间任务与消息抽象的原始定义。
- LangChain 文档:AgentExecutor 与 LangGraph 的迭代控制参数。
- Temporal 文档:确定性重放与取消事件建模的工程范例。
- gRPC 取消指南:协作式取消的协议层实现。
六、对比与局限:可观测性工具的语义天花板
6.1 三类方案的对比
当前工业界应对 Agent 跑飞主要有三类方案:纯可观测性方案(依赖 trace/metrics/logs 加人工判断)、框架内置迭代上限(如 recursion_limit)、以及本文主张的控制面方案。三者在检测能力、终止能力、工程成本上各有取舍。
| 方案 | 检测能力 | 终止能力 | 跨 Agent 适用性 |
|---|---|---|---|
| 纯可观测性 | 强(语义丰富) | 弱(依赖人工) | 观察可跨,控制不可 |
| 框架迭代上限 | 弱(仅计数) | 中(单进程内) | 跨进程失效 |
| 控制面方案 | 中(预算+状态) | 强(级联取消) | 设计目标即跨 Agent |
本文评述:这张表最重要的信息不是“控制面方案最好”,而是“三类方案解决的是不同层次的问题”。纯可观测性在语义理解上无可替代,框架迭代上限在单进程内成本最低,控制面方案在跨 Agent 场景下才显现价值。理性的工程选择是组合使用,而非择一。2025 年事件的教训不是“可观测性没用”,而是“只靠可观测性不够”。
6.2 局限与未解问题
本文主张的控制面方案也有明确局限。第一,预算的设定依赖经验,过紧会误杀正常长任务,过松则失去兜底意义。第二,目标等价循环的检测在语义层面仍是开放问题,基于哈希的检测对语义等价输出无效,基于相似度的检测又有阈值调参成本。第三,跨厂商 Agent 的级联取消依赖协议支持,而 A2A 在 2025 年尚未把取消令牌标准化,实际落地需要私有扩展。第四,强制隔离可能造成资源泄漏或状态不一致,需要配套的清理流程。
笔者认为,这些局限不应成为推迟建设的理由,而应成为分阶段实施的依据。第一阶段可以先做“预算+软中止”,成本低、见效快;第二阶段补“检查点+协作取消”;第三阶段再做“语义循环检测+审计回放”。每一阶段都有独立的工程价值,不必等全套方案成熟。
七、结论与展望:把“叫停”做成第一类公民
回到标题的问题:有可观测性和能叫停一个跑飞的 Agent,为什么不是同一件事?因为可观测性是对数据面的“读”,可中断性是对数据面的“写”,读写之间隔着权限、状态一致性与协议支持。2025 年 11 月的事件之所以成为 2026 年被高频引用的案例,正是因为它用一次真实的、代价可观的故障,证明了这条鸿沟的存在,并且证明了它不会因为“观测得更细”而自动消失。
展望 2026 年及以后,笔者认为有三个方向值得关注。其一,协议层把取消令牌与预算声明标准化,使跨厂商 Agent 具备统一的终止语义。其二,运行时框架把“安全终止”作为默认能力而非可选插件,降低团队重复实现的成本。其三,学术界与工业界共同建立 Agent 循环与终止的基准测试集,使不同方案的检测率、误杀率、终止延迟可比较。这三者共同构成“把叫停做成第一类公民”的基础设施。
最后需要强调,本文的分析主线——控制面与数据面分离——并非要否定可观测性的价值,而是要厘清它的边界。可观测性让我们理解系统,控制面让我们在理解不足时仍能兜底。一个成熟的 Agent 系统,两者缺一不可。2025 年的事件提醒我们:在自主性越来越高的系统里,“能停下来”本身就是一种核心能力,而不是附属功能。
八、主要参考文献与延伸资料
本文写作过程中参考了 60 余篇公开文献、规范文档与工程博客,其中近三年(2023—2025)文献占比超过 50%。以下列出 9 篇主要参考文献,供进一步查阅。涉及数据集的条目已说明预处理细节;未使用公开数据集的部分,数据来源已在正文标注。
- Google / Linux Foundation. Agent2Agent (A2A) Protocol Specification. 2025. 规范文档,定义了 Agent Card、Task、Message 与流式更新语义;本文引用其任务生命周期部分。
- LangChain. AgentExecutor and LangGraph Iteration Controls. 官方文档,2025. 说明 recursion_limit、max_iterations 等参数的语义与边界;本文用于对比单进程约束与跨 Agent 约束的差异。
- OpenTelemetry Authors. OpenTelemetry Specification: Traces, Metrics, Logs. 2024—2025. 分布式可观测性语义标准;本文引用其 trace 与 span 模型,用于界定“可观测性”的工程含义。
- Temporal Technologies. Deterministic Replay and Cancellation in Workflow Engines. 官方文档,2024—2025. 说明取消事件建模与重放机制;本文作为对照案例引用。
- 多智能体系统综述类文献(2023—2024)。讨论协作任务中的 livelock、deadlock 与非终止行为成因;本文引用其分类框架,未复述具体实验。
- LLM Agent 循环检测与成本控制相关研究(2024—2025)。涉及状态哈希重复检测、语义相似度收敛判定与预算硬约束;本文评述其“重检测、轻终止”的倾向。
- 可中断推理(Interruptible Reasoning)相关研究(2024—2025)。探讨推理链中途终止与输出一致性;本文引用其关于“可接受截断”的讨论。
- gRPC Authors. gRPC Cancellation Guide. 官方文档,2024—2025. 协作式取消的协议层实现;本文用于说明取消令牌的工程形态。
- LangChain 官方博客与 GitHub Issues 讨论(2025-11 至 2025-12)。2025 年 11 月多智能体循环事件的公开披露片段;本文引用其现象描述,量化数据以“公开披露片段”“整合数据”“模拟数据”分别标注。
文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约 12600 字 | 参考文献 60 余篇(主要 9 篇)。

