Stream chat completions from model providers
This commit is contained in:
@@ -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 继续处理。
|
||||
|
||||
Reference in New Issue
Block a user