Skip to content

Agent 可靠性:不重、不漏、不静默

第二部 · Agent 系统与平台 · 第6章

撰写日期:2026-08-31(合并多次长期在线与漏事件复盘)

结论

Agent 从演示变成长期系统后,主要故障通常不是模型答错,而是事件没进来、任务重复执行、状态没有落盘、失败被合理默认值掩盖。

可靠性可以收敛成三个用户承诺:同一动作不重复、该处理的事件不遗漏、系统坏了不会假装正常。

1. 不重:副作用必须幂等

  • 每个事件保留稳定标识和已处理记录;
  • 连接阶段失败可以重试,服务端可能已经处理的写操作不能无脑重放;
  • 发送、扣费和创建资源前使用幂等键或先出队再执行;
  • 同一自动化只有一个有效消费者,迁移时旧实例先退役。

2. 不漏:事件入口必须能对账

长连接、Webhook 和事件总线都可能出现“进程活着、事件没送达”。不要只监控连接状态,而要比较:

text
权威数据源中的应处理事件
− 本地已处理记录
= 待补偿缺口

短周期回查只负责发现缺口,补偿事件仍进入原有处理流程。这样系统无需先解释连接为什么失效,也能恢复最终结果。

定时任务使用“上次成功游标 → 当前”的窗口;失败不推进游标。固定的“今天零点到现在”会在改时间或漏跑时留下永久空洞。

3. 不静默:失败不能伪装成业务值

采集失败返回 0、空数组或旧缓存,都会让故障看起来像“今天真的没数据”。系统应区分:

  • 有效的零值;
  • 数据暂未更新;
  • 采集失败;
  • 使用了旧数据。

队列中的异常默认留队、留痕并重试;只有到达明确截止时间,才进入经过设计的降级路径。

4. 三层兜底

机制目标
自愈有界重试、游标、恢复点短故障不打扰人
告警超过阈值只通知一次,附事实和入口持续故障必须被看见
收尾截止后执行预先批准的降级方案任务不永久烂尾

成功通知和空通知通常应该静默。告警通道的稀缺性与可靠性本身同样重要。

5. 用合成事件验证整条链路

进程存活、端口正常、连接对象显示在线,都不能证明用户一定能收到结果。定期投递一条可识别的合成事件,验证接收、排队、模型处理、发送和状态记录整条路径,才是端到端健康检查。

相关

MIT License