Files
rag/docs/数据归属与协作方案.md
lacerate551 100d1a06eb init: RAG 知识库服务初始提交
- 后端 API(Flask + Gunicorn)
- RAG 引擎(混合检索 + 云端 Reranker + 引用溯源)
- 文档解析(MinerU + 多格式支持)
- Docker 生产部署配置
- 排除前端项目、敏感配置、模型文件
2026-06-04 17:35:27 +08:00

180 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RAG 系统数据归属与前后端协作方案
> **文档类型**: 架构设计
> **创建日期**: 2026-04-13
> **状态**: 已确认
> **目标**: 梳理数据存储归属、明确前后端组与 RAG 组的职责边界
---
## 一、数据存储清单
### 1.1 当前系统中的所有数据库
| 数据库文件 | 存储内容 | 表数量 |
|-----------|----------|--------|
| `data/sessions.db` | 会话管理 | 2 表 |
| `data/exam_local.db` | 出题批卷 | 5 表 |
| `data/feedback.db` | 问答质量闭环 | 4 表 |
| `data/outline_cache.db` | 纲要缓存 | 3 表 |
| `data/sync_data.db` | 同步服务 | 5 表 |
| `data/exam_analysis.db` | 题库分析 | 7 表 |
| `knowledge/vector_store/chroma/` | 向量数据库 | 9 集合 |
### 1.2 涉及用户信息的数据
| 数据库 | 表 | 用户字段 | 敏感程度 |
|--------|-----|----------|----------|
| sessions.db | sessions | user_id | 低仅ID |
| sessions.db | messages | 通过session关联 | 低 |
| feedback.db | feedbacks | user_id | 低 |
| sync_data.db | subscriptions | user_id | 低 |
| sync_data.db | notifications | user_id | 低 |
| exam_local.db | student_answers | student_id | 低 |
| exam_local.db | grade_reports | student_id | 低 |
---
## 二、数据归属划分
### 2.1 前后端组管理的数据
| 数据类型 | 说明 |
|----------|------|
| 用户账户信息 | 账号、密码、个人信息 |
| 用户认证 Token | Token 生成与验证 |
| 权限角色定义 | 角色与权限的映射关系 |
| 组织架构 | 部门、岗位信息 |
| 业务主数据 | 学生学籍、课程安排等 |
**存储**:前后端组的用户数据库/认证系统
**传递方式**:通过网关注入 HTTP Header
### 2.2 RAG 组管理的数据
| 数据类型 | 说明 |
|----------|------|
| 向量数据库 | 所有知识库向量 |
| 文档内容 | PDF/Word/Excel 原始文件 |
| 题目与试卷数据 | 出题相关 |
| 批阅报告 | 考试批卷结果 |
| 知识点与关联关系 | 题库分析 |
| 文档变更追踪 | 同步服务 |
| 会话历史 | 对话记录 ✅ |
| 纲要与缓存 | 文档结构化数据 |
**存储**:本地 SQLite + ChromaDB
---
## 三、核心原则
| 原则 | 说明 |
|------|------|
| **用户认证归前后端** | 登录、密码、Token 生成由前后端组负责 |
| **业务数据归 RAG** | 与知识库、出题、批卷相关的数据由 RAG 组管理 |
| **用户 ID 作为关联键** | 使用 user_id 关联两边数据,不存储完整用户信息 |
| **网关传递用户信息** | 通过 HTTP Header 注入RAG 系统不实现登录 |
---
## 四、数据流向图
### 4.1 用户信息流向
```
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 用户登录 │────▶│ 前后端认证 │────▶│ 网关注入 │
│ │ │ 系统 │ │ Header │
└─────────────┘ └─────────────┘ └──────┬──────┘
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ 用户数据库 │ │ RAG 系统 │
│ (前后端组) │ │ 接收用户信息 │
│ │ │ │
│ • 账号密码 │ │ • X-User-ID │
│ • 个人信息 │ │ • X-User-Role│
│ • 角色权限 │ │ • X-User-Dept│
└─────────────┘ └──────┬──────┘
┌─────────────┐
│ RAG 数据库 │
│ │
│ 存储 user_id │
│ 不存用户详情 │
└─────────────┘
```
---
## 五、接口协作
### 5.1 前后端组调用 RAG 系统的接口
| 场景 | API | Header 需要 |
|------|-----|-------------|
| 用户聊天 | `POST /chat``/rag` | X-User-ID, X-User-Role |
| 获取历史 | `GET /sessions`, `GET /history/<id>` | X-User-ID |
| 上传文档 | `POST /documents/upload` | X-User-ID, X-User-Role, X-User-Department |
| 出题 | `POST /exam/generate` | X-User-ID, X-User-Role |
| 批卷 | `POST /exam/grade` | X-User-ID, X-User-Role |
### 5.2 RAG 系统调用前后端组的接口
**需要前后端组提供**
```
GET /api/users/{user_id}
响应:
{
"user_id": "xxx",
"username": "用户名",
"name": "真实姓名",
"role": "admin/manager/user",
"department": "部门名称"
}
```
---
## 六、确认结果
### 用户选择
| 问题 | 用户选择 | 说明 |
|------|---------|------|
| 会话历史归属 | **RAG组管理** | 会话历史由 RAG 系统存储,前后端组通过 API 查询 |
| 学生姓名处理 | **存ID调接口** | 只存储 student_id需要时调用前后端接口获取姓名 |
| 需要的前后端接口 | **获取用户信息接口** | 需要前后端组提供根据 user_id 获取用户信息的 API |
### RAG 系统需要修改的地方
| 修改项 | 文件 | 说明 |
|--------|------|------|
| 学生答卷存储 | `exam_pkg/manager.py` | 改为只存储 student_id不存 student_name |
| 批阅报告生成 | `exam_pkg/manager.py` | 生成报告时调用前后端接口获取姓名 |
| 用户信息获取 | `services/user_info.py`(新建) | 封装调用前后端接口的逻辑 |
---
## 七、最终方案
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 前后端组 │ RAG 组 │
├─────────────────────────────────────────┼─────────────────────────────────┤
│ ✓ 用户账户与认证 │ ✓ 知识库与向量存储 │
│ ✓ 权限角色管理 │ ✓ 会话历史存储 │
│ ✓ 组织架构数据 │ ✓ 题目试卷管理 │
│ ✓ 业务主数据(学生/课程等) │ ✓ 批阅报告(仅存 student_id
│ ✓ 网关配置 │ ✓ 反馈与质量分析 │
│ ✓ 提供用户信息查询 API │ ✓ 文档变更追踪 │
├─────────────────────────────────────────┴─────────────────────────────────┤
│ 数据关联:通过 user_id / student_id │
│ RAG 系统调用前后端 API 获取用户详情 │
└─────────────────────────────────────────────────────────────────────────┘
```