Files
rag/docs/数据归属与协作方案.md
lacerate551 cb75b9b274 fix(boundary): 修复多库边界问题、版本管理及删除清理
多库检索与存储修复:
- RRF 融合去重改用 (collection, chunk_id) 复合键,修复同名文件结果被吞
- DocStore 存储路径加 collection 前缀,修复跨库同名切片数据覆盖
- search_multiple 去重改用复合键
- chunk_id 解析改用 rsplit 兼容下划线文件名

上传与版本管理修复:
- 同名文件上传改为覆盖模式,自动清理旧切片
- 修复首次上传不创建版本记录
- 修复覆盖上传版本号回退到 v1
- sync ADDED 分支改用动态版本号生成
- _generate_version_id 改为基于全部版本递增
- 废止/恢复操作同步 SQLite 版本记录
- mark_document_as_superseded 改为仅更新 SQLite

删除清理修复:
- 删除文档时同步清理 SQLite 版本记录和变更日志
- 删除向量库时同步清理该库所有版本记录
- cleanup 改为清理 SQLite 记录而非 ChromaDB

测试:
- test_version_management.py: 27 条版本管理单元测试
- test_edge_cases.py: 28 条边界用例测试
- test_upload_dedup.py: 5 条上传去重测试
- e2e_risk_test.py: 27 条端到端风险测试

文档:
- 新增风险边界问题修复注意事项.md(面向后端的对接文档)
- 新增向量库边界风险分析.md
- 更新多篇现有文档
2026-06-04 23:58:44 +08:00

8.3 KiB
Raw Permalink Blame History

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.dbsync_data.dbexam_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

存储:本地 SQLitedata/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/<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                 │  ✓ 知识库元数据knowledge.db   │
├─────────────────────────────────────────┴─────────────────────────────────┤
│  数据关联:通过 user_id / student_id                                      │
│  RAG 系统调用前后端 API 获取用户详情                                       │
│  数据库按环境分离data/prod/knowledge.db, feedback.dbdata/dev/session.db, exam.db│
└─────────────────────────────────────────────────────────────────────────┘