fix(memory): correct memory architecture to 3-layer design (text/vector/graph)
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
|
||||
## 概述
|
||||
|
||||
记忆子网类比人脑的**海马体与皮层**,负责长期记忆的存储、检索和管理。采用**三级存储架构**:图数据库(Neo4j)存储结构化知识图谱、向量数据库存储语义向量、文本存储记录会话历史。
|
||||
记忆子网类比人脑的**海马体与皮层**,负责记忆的存储、检索和管理。采用**三层记忆架构**:**文本记忆**(短对话临时工作区)、**向量记忆**(语义检索)、**图记忆**(结构化知识)。
|
||||
|
||||
> 图数据库记忆设计参考了 [TrulyMEM-TrueHumanMEM](https://jianfgit.xyz:220/jianf/TrulyMEM-TrueHumanMEM.git) 项目。
|
||||
|
||||
@ -27,22 +27,37 @@
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ 记忆管理器 (Memory Manager) │ │
|
||||
│ │ 自行决定: │ │
|
||||
│ │ → 如何解析查询 → 走图DB/向量DB/文本 │ │
|
||||
│ │ → 如何写入新信息 → MERGE/CREATE/更新 │ │
|
||||
│ │ → 如何更新已有记忆 → 增量/覆盖/合并 │ │
|
||||
│ │ → 如何解析查询 → 走文本/向量/图记忆 │ │
|
||||
│ │ → 如何写入新信息 → 先入文本记忆再处理 │ │
|
||||
│ │ → 如何更新 → 冲突合并/覆盖/增量 │ │
|
||||
│ │ → 如何删除 → 软删除/硬删除/归档 │ │
|
||||
│ │ → 如何关联 → 链路推理/图谱推理 │ │
|
||||
│ └──────┬────────────┬──────────────┬─────────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ ▼ ▼ ▼ │
|
||||
│ ┌──────────┐ ┌────────────┐ ┌────────────────┐ │
|
||||
│ │ 图数据库 │ │ 向量数据库 │ │ 文本存储 │ │
|
||||
│ │ (Neo4j) │ │(Milvus/FAISS)│ │ (日志/会话归档) │ │
|
||||
│ │ │ │ │ │ │ │
|
||||
│ │ Entity │ │ 语义向量 │ │ 原始对话记录 │ │
|
||||
│ │ RELATES │ │ 索引 │ │ 时间线索引 │ │
|
||||
│ │ Cypher │ │ 相似度搜索 │ │ 压缩归档 │ │
|
||||
│ └──────────┘ └────────────┘ └────────────────┘ │
|
||||
│ └──────┬─────────────────────────────────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ 文本记忆(临时工作区) │ │
|
||||
│ │ 近期对话内容,按时间顺序追加,容量有限 │ │
|
||||
│ └─────────────────────┬────────────────────────────┘ │
|
||||
│ │ 定期扫描 (每 N 轮/定时) │
|
||||
│ ▼ │
|
||||
│ ┌──────────────────────────────────────────────────┐ │
|
||||
│ │ 记忆处理流水线 │ │
|
||||
│ │ │ │
|
||||
│ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐│ │
|
||||
│ │ │ 拆解 │────→│冲突合并│────→│相似合并│────→│分路写入││ │
|
||||
│ │ └──────┘ └──────┘ └──────┘ └──┬───┘│ │
|
||||
│ │ │ │ │
|
||||
│ └───────────────────────────────────────────────┼────┘ │
|
||||
│ │ │
|
||||
│ ┌──────────────────────────────────┼──┐ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌─────────────────────┐ ┌─────────────────────────┐ │
|
||||
│ │ 图记忆 │ │ 向量记忆 │ │
|
||||
│ │ (结构化知识) │ │ (语义向量) │ │
|
||||
│ │ Entity / RELATES │ │ 索引 + 相似度搜索 │ │
|
||||
│ │ Cypher 查询 │ │ │ │
|
||||
│ └─────────────────────┘ └─────────────────────────┘ │
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────────┐ │
|
||||
│ │ 张量编/解码层 │ │
|
||||
@ -52,11 +67,33 @@
|
||||
└───────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 三级存储架构
|
||||
## 三层记忆
|
||||
|
||||
### 第一级:图数据库(Neo4j)— 温区
|
||||
### 第一层:文本记忆(Text Memory)— 临时工作区
|
||||
|
||||
存储结构化知识,支持关系查询和推理。
|
||||
类似人脑工作记忆,保存近期对话内容,按时间顺序追加。容量有限,保证短对话内的上下文连续性。由记忆子网定期处理(拆解/冲突合并/相似合并/分路写入)。
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 存储内容 | 近期对话原始文本 |
|
||||
| 管理方式 | 按时间顺序追加,溢出时丢弃最旧内容 |
|
||||
| 处理时机 | 每 N 轮对话或定时触发 |
|
||||
| 用途 | 短期对话连续性,记忆处理源 |
|
||||
|
||||
### 第二层:向量记忆(Vector Memory)— 语义检索
|
||||
|
||||
存储经过嵌入的语义向量,支持语义相似度检索。长对话连续性关键组件之一。
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 索引类型 | IVF_FLAT / HNSW |
|
||||
| 向量维度 | 768 (匹配标准张量维度) |
|
||||
| 度量方式 | Cosine Similarity |
|
||||
| 分片策略 | 按时间桶 + 会话 ID 分片 |
|
||||
|
||||
### 第三层:图记忆(Graph Memory)— 结构化知识
|
||||
|
||||
实体-关系图,存储用户偏好、知识图谱等结构化信息。长对话连续性关键组件之二。
|
||||
|
||||
**参考 TrulyMEM 的图数据库设计:**
|
||||
|
||||
@ -121,28 +158,6 @@ ORDER BY e.mention_count DESC
|
||||
LIMIT 10
|
||||
```
|
||||
|
||||
### 第二级:向量数据库(Milvus / FAISS)— 冷区
|
||||
|
||||
存储语义向量,支持相似度检索。
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 索引类型 | IVF_FLAT / HNSW |
|
||||
| 向量维度 | 768 (匹配标准张量维度) |
|
||||
| 度量方式 | Cosine Similarity |
|
||||
| 分片策略 | 按时间桶 + 会话 ID 分片 |
|
||||
|
||||
### 第三级:文本存储 — 冷区
|
||||
|
||||
存储完整的原始对话记录和会话日志。
|
||||
|
||||
| 项目 | 说明 |
|
||||
|------|------|
|
||||
| 存储格式 | JSONL / 压缩归档 |
|
||||
| 索引 | 时间线索引 + 会话 ID 索引 |
|
||||
| 生命周期 | 30天后归档,90天后可清理 |
|
||||
| 用途 | 审计、重建、深度分析 |
|
||||
|
||||
## 输入/输出
|
||||
|
||||
| 项目 | 说明 |
|
||||
|
||||
Reference in New Issue
Block a user