# 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 并行推进。**
