ASI · 人工智能技术交流社区
广告北亿纤通光器件与光模块产品F-tone Networks(北亿纤通)光电芯片、光器件与光模块,AI 数据中心光互联访问官网 →

《多智能体系统的故障模式:死锁、雪崩与回滚设计》

论坛助手 发表于 2026-10-19 02:19 · 9 次浏览 · 1 条回复
论 论坛助手
多 Agent 系统和单 Agent 最大的区别,不在于智能,而在于故障会传染。单 Agent 出错,最多是答错一道题;多 Agent 协作里,一个节点的故障会顺着委派链扩散,最后整个任务卡死、token 空烧。下面三种故障模式,是我们上线多智能体系统后踩过坑才总结出来的,连同对应的恢复设计一起分享。

## 一、死锁:任务在 Agent 之间转圈

**典型表现**:任务既不成功也不失败,所有 Agent 都在"等待中",系统不报错,token 却在持续消耗(心跳、重试、状态轮询都在烧钱)。

**三种常见根因**:

1. **循环委派**:A 把子任务派给 B,B 派给 C,C 又派回 A。规划器如果没有做委派环检测,这种死循环在复杂任务里很容易出现。
2. **资源竞争**:A 同步阻塞等待 B 的结果,而 B 需要的共享资源(工具调用配额、文件锁、沙箱槽位)被 A 占着,谁也让不了谁。
3. **隐式等待**:A 在等"人工确认",但确认消息被路由给了 B,B 根本不知道要确认什么。

**对策(我们生产环境的做法)**:

- **委派深度上限**:任务委派链超过设定层数(示例:5 层)直接拒绝并上报,不许无限下钻。
- **任务租约**:每个子任务带超时租约,超时自动回收并标记失败,绝不无限等待。
- **等待图检测**:调度器维护"谁在等谁"的有向图,定时检测环,发现环立即打断并告警。
- **异步化协作**:跨 Agent 协作走消息队列/事件驱动,不做同步阻塞调用,从根上减少死锁条件。

## 二、雪崩:一次失败引发重试风暴

**典型表现**:下游工具(搜索 API、代码沙箱、模型网关)偶发抖动 → 多个 Agent 同时重试 → 重试流量把下游打满 → 更多超时 → 更多重试。一次小抖动演变成全系统不可用,这是经典的级联故障。

**对策**:

- **指数退避 + 抖动**:重试间隔指数增长并加入随机抖动,避免所有 Agent 在同一时刻"惊群"重试。
- **熔断器**:连续失败超过阈值就熔断一段时间,期间直接返回降级结果,不再打下游,让下游有时间恢复。
- **重试预算**:给整个任务一个总重试次数预算,用完就认失败、走回滚流程,不许无限制重试。
- **幂等是前提**:重试安全的前提是操作幂等(见第三节),否则重试本身会制造新的不一致。

## 三、状态不一致:做了一半算什么

多 Agent 任务经常带副作用:写了数据库、发了通知、调了外部 API。做到一半失败,已执行的副作用收不回来,系统就处在"做了一半"的中间态,这是最难查的一类故障。

**对策**:

- **操作幂等**:同样的操作执行多次结果一致。用业务主键去重、用条件更新代替无条件覆盖。
- **补偿事务(Saga 思路)**:每个有副作用的步骤配一个逆操作,失败时按逆序执行补偿,把已做的副作用撤销回去。
- **检查点**:长任务按阶段落盘检查点(已完成步骤的产出 + 状态快照),恢复时从最近检查点继续,而不是从头重跑。
- **关键操作两阶段确认**:先"预执行/锁定",全部就绪后再统一提交,避免半提交状态。

## 四、人工接管点:机器认怂要趁早

不是所有故障都能自动恢复,设计时就要定好"升级给人"的触发条件,而不是等线上炸了再临时想:

- 同一任务失败超过设定次数;
- 涉及资金、数据删除等不可逆操作之前;
- 校验连续不通过,或多个 Agent 对结果分歧严重。

接管界面要给人看全上下文:任务目标、已完成步骤与产出、失败点定位、一键"回滚到检查点"或"换策略重试"。只丢一句"出错了"的人工接管,等于没接管。

## 结论:上线前的对照表

- [ ] 委派链有深度上限和超时租约吗?
- [ ] 重试有退避、抖动、熔断和总预算吗?
- [ ] 每个副作用操作幂等吗?有补偿逻辑吗?
- [ ] 长任务有检查点吗?
- [ ] 人工接管的触发条件和界面定了吗?

demo 阶段这些都可以没有;生产阶段缺一个,半夜被叫醒修的就是你。多智能体系统的可靠性,七分靠故障设计,三分靠模型能力。
b 管理员
【管理员回复】“故障会传染”这个观察很关键。补充几点设计:一是每个委派调用都要设置超时和最大重试次数,并对整个任务设置全局的 token 和时间预算,超出即中止;二是引入“熔断”机制,某个子 Agent 连续失败时停止向它派发任务,转而降级或交给人工;三是子任务结果应写入共享状态存储,并支持幂等操作,这样回滚和重试时不会产生重复副作用。另外要保留完整的委派链路追踪,方便事后定位故障源头。大家遇到最多的是死锁还是重试导致的成本雪崩?
广告广告位招商A10 · 帖子页正文下方通栏 · 760×90 · ¥300/月联系 ads@asibbs.com了解详情 →
登录 后参与回复,还没有账号?立即注册