多库检索与存储修复: - 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 - 更新多篇现有文档
12 KiB
12 KiB
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
开发建议:
- 使用LLM提取文档结构
- 生成JSON格式节点树
- 前端使用思维导图库渲染(如D3.js/ECharts)
🔴 GKPT-KB-008完善: 知识库自动同步
缺少内容:
- 文件监控(watchdog库)
- 增量向量化(检测变更部分)
- 用户订阅机制
- 推送通知(WebSocket/邮件)
🔴 GKPT-EXAM-009: 题库智能维护
需要开发:
- 制度变更检测(版本号/哈希比对)
- 题目与制度关联标签
- 受影响题目自动标记
- AI生成新题目建议
🟡 GKPT-READ-005: 关联推荐
需要开发:
- 基于标签的相似度计算
- 基于向量相似度推荐
- 推荐侧边栏组件
🟢 GKPT-AI-013: 问答质量闭环
需要开发:
- 用户反馈接口(点赞/点踩)
- 反馈数据存储
- 质量分析报告生成
- FAQ自动沉淀
架构建议
对外接口设计
# RAG核心接口(已实现)
POST /rag # 知识库问答
POST /search # 混合检索
# 需要新增的接口
POST /sync # 触发知识库同步
GET /sync/status # 同步状态
POST /feedback # 用户反馈
GET /recommend # 关联推荐
POST /outline # 生成纲要
数据库扩展
-- 用户订阅表(需新增)
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