10.5 流式输出、重试与提前终止

长任务的可靠性不只取决于模型能力,还取决于系统是否能持续输出可观测状态、是否能对失败做有界重试、以及是否能在必要时安全终止执行。本节结合 OpenClaw 的重试策略与模型故障切换文档,说明流式输出的工程意义、重试与降级的边界,以及如何把这些能力纳入验收与排障流程。

10.5.1 流式输出的工程意义:把中间态变成可观测事实

流式输出不仅用于改善交互体验,更重要的是让长链路任务具备可观测中间态,例如:任务是否进入路由、是否发生工具拒绝、是否发生模型切换或重试。对于运维与排障,关键在于能用结构化日志回放一次请求的完整链路。

推荐在排障窗口跟随 JSON 日志,并按事件类型过滤关键事件:

openclaw logs --follow --json | jq -c 'select(.event=="routed" or .event=="tool_call" or .event=="tool_denied" or .event=="model_fallback")'

10.5.2 重试策略:有界重试与错误分类

重试的目标是消化瞬时故障,而不是掩盖逻辑错误。官方重试策略文档强调了错误分类与有界重试的重要性:https://docs.openclaw.ai/concepts/retryarrow-up-right

工程上建议遵循三条规则:

  1. 区分瞬时故障与不可重试故障:鉴权失败、参数不合法、策略拒绝等属于不可重试,应快速失败并给出可操作指引。

  2. 对读操作可自动重试,对写操作必须谨慎:写操作可能产生外部副作用,除非具备明确的幂等机制与结果对账,否则不建议自动重试。

  3. 为重试设预算:限制最大次数与最大耗时,避免失败放大为资源占用与队列拥塞。

10.5.3 模型故障切换:用回退链路把不可用变为可用

当上游模型供应商出现短时不可用或限流时,重试可能不足以恢复服务。OpenClaw 支持通过模型回退链路进行故障切换,配置上表现为主模型的 fallbacks 字符串列表。系统会在主模型失败时按顺序尝试备选模型。相关概念与配置见官方文档:https://docs.openclaw.ai/concepts/model-failoverarrow-up-right

下面示例展示了一个常见回退链路:当主模型(GPT-5.2)失败时,按顺序回退到备用的小模型或跨供应商模型。

模型回退属于系统层面的降级能力,应与日志与告警联动:当发生回退时,日志中应出现明确事件,便于在成本、质量与可用性之间做权衡。

10.5.4 提前终止与资源预算:让失败可控,让取消可落地

提前终止用于两个目标:

  1. 用户主动取消或任务明显偏航时,尽快释放资源。

  2. 触发安全边界时,及时阻断高风险动作。

工程上建议把“可终止”写成约束:

  • 工具调用应有超时与失败返回,并在日志里记录原因。

  • 关键写操作应设置确认点,并具备回滚或对账路径。

  • 对于长输出,尽量用结构化中间态而不是一次性堆叠结果,便于在取消时留下可用证据。

验收与排障时,可用 status --deepdoctor 先确认系统状态与配置被加载,再结合日志回放定位具体失败点。

最后更新于