Skip to content

第 18 章 Research Brief:Retry、Recovery 与容错

要解决的工程问题

当第 17 章的质量门返回 rejectedneeds_evidenceneeds_review 时,Agent 不能把“再试一次”当作默认动作。它需要区分:这次失败是否短暂、此前动作是否已经产生副作用、是否存在明确检查点和补偿信息、以及何时应停止并升级给人类。本章的目标是把这条判断链写成可审查的 Recovery Contract,而不是提供某个产品的重试库配置。

读者与前置依赖

  • 读者: 要为 Tool 调用、工作流或研究任务设计失败路径的工程师与测试人员。
  • 最小前置: 第 10 章的状态机和检查点;第 11 章的副作用与效果不确定性;第 14 章的人工审批;第 15 章的状态快照;第 17 章的证据质量门。
  • 本章不承担: 不收集真实观察(第 15 章)、不定义任务是否通过(第 17 章)、不实现某个队列、断路器、Saga、浏览器或云服务,也不设计第 19 章的长期上下文压缩。

写作假设与边界

  1. 外部效果的状态必须显式为 not_appliedappliedunknown;不知道不等于未发生。
  2. retry 只是在满足条件时安排另一轮尝试,不能证明效果、恢复或任务接受。
  3. compensate 是业务特定的后续操作,不等同于数据库回滚,也不能假定与正向操作严格反序。
  4. 教学代码只处理注入对象,不等待、不发网络请求、不写文件、不调用真实工具,也不执行补偿。

可核验陈述与来源界限

候选陈述来源写作处理
RFC 9110 将 HTTP 幂等方法与通信失败后的受限自动重试联系起来,并限制非幂等请求的自动重试条件。REF-065只用于说明“可重复”需要语义和效果证据,不能把 HTTP 规则推广成 Tool 规则。
重试可能放大负载;随机化指数退避、重试上限、预算和单层控制是 Google SRE 的工程建议。REF-066不写固定次数、延迟、预算或容量结论;本章策略字段是自定义教学模型。
补偿需要进度与撤销信息,可能失败,需要关联、审计和人工介入。REF-067只作多步骤恢复的背景,不把补偿称为通用回滚保证。

本书工程扩展

本章提出 Recovery Contract。它把一次可恢复决策压缩为:任务和目标、失败分类、尝试上限、效果状态、可重复性说明、检查点、补偿说明、停止条件和升级对象。这个契约不是 RFC、SRE 或 Azure 的字段格式,而是为了让 Harness 在下一步前暴露自己不知道什么。

章节论证与交付物

工件内容验收方式
正文错误分类、重试条件、恢复/补偿、检查点、停止与升级边界事实、本书模型和教学案例分层。
图示从分类到 retryrecovercompensateescalate 的状态机Mermaid 源与正文图块一致。
最小示例assessRecoveryDecision 纯内存判断器Node 内置测试覆盖未知效果、上限、补偿和升级。
Runbook失败前后需保存的证据、停止条件与人工交接字段不含虚构真实系统命令。
事实核验每条事实的来源、允许用途、外推禁区与复核日期全部局部键可回链到本文件。

研究风险

  • 概念混淆: 把“调用超时”写成“动作未执行”。处理:要求显式效果状态,未知即停在观察/升级路径。
  • 算法迷信: 把指数退避或熔断器写成普适解。处理:只讨论它们需要的负载、分类和预算前提。
  • 回滚承诺: 把补偿称为恢复原样。处理:强调业务特定、可能失败、可能需要人工决定。
  • 产品漂移: 某个运行时的重试字段随版本变化。处理:正文不依赖产品参数;动态产品资料必须未来重查。

完成检查

  • [x] 已明确第 15、17、19、20 章的职责边界。
  • [x] 已实际读取三项一手资料,并记录其限定用途。
  • [x] 已定义图示、纯内存示例、测试和恢复 Runbook 的交付物。
  • [x] 未把研究来源的建议、示例或数值改写成统一标准。

从同一套 Markdown 书稿生成。