Add V2 RAG answer skeleton

This commit is contained in:
2026-07-06 17:55:22 +08:00
parent 96742de07b
commit 207340973c
11 changed files with 393 additions and 11 deletions

View File

@@ -0,0 +1,60 @@
# 阶段二记录RAG 问答链路骨架
日期2026-07-06
## 本次目标
把用户端 `/chat/completions` 从单一 mock 回复升级为可替换的问答服务链路。当前仍不接真实飞书和真实大模型但先把权限过滤、检索、Prompt、模型调用和 AI 请求日志的职责拆出来。
## 已完成
- 新增知识库权限服务 `KnowledgeAccessService`
- 优先读取用户已授权、未禁用、未过期的知识库。
- 开发阶段如果没有配置知识库授权,允许通过 `MOCK_RAG_ENABLED=true` 使用默认 mock 知识库,方便本地演示。
- 新增 RAG 服务 `RagService`
- 负责构建用户可访问知识库范围。
- 负责调用 mock 飞书知识库检索。
- 负责组装 Prompt。
- 新增模型服务 `ModelClientService`
- 优先读取当前启用模型配置。
- 当前返回 mock 模型答案,后续替换为真实大模型流式调用。
- 新增 AI 请求日志服务 `AiRequestLogService`
- 每次问答记录 session、message、user、model、prompt、knowledge_ids、命中数、token 估算、耗时和状态。
- 更新聊天服务:
- `/chat/completions` 已接入 RAG 骨架。
- 提问前校验用户每日额度。
- 提问成功后增加 `daily_chat_used`
- 保存用户消息、助手消息和 AI 请求日志。
## 当前 mock 规则
- 问题命中 mock 文档关键词时,返回基于知识片段整理的 Markdown 文本。
- 问题没有命中任何知识片段时,固定返回:
```text
当前知识库中未检索到相关内容,请联系管理员补充相关知识。
```
## 当前边界
- 真实飞书知识库 API 尚未接入。
- 真实大模型 API 尚未接入。
- 每日额度目前使用 `sys_user.daily_chat_used` 简单计数,尚未做按自然日自动重置。
- 停止生成接口仍是占位能力,后续接真实流式模型时再实现中断状态。
## 后续建议
1. 补前端 Markdown 渲染,让 mock RAG 的结构化回答在手机端可读。
2. 做飞书知识库接口技术验证脚本,确认 SpaceID、NodeID、权限和返回结构。
3. 接入后台 Prompt 和模型配置管理页面。
4. 把每日额度改为按日期维度统计,避免长期累加。
## 验证记录
- `python -m compileall app` 已通过。
- FastAPI OpenAPI 导入检查已通过,当前仍为 13 个接口路径。
- Alembic MySQL 静态迁移 SQL 生成已通过。
- RAG/模型服务级验证已通过:
- 命中问题可以返回带来源的 mock 回答。
- 无命中问题会返回固定兜底文案。
- SQLite 内存库不适合完整模拟当前 MySQL `BIGINT AUTO_INCREMENT` 主键行为,因此本次未使用 SQLite 做完整聊天端到端写库测试。

View File

@@ -28,3 +28,4 @@
| `2026-07-06-phase2-backend-foundation.md` | 阶段二后端基础工程第一批记录。 |
| `2026-07-06-phase2-user-client.md` | 阶段二用户端 Vue 3 H5 第一批记录。 |
| `2026-07-06-phase2-dev-compose.md` | 阶段二本地开发编排记录。 |
| `2026-07-06-phase2-rag-skeleton.md` | 阶段二 RAG 问答链路骨架记录。 |