Implement chat queue fallback

This commit is contained in:
2026-07-08 16:57:40 +08:00
parent 10b6de0622
commit 6f3bbd3803
10 changed files with 367 additions and 31 deletions

View File

@@ -124,3 +124,38 @@
2. 当前模型和飞书外部 API 仍可能限流,排队只能保护本系统,不能突破外部限额。
3. 排队请求持有 SSE 连接,网关和浏览器超时时间要一起配置。
4. 真实流式前,用户端虽然能看到排队状态,但进入生成后仍要等完整模型结果才能输出内容。
## 阶段 1 实施记录
2026-07-08 开始实现第一阶段“并发准入与排队兜底”。
已完成:
1. 后端新增进程内问答队列管理器,支持最大生成并发、最大等待队列和排队超时。
2. `/chat/completions` 改为立即返回 SSE 流,并通过 SSE 事件通知用户端:
- `queued`:请求进入排队。
- `generating`:请求获得执行名额。
- `content`:回答内容片段。
- `error`:队列满、排队超时或生成失败。
3. 系统设置新增三个配置项:
- `chat_max_active_requests`
- `chat_max_queue_size`
- `chat_queue_timeout_seconds`
4. 用户端 H5 支持排队状态展示,排队时在 AI 气泡中显示等待提示,进入生成后切换到正常回答。
5. 队列满时返回“当前请求过多,请稍后再试”,避免请求无限堆积。
阶段限制:
1. 当前队列是单进程内存队列,适合当前开发环境和单 worker 兜底。
2. 多 worker / 多实例部署前,必须升级为 Redis 全局队列,否则每个 worker 只会管理自己的排队状态。
3. 当前仍不是真模型流式,进入生成后首字时间仍取决于飞书检索和模型完整返回时间。
验证记录:
1. 后端 `compileall` 检查通过。
2. 用户端 H5 `npm run build` 通过。
3. 管理后台 `npm run build` 通过;仅存在第三方依赖 Rollup 注释告警,不影响构建。
4. `git diff --check` 通过。
5. Docker dev 环境已重新构建并启动backend、user-client、admin-web、mysql 均正常运行。
6. 队列管理器验证通过:`max_active_requests=1``max_queue_size=1` 时,第一个请求获得执行名额,第二个请求进入排队,第三个请求被拒绝,释放名额后第二个请求恢复执行。
7. 真实 `/chat/completions` SSE 验证通过:接口先返回 `generating` 事件,随后返回连续 `content` 事件。