流式回答中途断开,怎样区分正常结束、网络失败与服务截断?
流式回答中途断开时,应检查最后业务事件和完成原因,而不是把网络连接关闭等同于正常完成。SSE分片边界不保证对应完整事件,服务还可能在已返回成功状态后发送错误。
先从这里排查
流式回答中途断开时,应检查最后业务事件和完成原因,而不是把网络连接关闭等同于正常完成。SSE分片边界不保证对应完整事件,服务还可能在已返回成功状态后发送错误。按协议解析并保存终止状态,区分正常结束、用户取消和异常中断,部分内容不能自动当作完整答案发布。
保留最后事件与业务终止状态
适用于界面停在半句话、没有明显报错,或工具参数只收到一半的流式请求。保存安全事件类型、时间与请求标识,确认服务器是否发出完成标记。HTTP连接已经建立只说明传输开始,代理关闭、超时和业务长度截断都可能出现在之后,需要分别观察而不是只检查初始状态码。
区分传输结束和协议完成标记
核对客户端是否按SSE事件格式缓冲数据,而非每个网络分片都当成一条消息。检查错误事件、正常终止及输出停止原因,观察代理和心跳行为。未知事件应按服务建议兼容处理,不能随意丢掉业务错误;自动重连也不保证模型生成能够从原位置无重复续接。
按事件类型组装并处理错误和取消
把事件解析、内容累积与完成状态分开管理,只有协议确认结束且结果可用时标为完成。中断时保留部分内容和错误说明,提供符合服务能力的重试或恢复方式。工具调用需等参数完整并验证后才执行,不能流到一半就触发写入;取消后也要停止本地继续处理和排队重试。
用正常结束中断与截断分别验收
使用受控样本分别测试完整结束、途中断连及服务截断,检查界面和后台状态一致。确认半句不会变成完整答案,错误事件不被忽略,恢复不会重复外部动作。成功标准是每种终止都有真实可解释状态;只收到一些文字或连接不再活动,都不足以宣称任务已经完成。
本文没有中断真实模型调用或执行付费测试,不假设所有服务都用相同完成事件名称。SSE标准描述传输事件,业务终止仍由服务协议定义。部分响应可能有价值但应明确标记;如果服务不支持恢复,不应虚构续传能力或悄悄把新的随机回答拼到原来的半段后面。
核对来源
以下资料用于核对概念和方法。文中的示例与测试范围分别注明,实际使用时请核对所用工具的版本。