# RAG 系统数据归属与前后端协作方案 > **文档类型**: 架构设计 > **创建日期**: 2026-04-13 > **状态**: 已确认(数据清单更新于 2026-06) > **目标**: 梳理数据存储归属、明确前后端组与 RAG 组的职责边界 --- ## 一、数据存储清单 ### 1.1 当前系统中的所有数据库(4 个 SQLite 文件,按环境子目录分离) | 数据库文件 | 环境 | 存储内容 | |-----------|------|---------| | `data/prod/knowledge.db` | 生产 | 知识库管理(向量元数据、文档索引等) | | `data/prod/feedback.db` | 生产 | 问答质量闭环 | | `data/dev/session.db` | 开发 | 会话管理 | | `data/dev/exam.db` | 开发 | 出题批卷 | > **注**:向量数据存储在 `knowledge/vector_store/chroma/` 目录(ChromaDB),不计入 SQLite 文件。 > `outline_cache.db`、`sync_data.db`、`exam_analysis.db` 已合并或移除。 ### 1.2 涉及用户信息的数据 | 数据库 | 表 | 用户字段 | 敏感程度 | |--------|-----|----------|----------| | `data/dev/session.db` | sessions | user_id | 低(仅ID) | | `data/dev/session.db` | messages | 通过session关联 | 低 | | `data/prod/feedback.db` | feedbacks | user_id | 低 | | `data/dev/exam.db` | student_answers | student_id | 低 | | `data/dev/exam.db` | grade_reports | student_id | 低 | --- ## 二、数据归属划分 ### 2.1 前后端组管理的数据 | 数据类型 | 说明 | |----------|------| | 用户账户信息 | 账号、密码、个人信息 | | 用户认证 Token | Token 生成与验证 | | 权限角色定义 | 角色与权限的映射关系 | | 组织架构 | 部门、岗位信息 | | 业务主数据 | 学生学籍、课程安排等 | **存储**:前后端组的用户数据库/认证系统 **传递方式**:通过网关注入 HTTP Header ### 2.2 RAG 组管理的数据 | 数据类型 | 说明 | |----------|------| | 向量数据库 | 所有知识库向量(ChromaDB) | | 文档内容 | PDF/Word/Excel 原始文件 | | 知识库元数据 | 文档索引、向量关联(`knowledge.db`) | | 题目与试卷数据 | 出题相关(`exam.db`) | | 批阅报告 | 考试批卷结果(`exam.db`) | | 会话历史 | 对话记录(`session.db`) | | 问答反馈 | 质量闭环数据(`feedback.db`) | **存储**:本地 SQLite(按 `data/prod/`、`data/dev/` 环境分离) + ChromaDB --- ## 三、核心原则 | 原则 | 说明 | |------|------| | **用户认证归前后端** | 登录、密码、Token 生成由前后端组负责 | | **业务数据归 RAG** | 与知识库、出题、批卷相关的数据由 RAG 组管理 | | **用户 ID 作为关联键** | 使用 user_id 关联两边数据,不存储完整用户信息 | | **网关传递用户信息** | 通过 HTTP Header 注入,RAG 系统不实现登录 | --- ## 四、数据流向图 ### 4.1 用户信息流向 ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 用户登录 │────▶│ 前后端认证 │────▶│ 网关注入 │ │ │ │ 系统 │ │ Header │ └─────────────┘ └─────────────┘ └──────┬──────┘ │ │ ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ 用户数据库 │ │ RAG 系统 │ │ (前后端组) │ │ 接收用户信息 │ │ │ │ │ │ • 账号密码 │ │ • X-User-ID │ │ • 个人信息 │ │ • X-User-Role│ │ • 角色权限 │ │ • X-User-Dept│ └─────────────┘ └──────┬──────┘ │ ▼ ┌─────────────┐ │ RAG 数据库 │ │ │ │ • knowledge.db│ │ • feedback.db │ │ • session.db │ │ • exam.db │ │ 存储 user_id │ │ 不存用户详情 │ └─────────────┘ ``` --- ## 五、接口协作 ### 5.1 前后端组调用 RAG 系统的接口 | 场景 | API | Header 需要 | |------|-----|-------------| | 用户聊天 | `POST /chat` 或 `/rag` | X-User-ID, X-User-Role | | 获取历史 | `GET /sessions`, `GET /history/` | 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 │ ✓ 知识库元数据(knowledge.db) │ ├─────────────────────────────────────────┴─────────────────────────────────┤ │ 数据关联:通过 user_id / student_id │ │ RAG 系统调用前后端 API 获取用户详情 │ │ 数据库按环境分离:data/prod/(knowledge.db, feedback.db)data/dev/(session.db, exam.db)│ └─────────────────────────────────────────────────────────────────────────┘ ```