06 · 客户端工程:调用侧要处理哪些失败
结论:错误分四类只重试「再试可能不同」的;四层超时;幂等问题在工具上;限流按 RPM / TPM 与层级;发前数 token;熔断 + 分层 fallback。
%%{init: {"flowchart": {"wrappingWidth": 180}}}%%
flowchart LR
S(["业务层发起调用"]) --> CNT["数 token<br/>超过上下文或预算 → 先压缩 / 拒绝,不发"]
CNT --> SLOT["取并发槽 / 令牌<br/>按模型 · 按租户的限流器"]
SLOT --> SEND["发送(流式或非流式)<br/>四层超时:连接 · 首事件 · 事件间 · 总"]
SEND --> OK{"成功?"}
OK -->|"是"| PARSE["解析:拼接增量 · 工具参数等 done · 读 usage · 读 stop_reason"]
PARSE --> DONE(["返回业务层 + 记 trace"])
OK -->|"否"| CLS{"错误分类"}
CLS -->|"可重试:429 / 5xx / 529 / 超时 / 连接断"| BACK["退避(指数 + 抖动,遵守 Retry-After)<br/>重试预算未耗尽?"]
BACK -->|"是"| SLOT
BACK -->|"否"| FB
CLS -->|"不可重试:400 · 401 · 配额不足 · 内容过滤"| FB{"有 fallback?"}
FB -->|"换模型 / 换供应商 / 降级"| SLOT
FB -->|"无"| FAIL(["失败返回业务层 + 记 trace"])
classDef step fill:#fff7e0,stroke:#c98a00,stroke-width:2px,color:#222
classDef dec fill:#eef6ff,stroke:#5b8fd6,color:#222
classDef stop fill:#f0f0f0,stroke:#888,color:#222
class CNT,SLOT,SEND,PARSE,BACK step
class OK,CLS,FB dec
class S,DONE,FAIL stop
COMMENTS
评论存放在 GitHub Discussions, 用 GitHub 账号登录即可发表,支持 Markdown。 想针对正文某句话说?选中那段文字,点浮出的「评论」即可划线评论;觉得哪里写错了,发表时勾上「同时提交 Issue」。 有人回复你时 GitHub 会按你的通知设置发邮件,不用守在这里。