生产运维约 12 分钟

ReliabilityRail 异常探测

团队里某个成员卡住、打转、模型不可用时,怎么自动发现:信号 → 探测器 → 严重度 → 动作,自动处理只做可撤销的纠偏。

依据 agent-core 0.1.20 · develop@fbe6a0d9(2026-11-13)核实

解决什么问题

多个智能体组成团队协作时(openJiuwen 里叫 agent_teams),常见的故障不是报错,而是不报错地卡住:某个成员反复调同一个工具、两个成员互相踢皮球、输出越写越长、上下文被频繁压缩、模型组全部不可用……没人盯着就会一直耗下去。

ReliabilityRail 给每个成员装一个"监护仪":在生命周期事件上采集信号,交给一组探测器判断,再按严重度决定怎么处理。

源码ReliabilityRailagent-core/openjiuwen/agent_teams/reliability/rail.py:84@fbe6a0d9

四步:信号、探测、严重度、动作

一、信号。 Rail 在模型调用前后、工具调用前后、模型和工具异常时各产生一条信号,记录工具名、参数哈希、结果哈希、输出长度等。

二、探测器。 默认几种:

探测器发现什么
工具错误率一段时间内工具频繁失败、连续失败
重复调用同一调用反复出现;A-B-A-B 交替;同参同结果原地打转
模型错误模型调用频繁失败;模型组不可用
输出长度回复或思考内容过长
频繁压缩短时间内上下文被压缩多次
互相踢皮球两个成员之间来回传话

以重复调用为例,默认阈值是:同一调用出现 10 次记 LOW;A-B 交替 10 次记 MEDIUM;末尾连续 20 次"同参同结果"记 HIGH;30 次记 CRITICAL。只有严重度上升时才发出,避免刷屏。结果每次都不同的重复不算打转。

源码RepeatToolCallDetectoragent-core/openjiuwen/agent_teams/reliability/detectors/repeat_tool.py:15@fbe6a0d9

三、严重度到动作。 默认策略:

严重度动作
LOW只记日志
MEDIUM上报 leader
HIGH本地纠偏 + 上报 leader
CRITICAL本地纠偏 + 上报用户
源码默认策略agent-core/openjiuwen/agent_teams/reliability/remediation/policy.py:16@fbe6a0d9

四、本地纠偏有三道限制:

  • 只做 push_steering:往成员自己的模型里塞一条提示,不改参数、不停执行
  • 有预算:默认 60 秒内最多 5 次,超出就不再纠偏,交给 leader 和用户
  • 模型不可用、模型已被路由切换这两类异常不纠偏,给模型塞提示解决不了问题
源码LocalAutoRemediatoragent-core/openjiuwen/agent_teams/reliability/remediation/local.py:22@fbe6a0d9

开启方式

它是团队级的可选配置,默认关闭:

ReliabilityConfig(
    enabled=True,                          # 默认 False
    monitor_roles=["leader", "teammate"],  # 默认两种角色都监护
    # detectors=...、policy=...、restart_intensity=... 可以按需调阈值
)
说明

示意代码,字段名取自 ReliabilityConfig;具体挂到哪个团队对象上以 agent_teams 的接口为准。本站没有运行它。

动手:预测它会怎么做

三段成员行为,预测在默认配置下 ReliabilityRail 的反应。

模拟器加载中…

小结

  • 团队里最麻烦的故障是不报错的卡住,ReliabilityRail 用"信号 → 探测器 → 严重度 → 动作"自动发现。
  • 自动处理只有可撤销的纠偏,而且有预算;破坏性动作留给 leader。
  • 默认关闭,按团队开启,阈值都能调。

源码出处

链接指向固定提交,仓库后续更新不影响这里的行号。

过关测验

  1. 1. ReliabilityRail 默认是开着的吗?

  2. 2. ReliabilityRail 能做的最强的自动动作是什么?

  3. 3. 为什么 ReliabilityRail 的 priority 只有 5?

通关条件

  • ○ 完成模拟器任务(0/3)
  • ○ 测验全部答对