Files
NextAgent/docs/memory-subnet.md
root 3345394bf5 docs: fix architecture boundaries - routing=unique input, LLM=unique output, memory=autonomous
Key corrections:
- Routing subnet is the ONLY external input path; all images/text/voice must pass through it
- LLM subnet is the ONLY external output path; natural language goes directly to user
- Core is a purely internal layer, not directly exposed to users
- Memory subnet is autonomous: Core only passes query tensors + new information tensors;
  how to update/delete/modify is entirely decided by memory subnet
- Routing subnet uses sliding window mechanism: instant label tensor generation → Core,
  then after the round ends, Core schedules routing to process remaining raw data
- Updated all ASCII diagrams, Mermaid diagrams, pseudo-code, and data flow charts
- Added border rules table to all relevant docs
2026-06-01 09:38:33 +08:00

14 KiB
Raw Blame History

记忆子网 — 训练目标与训练计划

概述

记忆子网类比人脑的海马体与皮层,负责长期记忆的存储、检索和管理。采用三级存储架构:图数据库(Neo4j)存储结构化知识图谱、向量数据库存储语义向量、文本存储记录会话历史。

图数据库记忆设计参考了 TrulyMEM-TrueHumanMEM 项目。

架构定位

记忆子网是整个 NextAgent 架构中唯一与记忆内容交互的模块。Core 不自作主张处理记忆——只负责将查询张量和新信息张量传递过来,如何更新、删除、修改由记忆子网自行完成。

         Core 传过来的两样东西
               │
     ┌─────────┴────────────┐
     │                      │
  查询张量                新信息张量
  (含意图/种子实体)       (含本轮标签/结果)
     │                      │
     └─────────┬────────────┘
               │
               ▼
┌───────────────────────────────────────────────────────────┐
│                    记忆子网(自治)                          │
│                                                           │
│  ┌────────────────────────────────────────────────────┐   │
│  │         记忆管理器 (Memory Manager)                  │   │
│  │  自行决定:                                         │   │
│  │  → 如何解析查询 → 走图DB/向量DB/文本                 │   │
│  │  → 如何写入新信息 → MERGE/CREATE/更新                 │   │
│  │  → 如何更新已有记忆 → 增量/覆盖/合并                  │   │
│  │  → 如何删除 → 软删除/硬删除/归档                      │   │
│  │  → 如何关联 → 链路推理/图谱推理                       │   │
│  └──────┬────────────┬──────────────┬─────────────────┘   │
│         │            │              │                       │
│         ▼            ▼              ▼                       │
│  ┌──────────┐ ┌────────────┐ ┌────────────────┐           │
│  │  图数据库  │ │ 向量数据库  │ │   文本存储       │           │
│  │ (Neo4j)   │ │(Milvus/FAISS)│ │ (日志/会话归档)  │           │
│  │          │ │            │ │                │           │
│  │ Entity   │ │ 语义向量    │ │ 原始对话记录     │           │
│  │ RELATES  │ │ 索引        │ │ 时间线索引       │           │
│  │ Cypher   │ │ 相似度搜索  │ │ 压缩归档         │           │
│  └──────────┘ └────────────┘ └────────────────┘           │
│                                                           │
│  ┌────────────────────────────────────────────────────┐   │
│  │      张量编/解码层                                   │   │
│  │  输入:查询张量 + 新信息张量(来自 Core)              │   │
│  │  输出:记忆结果张量(返回给 Core)                     │   │
│  └────────────────────────────────────────────────────┘   │
└───────────────────────────────────────────────────────────┘

三级存储架构

第一级:图数据库(Neo4j)— 温区

存储结构化知识,支持关系查询和推理。

参考 TrulyMEM 的图数据库设计:

节点 (Entity) 类型

节点类型 Node Label 属性 说明
人设节点 PersonaNode name, type, created_at AI 角色、性格、语气
任务节点 TaskNode task_id, description, state, created_at 任务概述与状态
状态节点 StateNode name, value, timestamp 任务或实体的状态
信息节点 InfoNode name, content, source, confidence 具体信息
实体节点 EntityNode name, type, mention_count, updated_at 通用实体

边 (RELATES) 类型

边类型 说明 示例
HAS_PERSONA 人设关联 AI → PersonaNode
NEXT_TASK 任务时间链 TaskNode → TaskNode
HAS_STATE 状态关联 TaskNode → StateNode
CONTAINS_INFO 信息包含 TaskNode → InfoNode
RELATES_TO 通用关联 EntityNode → EntityNode

索引设计

// 实体约束
CREATE CONSTRAINT entity_name_constraint IF NOT EXISTS FOR (e:Entity) REQUIRE e.name IS UNIQUE
CREATE CONSTRAINT session_id_constraint IF NOT EXISTS FOR (s:Session) REQUIRE s.session_id IS UNIQUE

// 关系索引
CREATE INDEX rel_created_at IF NOT EXISTS FOR ()-[r:RELATES]-() ON r.created_at
CREATE INDEX rel_type IF NOT EXISTS FOR ()-[r:RELATES]-() ON r.type
CREATE INDEX rel_status IF NOT EXISTS FOR ()-[r:RELATES]-() ON r.status
CREATE INDEX rel_date_bucket IF NOT EXISTS FOR ()-[r:RELATES]-() ON r.date_bucket

// 实体索引
CREATE INDEX entity_type IF NOT EXISTS FOR (e:Entity) ON e.type
CREATE INDEX entity_mention_count IF NOT EXISTS FOR (e:Entity) ON e.mention_count

检索示例

-- 关键字检索
MATCH (e:Entity)-[r:RELATES]->(t:Entity)
WHERE r.status = 'active' 
  AND (toLower(e.name) CONTAINS '关键词' OR toLower(t.name) CONTAINS '关键词')
RETURN e, r, t
ORDER BY r.created_at DESC
LIMIT 30

-- 会话隔离检索
MATCH (e:Entity)-[r:RELATES]->(t:Entity)
WHERE r.session_id = $session_id AND r.status = 'active'
RETURN e, r, t

-- 热点实体查询
MATCH (e:Entity)
RETURN e.name, e.mention_count, e.type
ORDER BY e.mention_count DESC
LIMIT 10

第二级:向量数据库(Milvus / FAISS)— 冷区

存储语义向量,支持相似度检索。

项目 说明
索引类型 IVF_FLAT / HNSW
向量维度 768 (匹配标准张量维度)
度量方式 Cosine Similarity
分片策略 按时间桶 + 会话 ID 分片

第三级:文本存储 — 冷区

存储完整的原始对话记录和会话日志。

项目 说明
存储格式 JSONL / 压缩归档
索引 时间线索引 + 会话 ID 索引
生命周期 30天后归档,90天后可清理
用途 审计、重建、深度分析

输入/输出

项目 说明
输入1 查询张量(来自 Core,含查询意图、种子实体、上下文)
输入2 新信息张量(来自 Core,含本轮标签和子网结果;不含具体写入指令)
输出 memory_result 张量(包含检索到的实体/关系/向量结果)
自治 记忆子网自行决定如何写入、更新、删除、修改记忆

训练目标

目标 1:图数据库检索准确率

指标 目标值 说明
检索召回率 (Recall@10) ≥ 90% 对于已知关系的检索
检索精确率 (Precision@10) ≥ 85% 检索结果的相关性
关系推理准确率 ≥ 80% 通过图路径推理发现隐含关系

目标 2:向量检索能力

指标 目标值 说明
语义检索 Recall@10 ≥ 85% 向量相似度检索
跨模态检索准确率 ≥ 80% 文本→图像/语音的跨模态检索
索引构建时间 ≤ 100ms/1000条 向量索引增量更新

目标 3:记忆关联发现

指标 目标值 说明
关联发现 F1 ≥ 75% 自动发现实体间的隐含关系
记忆合并准确率 ≥ 90% 重复实体的合并不引入错误
因果链路发现 ≥ 70% 从事件序列中发现因果关系

目标 4:工作记忆管理

指标 目标值 说明
上下文切换延迟 ≤ 10ms 工作记忆的热区缓存命中率
工作记忆容量 4096 tokens 每轮有效上下文
缓存命中率 ≥ 80% 热区缓存有效减少冷区访问

训练计划

阶段 1:图数据库操作基座(无训练)

目标:构建 Neo4j 图数据库操作层,建立基础检索和写入能力

实现:

  • 实现 Cypher 查询模板系统
  • 实现 MERGE / CREATE 写入逻辑
  • 实现会话隔离和索引管理
  • 实现软删除和归档机制

参考 TrulyMEM 的 graph_client.py 实现:

class Neo4jGraph:
    def recall(self, query_intent, seed_entities, depth=2):
        """检索记忆 - Cypher 驱动"""
        # 关键词解析 → 构造 WHERE 子句
        # 支持深度扩展(depth 参数)
        # 返回实体列表 + 关系列表
    
    def commit(self, triplets, entity_types, temporal_tag):
        """写入记忆 - MERGE + CREATE"""
        # 逐条写入三元组
        # 自动维护 mention_count
        # 记录会话和轮次信息
    
    def purge(self, criteria, mode="soft", new_relation=None):
        """删除/修正记忆"""
        # soft: 标记 status='deleted'
        # supersede: 标记旧关系 + 创建新关系

阶段 2:图神经网络关联学习

目标:训练 GNN 模型进行知识关联推理

技术路线:

  • 模型:R-GCN (Relational Graph Convolutional Network) 或 CompGCN
  • 或 使用 GraphSAGE + 关系注意力

训练步骤:

  1. 构建知识图谱训练集:从现有图数据库中采样子图
  2. 链接预测任务 (Link Prediction):预测两个实体之间是否存在关系
  3. 实体分类任务 (Entity Classification):预测实体类型
  4. 损失函数:交叉熵 + 对比损失 (margin-based ranking loss)
  5. 训练 200 epochs,使用 Adam 优化器,learning rate 1e-3
  6. 评估:在验证集上计算 Hits@K 和 MRR

阶段 3:Memory-Augmented Neural Networks (MANN)

目标:训练记忆增强网络,实现高效的读写操作

技术路线:

  • 模型:Differentiable Neural Computer (DNC) 或 Neural Turing Machine (NTM)
  • 外部记忆矩阵 + 读写头

训练步骤:

  1. 合成任务训练:copy task, repeat copy, associative recall
  2. 问答任务训练:bAbI 数据集,测试记忆存取能力
  3. 长序列建模:训练在长上下文中准确索引信息
  4. 添加注意力读写机制
  5. 损失函数:任务损失 + 记忆使用正则化

阶段 4:引用-拉取策略训练

目标:训练决定何时拉取(从冷区)、何时缓存的策略

技术路线:

  • 强化学习:基于记忆访问模式的 RL
  • 状态:当前任务类型、历史访问模式、缓存状态
  • 动作:拉取/缓存/不操作
  • 奖励:访问延迟降低 + 缓存命中率

训练步骤:

  1. 构建模拟环境:包含热区缓存、图数据库、向量数据库
  2. 收集真实交互日志作为训练数据
  3. 训练策略网络(Policy Network)
  4. 使用 PPO 算法优化策略
  5. 评估:缓存命中率、平均访问延迟

阶段 5:端到端联合训练

目标:将以上阶段整合,与路由子网、逻辑子网联合训练

训练步骤:

  1. 固定路由子网的输出作为记忆子网的查询输入
  2. 使用多任务训练:图检索 + 向量检索 + 关联发现
  3. 损失函数:L = L_retrieval + α * L_link + β * L_cache + γ * L_reg
  4. 与 Core 的启发式调度策略联合优化

评估指标体系

离线评估

指标 计算方法 目标
图检索 Recall@10 检索结果中包含正确答案的比例 ≥ 90%
向量检索 Recall@10 按语义相似度排序的召回率 ≥ 85%
关联推理 MRR Mean Reciprocal Rank ≥ 0.7
记忆写入一致性 写入后检索与原始一致 ≥ 99%
缓存命中率 热区缓存直接命中的比例 ≥ 80%

在线评估

指标 说明
记忆检索延迟 Core 发出查询到收到结果的时间
记忆更新延迟 Core 发出更新到写入完成的时间
信息一致性 同一信息多次检索结果是否一致
记忆容量 在不显著降低性能前提下的最大存储量

新信息张量格式

Core 传递给记忆子网的新信息张量(Core 不发送

{
  "header": {
    "source": "core",
    "target": "memory",
    "tensor_type": "memory_update",
    "trace_id": "trace-uuid",
    "timestamp": 1717200000
  },
  "payload": {
    "entities": [
      {"name": "用户_张三", "type": "PersonaNode", "attributes": {"preference": "摇滚音乐"}},
      {"name": "项目_NextAgent", "type": "EntityNode", "attributes": {}}
    ],
    "relations": [
      {"subject": "用户_张三", "relation": "HAS_PERSONA", "object": "喜欢_摇滚", "confidence": 0.95},
      {"subject": "用户_张三", "relation": "RELATES_TO", "object": "项目_NextAgent", "confidence": 0.9}
    ],
    "session_id": "session-20260601-xxxx",
    "turn_id": 42,
    "metadata": {
      "source_subnets": ["routing", "logic_trace", "core"],
      "aggregation_strategy": "merge"
    }
  },
  "metadata": {
    "entity_count": 3,
    "relation_count": 2,
    "upsert_mode": "merge"
  }
}