多库检索与存储修复: - 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 - 更新多篇现有文档
353 lines
12 KiB
Markdown
353 lines
12 KiB
Markdown
# RAG系统构建 - 需求负责清单
|
||
|
||
> 基于功能需求规格文档,梳理RAG系统构建部分的功能点
|
||
|
||
## 核心RAG功能(直接负责)
|
||
|
||
### GKPT-AI-010: RAG向量数据库 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 采用检索增强生成技术,结合向量数据库和大语言模型,实现高准确率的制度问答 |
|
||
| **使用频率** | 高 |
|
||
| **限制条件** | 向量数据库需支持十万级向量,具备合规性和数据安全要求 |
|
||
| **输入** | 用户问题 |
|
||
| **输出** | 检索结果、生成答案 |
|
||
| **处理流程** | 用户提问 → 混合检索(关键词+语义+结构化)→ 获取相关文本块 → 组装上下文 → 调用大模型生成答案 → 返回 |
|
||
| **技术要点** | 混合检索确保准确性和全面性 |
|
||
|
||
### GKPT-AI-011: 多轮智能对话 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 支持与用户进行多轮对话,理解上下文,处理复杂问题,避免"幻觉"回答 |
|
||
| **使用频率** | 高 |
|
||
| **限制条件** | 上下文长度依据大模型限制(最近10轮);复杂问题拆解依赖模型能力 |
|
||
| **输入** | 用户连续提问 |
|
||
| **输出** | 基于上下文的回答 |
|
||
| **处理流程** | 用户提问 → 系统获取当前会话历史 → 结合上下文检索 → 生成答案 → 保存会话记录 |
|
||
|
||
### GKPT-AI-012: 答案溯源 [中优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 每个回答标注引用来源,并提供置信度评分,确保答案的可信度和可核实性 |
|
||
| **限制条件** | 跳转原文需阅读器支持锚点定位;置信度评分基于检索相似度与模型置信度综合 |
|
||
| **输出** | 带来源标注的答案、置信度、跳转链接 |
|
||
| **处理流程** | 生成答案时 → 记录检索到的文本块及其元数据 → 构建来源列表 → 计算置信度 → 返回给前端展示 |
|
||
| **备注** | 低置信度答案(≤0.6)需人工复核 |
|
||
|
||
### GKPT-AI-013: 问答质量闭环 [低优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 通过用户反馈和定期分析,持续优化问答质量,沉淀FAQ |
|
||
| **输入** | 用户点赞/踩反馈、问答记录 |
|
||
| **输出** | 质量分析报告、FAQ列表 |
|
||
| **处理流程** | 用户反馈 → 记录反馈 → 定期统计 → 生成报告 → 管理员优化检索/提示词/知识库 → 沉淀FAQ |
|
||
| **备注** | 报告周期可配置(周/月) |
|
||
|
||
---
|
||
|
||
## 知识库相关(部分负责)
|
||
|
||
### GKPT-KB-008: 知识库自动同步 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 制度文件变更后,自动触发知识库(向量库)更新,并向相关用户推送更新提醒 |
|
||
| **限制条件** | 需要维护文件哈希或版本号以识别变更;对于大文件,增量更新依赖文本差异算法 |
|
||
| **输入** | 制度变更内容(新增/修改/废止) |
|
||
| **输出** | 向量库更新状态、更新提醒通知 |
|
||
| **处理流程** | 制度变更 → 系统检测变更 → 执行增量向量化 → 替换旧向量 → 记录日志 → 推送提醒 |
|
||
| **性能要求** | 增量更新耗时≤10分钟 |
|
||
|
||
### GKPT-EXAM-009: 题库智能维护 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 监控制度变更,自动识别受影响题目,并辅助生成新题,确保考试内容时效性 |
|
||
| **限制条件** | 题目与制度关联需通过标签或版本号建立;AI生成题目需人工审核 |
|
||
| **输入** | 制度变更内容、旧题目库 |
|
||
| **输出** | 受影响题目列表、AI新题建议、试卷模板更新 |
|
||
| **处理流程** | 制度变更 → 扫描关联题目 → 标记受影响题目 → AI生成新题目 → 管理员审核 → 更新试卷模板 |
|
||
| **性能要求** | AI生成题目≤30秒/题 |
|
||
|
||
---
|
||
|
||
## 阅读辅助功能(可能涉及)
|
||
|
||
### GKPT-READ-001: 智能PDF阅读器 [高优先级]
|
||
|
||
| RAG相关 | 全文检索可能依赖RAG索引 |
|
||
|---------|------------------------|
|
||
| 需确认 | 是否需要RAG系统提供全文检索接口 |
|
||
|
||
### GKPT-READ-005: 关联推荐 [中优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 基于当前阅读的制度内容,智能推荐相关的其他制度、知识库文章 |
|
||
| **限制条件** | 推荐仅基于已有标签和全文检索,不涉及复杂用户行为分析 |
|
||
| **输入** | 当前制度文件ID、用户阅读行为 |
|
||
| **输出** | 推荐制度列表(标题、摘要、相关性标签) |
|
||
| **处理流程** | 用户打开制度 → 系统提取制度关键词/标签 → 检索知识库相似文件 → 返回推荐列表 |
|
||
| **RAG相关** | 可能用到向量相似度检索 |
|
||
|
||
---
|
||
|
||
## 生成类功能(可能涉及)
|
||
|
||
### GKPT-EXAM-015: AI智能出题 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 利用AI从制度文本中自动提取关键信息,生成多种题型的题目 |
|
||
| **输入** | 制度文本、题型、数量、难度 |
|
||
| **输出** | 题目列表(含题干、选项、答案、解析) |
|
||
| **RAG相关** | 需要从制度文本检索关键信息,可能需要RAG支持 |
|
||
| **性能要求** | 支持批量生成(一次最多10题) |
|
||
|
||
### GKPT-EXAM-018: AI自动阅卷 [中优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | 客观题自动判分,主观题基于语义相似度智能评分,并提供评语 |
|
||
| **输入** | 考生答卷、标准答案 |
|
||
| **输出** | 成绩、各题得分、评语 |
|
||
| **RAG相关** | 主观题语义评分可能用到向量相似度 |
|
||
| **备注** | 填空支持同义词匹配(如"三日"="3天") |
|
||
|
||
### GKPT-MIND-020: 自动化纲要生成 [高优先级]
|
||
|
||
| 属性 | 内容 |
|
||
|-----|------|
|
||
| **功能描述** | AI自动提取制度文件的章节结构、核心要点,生成可交互的思维导图 |
|
||
| **限制条件** | 依赖制度文件有明确的结构化标题 |
|
||
| **输入** | 制度文件内容 |
|
||
| **输出** | 思维导图结构化数据(节点树) |
|
||
| **RAG相关** | AI解析制度文件结构,可能需要RAG辅助 |
|
||
| **性能要求** | 生成时间≤10秒(10页以内) |
|
||
|
||
---
|
||
|
||
## 核心交付物总结
|
||
|
||
### 1. 向量数据库建设
|
||
- [ ] 支持**十万级向量**存储
|
||
- [ ] 混合检索能力:关键词 + 语义 + 结构化
|
||
- [ ] 向量库选型(ChromaDB / Milvus / Pinecone)
|
||
|
||
### 2. 知识库同步机制
|
||
- [ ] 制度变更检测
|
||
- [ ] 增量向量化(≤10分钟完成)
|
||
- [ ] 文本差异算法处理大文件
|
||
|
||
### 3. 问答系统
|
||
- [ ] RAG检索增强生成
|
||
- [ ] 多轮对话上下文管理
|
||
- [ ] 答案溯源与置信度评分
|
||
|
||
### 4. 对外接口(供前端/后端调用)
|
||
- [ ] 问答接口(输入问题 → 返回答案+来源)
|
||
- [ ] 向量同步接口(制度变更时触发)
|
||
- [ ] 推荐接口(相似制度检索)
|
||
|
||
---
|
||
|
||
## 功能优先级排序
|
||
|
||
| 优先级 | 功能编号 | 功能名称 | 状态 | 已实现内容 |
|
||
|--------|---------|---------|------|-----------|
|
||
| 🔴 高 | GKPT-AI-010 | RAG向量数据库 | ✅ 已实现 | ChromaDB + BM25 + Rerank混合检索 |
|
||
| 🔴 高 | GKPT-AI-011 | 多轮智能对话 | ✅ 已实现 | SQLite会话管理,最近10轮上下文 |
|
||
| 🔴 高 | GKPT-KB-008 | 知识库自动同步 | ⚠️ 部分实现 | 有sync_documents()增量更新,缺自动触发和推送 |
|
||
| 🔴 高 | GKPT-EXAM-009 | 题库智能维护 | ⚠️ 部分实现 | 有出题系统,缺制度变更检测和关联题目识别 |
|
||
| 🔴 高 | GKPT-EXAM-015 | AI智能出题 | ✅ 已实现 | Dify工作流出题,支持选择题/填空题/简答题 |
|
||
| 🔴 高 | GKPT-MIND-020 | 自动化纲要生成 | ❌ 未实现 | - |
|
||
| 🟡 中 | GKPT-AI-012 | 答案溯源 | ✅ 已实现 | 返回来源文件、页码,置信度评分 |
|
||
| 🟡 中 | GKPT-READ-005 | 关联推荐 | ❌ 未实现 | - |
|
||
| 🟡 中 | GKPT-EXAM-018 | AI自动阅卷 | ⚠️ 部分实现 | 有批阅报告,缺主观题语义评分 |
|
||
| 🟢 低 | GKPT-AI-013 | 问答质量闭环 | ❌ 未实现 | - |
|
||
|
||
---
|
||
|
||
## 已实现功能详细分析
|
||
|
||
### ✅ GKPT-AI-010: RAG向量数据库(已实现)
|
||
|
||
**已实现内容:**
|
||
- ChromaDB向量数据库存储
|
||
- BGE-base-zh-v1.5本地向量模型
|
||
- BM25关键词检索
|
||
- RRF融合算法(向量+BM25)
|
||
- BGE-reranker-base重排序
|
||
- 支持10万级向量
|
||
- 权限过滤(security_level)
|
||
|
||
**代码位置:** `core/engine.py`
|
||
- `search_knowledge()`: 混合检索主函数
|
||
- `reciprocal_rank_fusion()`: RRF融合
|
||
- `rerank_results()`: 重排序
|
||
|
||
### ✅ GKPT-AI-011: 多轮智能对话(已实现)
|
||
|
||
**已实现内容:**
|
||
- SQLite会话存储
|
||
- 上下文历史管理(最近10轮)
|
||
- Agentic RAG自动上下文传递
|
||
- 会话列表、历史查询、删除会话
|
||
|
||
**代码位置:** `services/session.py`, `core/agentic.py`
|
||
- `SessionManager`: 会话管理器
|
||
- `AgenticRAG.process()`: 多轮对话处理
|
||
|
||
### ✅ GKPT-AI-012: 答案溯源(已实现)
|
||
|
||
**已实现内容:**
|
||
- 返回来源文件名和页码
|
||
- 置信度评估(高/中/低)
|
||
- 来源去重和合并显示
|
||
|
||
**代码位置:** `core/engine.py`, `core/agentic.py`
|
||
- `generate_answer()`: 包含置信度评估(`core/engine.py`)
|
||
- `_extract_sources()`: 来源提取(`core/agentic_citation.py`)
|
||
|
||
### ⚠️ GKPT-KB-008: 知识库自动同步(部分实现)
|
||
|
||
**已实现内容:**
|
||
- `sync_documents()`: 增量更新文档
|
||
- 文件哈希/版本号检测(待完善)
|
||
- BM25索引重建
|
||
|
||
**缺少内容:**
|
||
- 自动触发机制(需要文件监控)
|
||
- 向量增量更新(目前是重建)
|
||
- 用户订阅和推送通知
|
||
- 变更日志记录
|
||
|
||
### ✅ GKPT-EXAM-015: AI智能出题(已实现)
|
||
|
||
**已实现内容:**
|
||
- Dify工作流集成
|
||
- 选择题、填空题、简答题生成
|
||
- 试卷管理(草稿/审核/通过状态)
|
||
- 批阅报告生成
|
||
|
||
**代码位置:** `exam_pkg/manager.py`, `exam_pkg/api.py`
|
||
|
||
### ⚠️ GKPT-EXAM-018: AI自动阅卷(部分实现)
|
||
|
||
**已实现内容:**
|
||
- 客观题自动判分
|
||
- 批阅报告生成
|
||
- 批阅记录存储
|
||
|
||
**缺少内容:**
|
||
- 主观题语义相似度评分
|
||
- 同义词匹配(如"三日"="3天")
|
||
- AI评语生成
|
||
|
||
---
|
||
|
||
## 待开发功能详细分析
|
||
|
||
### 🔴 GKPT-MIND-020: 自动化纲要生成(未实现)
|
||
|
||
**需求回顾:**
|
||
- AI自动提取制度文件的章节结构、核心要点
|
||
- 生成可交互的思维导图
|
||
- 支持导出图片/PDF
|
||
|
||
**开发建议:**
|
||
1. 使用LLM提取文档结构
|
||
2. 生成JSON格式节点树
|
||
3. 前端使用思维导图库渲染(如D3.js/ECharts)
|
||
|
||
### 🔴 GKPT-KB-008完善: 知识库自动同步
|
||
|
||
**缺少内容:**
|
||
1. 文件监控(watchdog库)
|
||
2. 增量向量化(检测变更部分)
|
||
3. 用户订阅机制
|
||
4. 推送通知(WebSocket/邮件)
|
||
|
||
### 🔴 GKPT-EXAM-009: 题库智能维护
|
||
|
||
**需要开发:**
|
||
1. 制度变更检测(版本号/哈希比对)
|
||
2. 题目与制度关联标签
|
||
3. 受影响题目自动标记
|
||
4. AI生成新题目建议
|
||
|
||
### 🟡 GKPT-READ-005: 关联推荐
|
||
|
||
**需要开发:**
|
||
1. 基于标签的相似度计算
|
||
2. 基于向量相似度推荐
|
||
3. 推荐侧边栏组件
|
||
|
||
### 🟢 GKPT-AI-013: 问答质量闭环
|
||
|
||
**需要开发:**
|
||
1. 用户反馈接口(点赞/点踩)
|
||
2. 反馈数据存储
|
||
3. 质量分析报告生成
|
||
4. FAQ自动沉淀
|
||
|
||
---
|
||
|
||
## 架构建议
|
||
|
||
### 对外接口设计
|
||
|
||
```python
|
||
# RAG核心接口(已实现)
|
||
POST /rag # 知识库问答
|
||
POST /search # 混合检索
|
||
|
||
# 需要新增的接口
|
||
POST /sync # 触发知识库同步
|
||
GET /sync/status # 同步状态
|
||
POST /feedback # 用户反馈
|
||
GET /recommend # 关联推荐
|
||
POST /outline # 生成纲要
|
||
```
|
||
|
||
### 数据库扩展
|
||
|
||
```sql
|
||
-- 用户订阅表(需新增)
|
||
CREATE TABLE subscriptions (
|
||
id INTEGER PRIMARY KEY,
|
||
user_id TEXT,
|
||
document_id TEXT,
|
||
created_at TIMESTAMP
|
||
);
|
||
|
||
-- 反馈记录表(需新增)
|
||
CREATE TABLE feedbacks (
|
||
id INTEGER PRIMARY KEY,
|
||
session_id TEXT,
|
||
query TEXT,
|
||
answer TEXT,
|
||
rating INTEGER, -- 1=赞, -1=踩
|
||
reason TEXT,
|
||
created_at TIMESTAMP
|
||
);
|
||
|
||
-- 制度版本表(需新增)
|
||
CREATE TABLE document_versions (
|
||
id INTEGER PRIMARY KEY,
|
||
document_id TEXT,
|
||
version TEXT,
|
||
content_hash TEXT,
|
||
updated_at TIMESTAMP
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
*文档更新时间: 2026-06-04*
|
||
*项目版本: v7.0.0*
|