Stream chat completions from model providers

This commit is contained in:
2026-07-08 17:13:53 +08:00
parent d476c54580
commit 465a481e7a
4 changed files with 451 additions and 10 deletions

View File

@@ -171,3 +171,29 @@
3. 非流式协议保留降级路径,保证模型配置多样性不被破坏。
4. 本阶段仍使用同步 `httpx` 的流式能力;真正 async 化放到阶段 3。
5. 本阶段不引入 Redis全局多 worker 协调继续放到阶段 4。
已完成:
1. 新增 `ModelStreamService`,负责模型流式协议适配。
2. 新增 `ChatStreamService`,负责流式问答过程中的用户消息保存、模型 chunk 输出、助手消息落库和 AI 请求日志记录。
3. `/chat/completions` 已从“完整回答后切片输出”改为“边接收模型 chunk 边发送 SSE `content` 事件”。
4. OpenAI 兼容协议支持 `stream=true` 并解析 `choices[].delta.content`
5. Anthropic Messages 协议支持 `stream=true` 并解析 `content_block_delta` 文本事件。
6. DeepSeek 等兼容协议返回的 `reasoning_content` 会被转换成 `<think>...</think>`,保持当前 H5 思考态显示逻辑可用。
7. MiniMax、Gemini 或关闭流式的模型配置会自动降级为非流式调用,再通过统一 SSE 事件输出。
8. 如果当前后端已具备历史对话/摘要能力,流式服务会自动传入历史上下文;旧版本签名不支持时自动回退。
验证记录:
1. 容器内 `compileall` 检查通过。
2. OpenAI 兼容协议模拟流式事件解析通过,输出格式为 `<think>思考</think>答案`
3. Anthropic Messages 协议模拟流式事件解析通过,输出格式为 `<think>想</think>答`
4. 后端健康检查通过。
5. 真实 `/chat/completions` 验证通过:接口先返回 `generating`,随后连续返回上游模型 chunk最后返回 `[DONE]`
6. 真实会话历史验证通过:流式完成后用户消息和助手消息均已落库。
阶段限制:
1. 本阶段仍是同步 `httpx.stream`,一个请求生成期间仍会占用当前 worker 执行资源。
2. 用户端能更快看到模型输出,但飞书检索阶段仍在首字之前完成;首字时间还会受飞书读取耗时影响。
3. 多 worker 全局排队、共享飞书缓存、异步飞书读取仍需在阶段 3 和阶段 4 继续处理。