# Profile Manager 记忆体系 - 缺口分析与完善计划

## 当前状态（✅ P1+P2 核心功能已完成）

### 数据库架构（六表）
- [x] profiles 表 - 人物基础档案
- [x] facts 表 - 事实三元组（追加模式+过期机制）
- [x] relationships 表 - 当前关系状态
- [x] relationship_history 表 - 关系变更历史
- [x] events 表 - 事件时间线
- [x] change_log 表 - 通用变更日志（六要素完整记录）

### 核心 API（✅ 全部完成）
- [x] register_profile() - 首次注册+字段变更都记录 change_log
- [x] add_fact() - 首次添加+值变更都记录 change_log
- [x] update_relationship() - 首次建立+关系变化都记录 change_log
- [x] add_event() - 事件创建时记录 change_log
- [x] get_change_history() - 查询所有变更历史
- [x] get_facts() - 查询事实（支持 include_expired）
- [x] get_relationships() - 查询关系
- [x] get_events() - 查询事件（支持 last_hours=None 查全部）
- [x] get_summary() - 人物画像（含 recent_changes）
- [x] search_profiles() - 人物模糊搜索
- [x] search_facts() - 事实模糊搜索
- [x] normalize_time() - 相对时间转绝对时间

### 智能查询 API（✅ v1.8+ 新增）
- [x] get_context(identity, hours) - 聚合查询：返回最近 N 小时所有记忆
- [x] detect_conflicts(identity) - 矛盾检测：找出冲突事实
- [x] infer_relationship_strength(from_id, to_id, count) - 关系强度推断
- [x] extract_facts_from_dialogue(text, speaker) - 对话事实提取（已对接 LLM）

---

## 识别到的剩余缺口

### 1. 数据写入层面（已全部修复）

| 缺口 | 问题 | 状态 |
|------|------|------|
| ~~add_event() 缺少 metadata 参数~~ | 方法签名没有 metadata | ✅ 已修复 |
| ~~首次写入不记录~~ | 只有变更时才记录 | ✅ 已修复 |

### 2. 查询优化层面（已全部修复）

| 缺口 | 问题 | 状态 |
|------|------|------|
| ~~get_events() 默认 last_hours=24~~ | 默认只查24小时 | ✅ 已修复，支持 None 查全部 |
| **无事件按时间排序优化** | 缺少 ORDER BY timestamp | ✅ 已实现 |
| ~~无 facts 按时间范围查询~~ | 只能查全部 | ✅ 通过 get_context() 实现 |

### 3. 智能能力层面（已基本完成）

| 缺口 | 问题 | 状态 |
|------|------|------|
| ~~无自动事实提取~~ | 需要手动调用 add_fact() | ✅ 已实现 LLM 提取 |
| ~~无关系强度自动推断~~ | 只能通过 update_relationship() 设置 | ✅ 已实现 |
| ~~无矛盾检测~~ | 无法发现冲突事实 | ✅ 已实现 |
| **无对话自动处理** | 需要手动调用 extract_facts | ⚠️ 待集成到 Agent 流程 |

### 4. 检索增强层面

| 缺口 | 问题 | 影响 | 状态 |
|------|------|------|------|
| **无向量检索** | 只能做字符串匹配 | 语义相似查询无法实现 | ⚠️ 占位服务已提供 |
| **无 LLM Wiki 联合查询** | 知识库和 SQLite 分开 | 无法联合查询 | ❌ 待实现 |
| ~~无上下文聚合~~ | 查询时不自动关联相关事实 | 回答不够全面 | ✅ 已实现 get_context() |
| **无场景聚类** | 无法按场景分组记忆 | 无法回答"上次在什么场景下说的" | ❌ 待实现 |

### 5. 场景还原层面

| 缺口 | 问题 | 状态 |
|------|------|------|
| ~~无对话级关联~~ | source_dialogue_id 未充分利用 | ✅ change_log 已记录 trigger_dialogue |
| **无多源整合查询** | facts/events 来源类型未统一查询 | ❌ 待实现 unified_query() |

---

## 完善优先级

### P0 - 已完成 ✅
- [x] 修复 add_event() 缺少 metadata 参数
- [x] register_profile() 首次注册记录 change_log
- [x] add_fact() 首次添加记录 change_log
- [x] update_relationship() 首次建立记录 change_log

### P1 - 已完成 ✅
- [x] 自动事实提取（对接 LLM）
- [x] 关系强度自动推断
- [x] 智能聚合查询（get_context）
- [x] 矛盾检测（detect_conflicts）

### P2 - 待实现

1. **向量检索集成**
   - 对接真实 WeMM-Embedding API（替换占位服务）
   - 实现语义相似度搜索
   - 支持 `semantic_search(query, identity)` 方法

2. **LLM Wiki 联合查询**
   - 并行检索 events/facts/wiki
   - 结果融合与置信度计算
   - 实现 `unified_query(subject, query, sources=['fact', 'event', 'wiki'])`

3. **场景聚类**
   - 按场景/地点分组记忆
   - 支持"上次在什么场景下说的"查询

4. **Agent 流程集成**
   - 在对话处理中自动调用 extract_facts_from_dialogue()
   - 自动写入新的记忆

---

## 总结

| 维度 | 当前状态 | 目标状态 | 完成度 |
|------|---------|---------|--------|
| 数据写入 | ✅ 首次+变更都记录 | ✅ 完成 | 100% |
| 六要素支持 | ✅ 所有方法完整支持 | ✅ 完成 | 100% |
| 自动提取 | ✅ LLM 对接完成 | ✅ 完成 | 90% |
| 关系推断 | ✅ 基于交互自动计算 | ✅ 完成 | 100% |
| 查询能力 | ✅ 聚合查询+矛盾检测 | ✅ 完成 | 90% |
| 智能检测 | ✅ 矛盾检测+提示 | ✅ 完成 | 100% |
| 向量检索 | ⚠️ 占位服务 | 🎯 对接真实服务 | 40% |
| Wiki 整合 | ❌ 未连接 | 🎯 多路并行检索 | 0% |

**总体完成度：约 85%**

下一步重点：
1. 对接真实 WeMM-Embedding API（替换占位服务）
2. 实现 LLM Wiki 联合查询
3. 向量检索实现
4. Agent 流程集成（对话自动提取事实）

---

## 假的 WeMM-Embedding 服务

### 启动方式
```bash
python3 fake_wemm_server.py
```

### API 接口
- `POST /embed` - 生成文本向量
  ```json
  {"text": "用户喜欢的颜色"}
  ```
  返回:
  ```json
  {
    "success": true,
    "vector": [...],  // 768 维
    "dimension": 768,
    "model": "wemm-embedding-v1-fake"
  }
  ```

- `POST /health` - 健康检查
  ```json
  {"status": "ok", "model": "fake-wemm-embedding", "dimensions": 768}
  ```

### 生产环境替换
当 GPU 服务器部署真实 WeMM-Embedding 后，只需修改配置：
```yaml
vision:
  wemm_api_url: http://your-gpu-server:8765  # 改为真实地址
```
