API 稳定性

流式返回能提高可见性,但不能消除超时

流可以证明生成仍在推进,但客户端、代理和供应商仍各自保留时限。没有收到协议要求的终止事件,就不能把这次请求记为完成。

直接结论

协议支持时设置 stream=true,持续读取事件,并要求供应商的成功终止事件。连接、流式空闲和总执行时限要分开设置;重试次数必须有上限,每次尝试都单独记录。

先确认到底是哪一种超时

连接超时发生在可用响应建立之前;流式空闲超时发生在响应已经开始、但长时间没有新字节时;总时限即使持续收到分片也会终止请求。只调高其中一个值,无法修复另外两个。

  • 记录请求开始、响应头到达、首个事件到达和最后事件到达的时间。
  • 同时保存端点、协议、模型、档位、状态码和尝试序号。
  • 不要把所有传输失败都压成“网络错误”,不同阶段对应的处理方法不同。

收到部分文本,不等于请求已经完成

OpenAI Responses 成功完成时会发送 response.completed;Anthropic Messages 的正常 SSE 序列以 message_stop 结束。在这些事件之前收到的文本增量可用于展示和诊断,但不能证明请求完整结束。

连接提前关闭时,可以保留部分文本排查问题,但评测尝试必须记为失败。把截断答案当成完整答案评分,会在不知情的情况下奖励传输故障。

流式事件无法突破代理的绝对时限

持续事件可以避免空闲连接被误判为断开,却不能延长客户端、反向代理、边缘平台或供应商设置的绝对请求上限。如果多次请求总在接近相同的总时长结束,应逐层检查链路,而不是只改模型超时。

重试传输失败,但不要制造无限运行

每次重试都是新的模型请求,可能生成不同答案,也可能产生新的费用,即使第一次响应没有完整到达客户端。应限制重试次数,限流时使用退避,并把每次尝试分开保存。

评测必须在运行前固定答案选择与重试策略,不能只对低分答案持续重试,否则不同模型不再使用同一比较标准。

协议依据
OpenAI Responses API 流式事件Anthropic Messages 流式事件