DeepSeek请求设置stream: true后,返回的是持续到达的SSE事件。界面需要把文本增量按顺序追加,不能沿用非流式响应一次读取完整消息的处理方式。刚出现几个字,也不代表本次请求已经成功结束。
先解析事件,再拼接文本
使用SDK时遍历返回的流,从每个片段的choices[0].delta.content读取新增文本,空值跳过。可以将片段放进列表,结束后统一拼接;界面预览则随到随追加,避免每次覆盖掉前面的内容。
直接使用HTTP时,需要按SSE事件边界解析。网络一次读取可能只包含半个JSON,也可能包含多个事件,不能对每次网络读取结果直接做JSON解析。可在DeepSeek接口教程中继续查看相关参数。
把结束状态和文本分开保存
流以data: [DONE]结束,生成停止原因还要查看finish_reason。保存答案时建议同时记录是否完整结束;连接异常断开后,已收到的文本只能作为部分结果,不能默认完整。
末尾片段可能没有新文本,却携带本次请求的用量统计。应检查其usage,不要在文本为空时立刻退出循环,也不要强行套用其他服务的末尾片段结构。
中断后的重试不要直接续写原缓冲区
重新发起请求时建立新的文本缓冲和请求标识,否则新答案可能接在旧的半截答案后面。若要保留旧内容,应明确显示为中断记录。统一接入多个AI接口时,建议把正在生成、已完成和已中断设为独立状态,避免用户把半份结果当成完整答案复制使用。
原创文章,作者:eastbtc,如若转载,请注明出处:https://www.eastbtc.com/ai/deepseek/29314.html