Add async Feishu retrieval for chat RAG

This commit is contained in:
2026-07-08 17:26:10 +08:00
parent 7a6068590e
commit 812ae80536
4 changed files with 470 additions and 1 deletions

View File

@@ -303,3 +303,38 @@
2. 不改变搜索 payload、结果解析、知识片段打分规则。
3. 不改变用户端 SSE 协议。
4. 本阶段仍不引入 Redis全局缓存和全局队列放到阶段 4。
## 阶段 3B 实施记录
2026-07-08 完成异步飞书读取和异步 RAG 构建第一版。
已完成:
1. 新增 `AsyncFeishuKnowledgeService`
- 飞书搜索接口改为异步 HTTP。
- 飞书 tenant token 获取改为异步 HTTP。
- Wiki node info、children、Docx blocks、Drive file download 改为异步 HTTP。
- 复用同步服务已有的缓存、搜索 payload、搜索结果解析和打分逻辑。
2. 新增 `AsyncRagService`
- 权限范围和 Prompt 读取仍使用当前同步 DB session。
- 飞书外部读取切到 `AsyncFeishuKnowledgeService`
- 兼容当前历史对话/摘要 prompt 签名,旧签名自动回退。
3. `ChatStreamService.stream_answer_async` 已切到 `AsyncRagService.build_result`
4. 同步 `ChatStreamService.stream_answer` 保留不变,继续作为回退路径。
5. 飞书直读多知识库时增加并发上限,当前限制为最多 3 个知识库同时读取,降低触发飞书频控的概率。
6. 飞书部分知识库读取失败但已有可用片段时,降级使用可用片段继续回答;所有知识库均失败时才返回错误。
验证记录:
1. 本机 `compileall` 检查通过。
2. 容器内 `compileall` 检查通过。
3. 后端健康检查通过。
4. 第一次真实问答验证触发飞书 `frequency limit`,据此补充了飞书直读并发上限和部分失败降级策略。
5. 第二次真实 `/chat/completions` 验证通过:首个事件为 `generating`,随后返回 `content`,最后返回 `[DONE]`
6. 真实会话历史验证通过:流式完成后用户消息和助手消息均已落库。
阶段限制:
1. DB session 仍是同步的权限范围、Prompt 读取、消息落库还没有切到 async DB。
2. 当前缓存仍是进程内缓存,多 worker 下不会共享缓存。
3. 飞书直读并发上限是代码内默认值,后续可在系统配置中开放。