AI 简明手册
DeepSeek Harness 源码解读 · 模型与外部接入调用失败后怎样重试而不丢证据

调用失败后怎样重试而不丢证据

先设定故障

DSH 规定一次适配器调用就是一次提供方尝试,SDK 自带重试必须禁用。一次流式响应以 chunk 流和 message 流两种形态落盘,重试是持久日志里的显式事件。

失败如何传播

  1. HTTP 库静默重试把失败证据藏进内部循环

    HTTP 库静默重试把失败证据藏进内部循环,DSH 要求适配器只发一次请求,失败就规范化为可序列化的 LlmFailure。远程适配器带 streamIdleTimeoutMs 看门狗,空回复映射成 EMPTY_RESPONSE 错误。

    [repo]

  2. 双流持久

    双流持久:每个分片原样追加为 assistant/chunk 事件,流成功后再落一条 assistant/message 并记录 sourceEventSeqs。失败的半截输出不进派生历史,重试开新编号轮次从持久历史重建。

    [repo]

恢复与防线

  • 第 2 个 text 块吐了 3 个 delta 后连接被重置,assistant/message 会出现吗: 不会。失败输出只有 chunk 事件,不组装出 assistant/message。重试时看不到那 3 个 delta。

  • 把历史发给另一家 provider 适配器,上一成功消息的 replayState 去哪了: 历史 provider 与目标 provider 不归同一个适配器实例时,replayState 被剥离,对方只拿到 provider 无关内容。

仍会失效的地方

  • 本页结论对应 revision 0a53fb55bea101816fa226bb964ae2bed71c343b。文件位置、命名和默认行为可能随版本变化,引用实现细节时应同时记录 commit。

来源与核验

  1. [repo] DeepSeek Harness 官方源码(固定 revision)
  2. [official] DeepSeek Harness 官方介绍

Revision:0a53fb55bea101816fa226bb964ae2bed71c343b · 核验日期:2026-08-31