411 lines
9.9 KiB
Markdown
411 lines
9.9 KiB
Markdown
# Jarvis Memory 升级执行清单
|
||
|
||
日期:2026-04-04
|
||
状态:执行清单
|
||
升级方向:拟人化记忆系统
|
||
|
||
---
|
||
|
||
## 使用说明
|
||
|
||
- 完成前使用 `- [ ]`
|
||
- 完成后改成 `- [x]`
|
||
- Day M.2 默认依赖 Day M.1 的重要性评分完成后再推进
|
||
- Day M.3 默认依赖 Day M.1 和 M.2 完成后再推进
|
||
|
||
---
|
||
|
||
## Day M.1:重要性评分系统(4天)
|
||
|
||
Day M.1 目标:让 Jarvis 知道「什么对你重要」。
|
||
|
||
### Task M.1.1:实现 FrequencyTracker
|
||
|
||
- [ ] 新增 `backend/app/services/memory/frequency_tracker.py`
|
||
|
||
- [ ] 实现 `FrequencyTracker` 类
|
||
|
||
- [ ] 实现 `increment()` 方法
|
||
```python
|
||
def increment(self, memory: UserMemory) -> UserMemory:
|
||
memory.frequency_count += 1
|
||
memory.last_recalled_at = datetime.now()
|
||
return memory
|
||
```
|
||
|
||
- [ ] 实现 `get_time_decay()` 方法
|
||
|
||
### Task M.1.2:实现 EmotionAnalyzer
|
||
|
||
- [ ] 新增 `backend/app/services/memory/emotion_analyzer.py`
|
||
|
||
- [ ] 实现 `EmotionAnalyzer` 类
|
||
|
||
- [ ] 定义 `EMOTION_KEYWORDS` 字典
|
||
```python
|
||
EMOTION_KEYWORDS = {
|
||
"急": 1.0,
|
||
"很重要": 0.9,
|
||
"困扰": 0.8,
|
||
"担心": 0.7,
|
||
"想解决": 0.6,
|
||
"无所谓": 0.1,
|
||
}
|
||
```
|
||
|
||
- [ ] 实现 `extract()` 方法 - 从文本提取情绪关键词
|
||
|
||
- [ ] 实现 `calculate_score()` 方法 - 计算情绪分数
|
||
|
||
### Task M.1.3:实现 ImpactEvaluator
|
||
|
||
- [ ] 新增 `backend/app/services/memory/impact_evaluator.py`
|
||
|
||
- [ ] 实现 `ImpactEvaluator` 类
|
||
|
||
- [ ] 实现 `evaluate()` 方法
|
||
```python
|
||
def evaluate(self, memory: UserMemory) -> float:
|
||
# 关联话题越多,影响面越大
|
||
return min(1.0, len(memory.associated_topics) / IMPACT_THRESHOLD)
|
||
```
|
||
|
||
### Task M.1.4:实现 ImportanceScorer
|
||
|
||
- [ ] 新增 `backend/app/services/memory/importance_scorer.py`
|
||
|
||
- [ ] 实现 `ImportanceScorer` 类
|
||
|
||
- [ ] 实现 `calculate_score()` 综合评分方法
|
||
```python
|
||
def calculate_score(self, memory: UserMemory) -> float:
|
||
frequency = self.tracker.get_frequency_score(memory) * 0.35
|
||
recency = self.tracker.get_recency_score(memory) * 0.20
|
||
emotion = self.emotion_analyzer.calculate_score(memory) * 0.25
|
||
impact = self.impact_evaluator.evaluate(memory) * 0.20
|
||
return frequency + recency + emotion + impact
|
||
```
|
||
|
||
- [ ] 实现 `get_importance_level()` 方法
|
||
|
||
- [ ] 实现 `should_escalate()` 方法
|
||
|
||
### Task M.1.5:修改 UserMemory 模型
|
||
|
||
- [ ] 修改 `backend/app/models/memory.py`
|
||
|
||
- [ ] 增加字段:
|
||
```python
|
||
frequency_count: int = 0
|
||
last_recalled_at: DateTime = None
|
||
emotion_tags: list[str] = []
|
||
importance_score: float = 0.5
|
||
importance_level: str = "medium"
|
||
associated_topics: list[str] = []
|
||
```
|
||
|
||
### Task M.1.6:集成到 MemoryService
|
||
|
||
- [ ] 修改 `backend/app/services/memory_service.py`
|
||
|
||
- [ ] 集成 `ImportanceScorer`
|
||
|
||
- [ ] 修改 `add_memory()` 方法计算重要性
|
||
|
||
- [ ] 修改 `recall_memories()` 方法按重要性排序
|
||
|
||
### Task M.1.7:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_importance_scorer.py`
|
||
|
||
- [ ] 测试频率追踪
|
||
|
||
- [ ] 测试情绪分析
|
||
|
||
- [ ] 测试重要性评分
|
||
|
||
- [ ] 测试重要性等级划分
|
||
|
||
### Day M.1 验收
|
||
|
||
- [ ] 频率追踪正常(recall_count 每次 +1)
|
||
- [ ] 情绪识别准确(「急」「很重要」等能识别)
|
||
- [ ] 重要性分数正确(高频+情绪 = importance >= 0.8)
|
||
- [ ] 评分影响排序(高重要性记忆排在前面)
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
|
||
---
|
||
|
||
## Day M.2:遗忘曲线系统(3天)
|
||
|
||
Day M.2 目标:让 Jarvis 知道「什么可以忘记」。
|
||
|
||
### Task M.2.1:实现 ForgettingCurve
|
||
|
||
- [ ] 新增 `backend/app/services/memory/forgetting_curve.py`
|
||
|
||
- [ ] 实现 `ForgettingCurve` 类
|
||
|
||
- [ ] 实现 `calculate_decay()` 方法
|
||
```python
|
||
def calculate_decay(self, memory: UserMemory) -> float:
|
||
half_life = self.get_half_life(memory)
|
||
days = (datetime.now() - memory.last_accessed_at).days
|
||
return exp(-days / half_life)
|
||
```
|
||
|
||
- [ ] 实现 `get_half_life()` 方法(重要性影响半衰期)
|
||
|
||
### Task M.2.2:实现 MemoryDecay
|
||
|
||
- [ ] 新增 `backend/app/services/memory/memory_decay.py`
|
||
|
||
- [ ] 实现 `MemoryDecay` 类
|
||
|
||
- [ ] 实现 `should_archive()` 方法(decay < 0.2)
|
||
|
||
- [ ] 实现 `should_deprioritize()` 方法(decay < 0.5)
|
||
|
||
- [ ] 实现 `archive_memory()` 方法
|
||
|
||
- [ ] 实现 `restore_from_archive()` 方法
|
||
|
||
### Task M.2.3:实现 MemoryReinforcement
|
||
|
||
- [ ] 新增 `backend/app/services/memory/reinforcement.py`
|
||
|
||
- [ ] 实现 `MemoryReinforcement` 类
|
||
|
||
- [ ] 实现 `trigger()` 方法(召回时强化)
|
||
|
||
- [ ] 实现 `auto_reinforce()` 方法(定期强化 high 级别)
|
||
|
||
### Task M.2.4:修改 UserMemory 模型
|
||
|
||
- [ ] 修改 `backend/app/models/memory.py`
|
||
|
||
- [ ] 增加字段:
|
||
```python
|
||
decay_score: float = 1.0
|
||
is_archived: bool = False
|
||
last_accessed_at: DateTime = None
|
||
archive_at: DateTime = None
|
||
```
|
||
|
||
### Task M.2.5:集成到 MemoryService
|
||
|
||
- [ ] 修改 `backend/app/services/memory_service.py`
|
||
|
||
- [ ] 集成 ForgettingCurve
|
||
|
||
- [ ] 修改 recall_memories() 更新 last_accessed_at
|
||
|
||
- [ ] 集成 MemoryReinforcement
|
||
|
||
### Task M.2.6:添加调度任务
|
||
|
||
- [ ] 修改 `backend/app/services/scheduler_service.py`
|
||
|
||
- [ ] 添加每日遗忘检查(cron: 03:00)
|
||
|
||
- [ ] 添加每周强化任务(cron: 周一 04:00)
|
||
|
||
### Task M.2.7:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_forgetting_curve.py`
|
||
|
||
- [ ] 测试遗忘曲线计算
|
||
|
||
- [ ] 测试高重要性记忆衰减慢
|
||
|
||
- [ ] 测试归档/恢复
|
||
|
||
### Day M.2 验收
|
||
|
||
- [ ] 遗忘曲线正确(30 天后 decay ≈ 0.5)
|
||
- [ ] 高重要性记忆衰减慢(high 衰减速度是 low 的 1/6)
|
||
- [ ] 归档正常(decay < 0.2 自动归档)
|
||
- [ ] 恢复正常(归档记忆可以恢复)
|
||
- [ ] 调度任务正常(每日检查、周强化执行)
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
|
||
---
|
||
|
||
## Day M.3:主动提醒系统(6天)
|
||
|
||
Day M.3 目标:让 Jarvis 从「等用户问」变成「主动关心」。
|
||
|
||
### Task M.3.1:实现 DailyDigestGenerator
|
||
|
||
- [ ] 新增 `backend/app/services/memory/daily_digest.py`
|
||
|
||
- [ ] 实现 `DailyDigestGenerator` 类
|
||
|
||
- [ ] 定义 `DailyDigest` 数据类
|
||
|
||
- [ ] 实现 `generate()` 方法
|
||
```python
|
||
async def generate(self, user_id: int, date: date = None) -> DailyDigest:
|
||
# 1. 获取今日对话摘要
|
||
# 2. 获取高重要性记忆
|
||
# 3. 获取待解答问题
|
||
# 4. 生成建议
|
||
```
|
||
|
||
- [ ] 实现 `get_recent_digests()` 方法
|
||
|
||
### Task M.3.2:实现 ReminderScheduler
|
||
|
||
- [ ] 新增 `backend/app/services/memory/reminder_scheduler.py`
|
||
|
||
- [ ] 定义 `Reminder` 数据类
|
||
|
||
- [ ] 实现 `ReminderScheduler` 类
|
||
|
||
- [ ] 实现 `create_reminder()` 方法
|
||
|
||
- [ ] 实现 `get_due_reminders()` 方法
|
||
|
||
- [ ] 实现 `snooze()` 方法
|
||
|
||
- [ ] 实现 `dismiss()` 方法
|
||
|
||
### Task M.3.3:实现 ProactiveInformer
|
||
|
||
- [ ] 新增 `backend/app/services/memory/proactive_informer.py`
|
||
|
||
- [ ] 实现 `ProactiveInformer` 类
|
||
|
||
- [ ] 定义 `TRIGGERS` 配置
|
||
|
||
- [ ] 定义 `INFORM_PROBABILITY` 配置
|
||
|
||
- [ ] 实现 `should_inform()` 方法
|
||
|
||
- [ ] 实现 `get_inform_message()` 方法
|
||
|
||
- [ ] 实现 `check_and_inform()` 方法
|
||
|
||
### Task M.3.4:创建提醒数据模型
|
||
|
||
- [ ] 修改数据库支持 `reminders` 表
|
||
|
||
- [ ] 新增 `backend/app/models/reminder.py`
|
||
|
||
- [ ] 或在现有模型文件中增加 Reminder 类
|
||
|
||
### Task M.3.5:集成到 MemoryService
|
||
|
||
- [ ] 修改 `backend/app/services/memory_service.py`
|
||
|
||
- [ ] 集成 DailyDigestGenerator
|
||
|
||
- [ ] 集成 ProactiveInformer
|
||
|
||
- [ ] 修改 recall_memories() 触发主动告知检查
|
||
|
||
### Task M.3.6:集成到 SchedulerService
|
||
|
||
- [ ] 修改 `backend/app/services/scheduler_service.py`
|
||
|
||
- [ ] 添加每日摘要生成(cron: 22:00)
|
||
|
||
- [ ] 添加提醒检查任务(cron: 每 15 分钟)
|
||
|
||
### Task M.3.7:前端 - 每日摘要展示
|
||
|
||
- [ ] 修改前端对话页面
|
||
|
||
- [ ] 新增每日摘要卡片组件
|
||
|
||
- [ ] 获取和展示今日摘要
|
||
|
||
### Task M.3.8:前端 - 主动提醒推送
|
||
|
||
- [ ] 新增主动提醒 Toast 组件
|
||
|
||
- [ ] 实现稍后/知道了按钮
|
||
|
||
- [ ] 推送 WebSocket 集成
|
||
|
||
### Task M.3.9:补测试
|
||
|
||
- [ ] 新增 `backend/tests/services/test_proactive_reminder.py`
|
||
|
||
- [ ] 测试每日摘要生成
|
||
|
||
- [ ] 测试提醒创建和调度
|
||
|
||
- [ ] 测试主动告知概率
|
||
|
||
### Day M.3 验收
|
||
|
||
- [ ] 每日摘要生成正常(22:00 自动生成)
|
||
- [ ] 提醒创建正常(用户可创建提醒)
|
||
- [ ] 提醒到期触发(定时推送)
|
||
- [ ] 主动告知概率正确(按配置的概率触发)
|
||
- [ ] 告知消息自然(像人说话,不生硬)
|
||
- [ ] 用户可控制(可以关闭主动提醒)
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
|
||
---
|
||
|
||
## 总验收清单
|
||
|
||
### Phase M.1-M.3 必须完成
|
||
|
||
- [ ] 重要性评分系统正常工作
|
||
- [ ] 遗忘曲线系统正常工作
|
||
- [ ] 主动提醒系统正常工作
|
||
- [ ] 单元测试覆盖率 > 80%
|
||
- [ ] 集成测试通过
|
||
- [ ] 原有记忆功能无回退
|
||
|
||
---
|
||
|
||
## 总工作量估算
|
||
|
||
| Phase | 工作量 |
|
||
|-------|--------|
|
||
| M.1 重要性评分 | 4 天 |
|
||
| M.2 遗忘曲线 | 3 天 |
|
||
| M.3 主动提醒 | 6 天 |
|
||
| **合计** | **13 天** |
|
||
|
||
---
|
||
|
||
## 产出清单
|
||
|
||
| 产出 | 对应 Phase |
|
||
|------|-----------|
|
||
| `services/memory/frequency_tracker.py` | M.1 |
|
||
| `services/memory/emotion_analyzer.py` | M.1 |
|
||
| `services/memory/impact_evaluator.py` | M.1 |
|
||
| `services/memory/importance_scorer.py` | M.1 |
|
||
| `services/memory/forgetting_curve.py` | M.2 |
|
||
| `services/memory/memory_decay.py` | M.2 |
|
||
| `services/memory/reinforcement.py` | M.2 |
|
||
| `services/memory/daily_digest.py` | M.3 |
|
||
| `services/memory/reminder_scheduler.py` | M.3 |
|
||
| `services/memory/proactive_informer.py` | M.3 |
|
||
| `models/memory.py` 更新 | M.1, M.2 |
|
||
| `models/reminder.py` 新增 | M.3 |
|
||
| 前端摘要卡片 | M.3 |
|
||
| 前端提醒 Toast | M.3 |
|
||
| 单元测试 > 80% | M.1, M.2, M.3 |
|
||
| 集成测试通过 | M.1, M.2, M.3 |
|
||
|
||
---
|
||
|
||
## 与 Agent Phase 关系
|
||
|
||
| Agent Phase | Memory 协作内容 |
|
||
|-------------|----------------|
|
||
| Phase 1 | Memory 追踪用户交互频率 |
|
||
| Phase 2 | Memory 服务被 Librarian Agent 调用 |
|
||
| Phase 3 | 支持动态协作时的记忆共享 |
|
||
| Phase 4 | Memory 重要性可视化 |
|
||
| Phase 5 | 高级记忆关联分析 |
|
||
|
||
**Phase M 可与 Agent Phase 1-5 并行推进。**
|