328 lines
7.2 KiB
Markdown
328 lines
7.2 KiB
Markdown
# Jarvis RAG 升级执行清单
|
||
|
||
日期:2026-04-03
|
||
状态:执行清单
|
||
借鉴来源:VCPToolBox TagMemo V6 架构
|
||
|
||
---
|
||
|
||
## 使用说明
|
||
|
||
- 完成前使用 `- [ ]`
|
||
- 完成后改成 `- [x]`
|
||
- Day R.2 默认依赖 Day R.1 的分块优化完成后再推进
|
||
- Day R.3 默认依赖 Day R.1 的分块优化完成后再推进
|
||
- Day R.4 为可选特性
|
||
|
||
---
|
||
|
||
## Day R.1:Token 感知分块优化(3天)
|
||
|
||
Day R.1 目标:解决跨块边界信息丢失问题,实现精确的 token 计数和重叠分块。
|
||
|
||
### Task R.1.1:集成 tiktoken
|
||
|
||
- [ ] 安装 tiktoken 依赖
|
||
```bash
|
||
uv add tiktoken
|
||
```
|
||
|
||
- [ ] 新增 `backend/app/services/chunker.py`
|
||
实现 `TokenAwareChunker` 类,支持 85% 安全边界
|
||
|
||
- [ ] 实现 `count_tokens()` 方法
|
||
|
||
### Task R.1.2:实现智能断句
|
||
|
||
- [ ] 实现 `find_best_breakpoint()` 函数
|
||
在断点处(标点/空白)智能断开
|
||
|
||
- [ ] 实现 `_force_split_long_text()` 方法
|
||
处理超长句子强制分割
|
||
|
||
### Task R.1.3:实现重叠分块
|
||
|
||
- [ ] 实现 `chunk_with_overlap()` 方法
|
||
10% token 重叠,保证上下文连续性
|
||
|
||
- [ ] 实现 `_create_overlap()` 方法
|
||
创建重叠部分
|
||
|
||
### Task R.1.4:集成到 DocumentService
|
||
|
||
- [ ] 修改 `backend/app/services/document_service.py`
|
||
集成新的 TokenAwareChunker
|
||
|
||
- [ ] 替换原有的 `_build_chunks()` 方法
|
||
|
||
### Task R.1.5:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_chunker.py`
|
||
|
||
- [ ] 测试 Token 计数准确性
|
||
|
||
- [ ] 测试智能断句
|
||
|
||
- [ ] 测试重叠分块
|
||
|
||
### Day R.1 验收
|
||
|
||
- [ ] tiktoken 正确集成,token 计数误差 < 1%
|
||
- [ ] 超长句子不在词汇中间断开
|
||
- [ ] 重叠分块保证上下文连续性
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
- [ ] 文档上传→分块→检索 集成测试通过
|
||
|
||
---
|
||
|
||
## Day R.2:多索引架构(4天)
|
||
|
||
Day R.2 目标:按知识类型/重要性分层,支持懒加载和 LRU 淘汰。
|
||
|
||
### Task R.2.1:设计 Collection 分离策略
|
||
|
||
- [ ] 新增 `backend/app/services/multi_index.py`
|
||
|
||
- [ ] 定义 `MultiIndexManager` 类
|
||
|
||
- [ ] 实现 `INDEX_STRATEGIES` 配置
|
||
- default: 通用文档
|
||
- important: 重要文档
|
||
- code: 代码片段
|
||
- meeting: 会议记录
|
||
|
||
- [ ] 实现 `get_collection()` 方法
|
||
|
||
### Task R.2.2:实现懒加载 + LRU TTL
|
||
|
||
- [ ] 实现 `LazyIndexLoader` 类
|
||
|
||
- [ ] 实现 `get_or_load()` 方法
|
||
|
||
- [ ] 实现 `sweep()` 方法
|
||
2小时 TTL 淘汰机制
|
||
|
||
### Task R.2.3:实现重要性感知检索
|
||
|
||
- [ ] 实现 `retrieve_with_importance()` 方法
|
||
|
||
- [ ] important 索引加权 1.2x
|
||
|
||
### Task R.2.4:修改 Document 模型
|
||
|
||
- [ ] 修改 `backend/app/models/document.py`
|
||
|
||
- [ ] 增加 `importance` 字段(Float, default=0.5)
|
||
|
||
### Task R.2.5:集成到 KnowledgeService
|
||
|
||
- [ ] 修改 `backend/app/services/knowledge_service.py`
|
||
|
||
- [ ] 集成 MultiIndexManager
|
||
|
||
- [ ] 集成 LazyIndexLoader
|
||
|
||
- [ ] 根据 importance 选择索引
|
||
|
||
### Task R.2.6:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_multi_index.py`
|
||
|
||
- [ ] 测试多 Collection 创建
|
||
|
||
- [ ] 测试懒加载
|
||
|
||
- [ ] 测试 TTL 淘汰
|
||
|
||
### Day R.2 验收
|
||
|
||
- [ ] 多 Collection 创建成功
|
||
- [ ] 懒加载索引生效
|
||
- [ ] TTL 淘汰机制工作
|
||
- [ ] 重要性感知检索加权生效
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
|
||
---
|
||
|
||
## Day R.3:动态权重增强(4.5天)
|
||
|
||
Day R.3 目标:根据查询特性动态调整检索策略,支持核心标签加权。
|
||
|
||
### Task R.3.1:实现查询特性分析
|
||
|
||
- [ ] 新增 `backend/app/services/query_analyzer.py`
|
||
|
||
- [ ] 定义 `QueryProfile` 数据类
|
||
|
||
- [ ] 实现 `QueryAnalyzer` 类
|
||
|
||
- [ ] 实现查询类型检测
|
||
- 代码相关
|
||
- 表格相关
|
||
- 对话式
|
||
|
||
- [ ] 实现 `_calc_logic_depth()` 方法
|
||
|
||
### Task R.3.2:实现动态 Reranker
|
||
|
||
- [ ] 新增 `backend/app/services/dynamic_reranker.py`
|
||
|
||
- [ ] 实现 `DynamicReranker` 类
|
||
|
||
- [ ] 实现 `_get_weights()` 方法
|
||
- 代码查询:关键词权重高
|
||
- 表格查询:标题权重高
|
||
- 对话式:语义权重高
|
||
|
||
- [ ] 实现 `_calc_beta()` 方法
|
||
|
||
- [ ] 实现 `rerank()` 方法
|
||
|
||
### Task R.3.3:实现核心标签系统
|
||
|
||
- [ ] 新增 `backend/app/services/core_tag_search.py`
|
||
|
||
- [ ] 实现 `CoreTagAwareSearch` 类
|
||
|
||
- [ ] 实现 `CORE_BOOST_FACTOR = 1.33`
|
||
|
||
- [ ] 实现 `search()` 方法
|
||
|
||
### Task R.3.4:修改 DocumentChunk 模型
|
||
|
||
- [ ] 修改 `backend/app/models/document.py`
|
||
|
||
- [ ] 增加 `tags` 字段(JSON, default=list)
|
||
|
||
- [ ] 增加 `is_core` 字段(Boolean, default=False)
|
||
|
||
### Task R.3.5:集成到 KnowledgeService
|
||
|
||
- [ ] 修改 `backend/app/services/knowledge_service.py`
|
||
|
||
- [ ] 集成 QueryAnalyzer
|
||
|
||
- [ ] 集成 DynamicReranker
|
||
|
||
- [ ] 集成 CoreTagAwareSearch
|
||
|
||
- [ ] 修改 `retrieve()` 方法支持动态权重
|
||
|
||
### Task R.3.6:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_dynamic_reranker.py`
|
||
|
||
- [ ] 测试查询特性分析
|
||
|
||
- [ ] 测试动态权重调整
|
||
|
||
- [ ] 测试核心标签加权
|
||
|
||
### Day R.3 验收
|
||
|
||
- [ ] 查询特性分析准确(代码/表格/对话式识别)
|
||
- [ ] 动态权重根据查询类型调整
|
||
- [ ] 核心标签检索加权 1.33x
|
||
- [ ] Rerank 集成测试通过
|
||
|
||
---
|
||
|
||
## Day R.4:高级特性(可选)(4.5天)
|
||
|
||
Day R.4 目标:探索更高级的 RAG 增强技术。
|
||
|
||
### Task R.4.1:语义去重
|
||
|
||
- [ ] 新增 `backend/app/services/deduplicator.py`
|
||
|
||
- [ ] 实现 `SemanticDeduplicator` 类
|
||
|
||
- [ ] 实现 `_cosine_similarity()` 方法
|
||
|
||
- [ ] 实现 `deduplicate()` 方法
|
||
|
||
### Task R.4.2:语义分桶(可选)
|
||
|
||
- [ ] 新增 `backend/app/services/semantic_bucket.py`
|
||
|
||
- [ ] 实现 `SemanticBucketing` 类
|
||
|
||
- [ ] 实现 `bucket_by_topic()` 方法
|
||
|
||
### Task R.4.3:EPA 分析设计(可选探索)
|
||
|
||
- [ ] 设计 EPA 模块架构
|
||
|
||
- [ ] 定义 EPA 接口
|
||
|
||
- [ ] 实现残差金字塔算法(伪代码)
|
||
|
||
### Day R.4 验收(可选)
|
||
|
||
- [ ] 语义去重测试通过
|
||
- [ ] 语义分桶原型完成(可选)
|
||
- [ ] EPA 分析方案设计完成(可选实现)
|
||
|
||
---
|
||
|
||
## 总验收清单
|
||
|
||
### Phase R.1-R.3 必须完成
|
||
|
||
- [ ] Token 感知分块正常工作
|
||
- [ ] 多索引架构正常工作
|
||
- [ ] 动态权重增强正常工作
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
- [ ] 集成测试通过
|
||
- [ ] 原有检索功能无回退
|
||
|
||
### Phase R.4 可选完成
|
||
|
||
- [ ] 语义去重正常工作
|
||
- [ ] 语义分桶正常工作(可选)
|
||
- [ ] EPA 设计文档完成(可选)
|
||
|
||
---
|
||
|
||
## 总工作量估算
|
||
|
||
| Phase | 工作量 |
|
||
|-------|--------|
|
||
| R.1 Token 感知分块 | 3 天 |
|
||
| R.2 多索引架构 | 4 天 |
|
||
| R.3 动态权重增强 | 4.5 天 |
|
||
| R.4 高级特性(可选) | 4.5 天 |
|
||
| **R.1-R.3 必须** | **11.5 天** |
|
||
| **R.1-R.4 含可选** | **16 天** |
|
||
|
||
---
|
||
|
||
## 产出清单
|
||
|
||
| 产出 | 对应 Phase |
|
||
|------|-----------|
|
||
| `services/chunker.py` | R.1 |
|
||
| `services/multi_index.py` | R.2 |
|
||
| `services/query_analyzer.py` | R.3 |
|
||
| `services/dynamic_reranker.py` | R.3 |
|
||
| `services/core_tag_search.py` | R.3 |
|
||
| `services/deduplicator.py` | R.4 |
|
||
| `services/semantic_bucket.py` | R.4(可选) |
|
||
| `models/document.py` 更新 | R.2, R.3 |
|
||
| 单元测试 > 80% | R.1, R.2, R.3 |
|
||
| 集成测试通过 | R.1, R.2, R.3 |
|
||
|
||
---
|
||
|
||
## 与 Agent Phase 关系
|
||
|
||
| Agent Phase | RAG 协作内容 |
|
||
|-------------|-------------|
|
||
| Phase 1 | Task Schema 追踪 RAG 任务 |
|
||
| Phase 2 | RAG 任务可分解给 Librarian Agent |
|
||
| Phase 3 | 支持多索引动态选择 |
|
||
| Phase 4 | RAG 检索过程可视化 |
|
||
| Phase 5 | EPA 分析、语义分桶 |
|
||
|
||
**Phase R 可与 Agent Phase 1-5 并行推进。**
|