摘要:在 LongMemEval 等基准测试中,当前大模型在长程记忆任务上的性能下降达 30-60%。问题不在于模型不够大,而在于架构没有真正的“记忆”。祖龙(ZULONG)提出并落地了一套基于异构记忆图谱(Heterogeneous MemoryGraph)的记忆系统——将神经科学中的海马体工作机制工程化为可运行的代码。本文从技术实现角度,拆解五大核心模块:MemoryGraph 异构图谱、自主动态注意力、上下文压力监控、BFS 扩散激活与艾宾浩斯自然遗忘。
GitHub 开源地址:github.com/beautistart…
一、为什么传统的 Agent 记忆方案不够用?
传统 Agent 记忆方案存在三层结构性缺陷:
- 时间维度:窗口式的“最近 N 轮”机制,关键信息在第 N+1 轮就会被一句“嗯嗯”挤出上下文。
- 空间维度:对话记忆、知识库、用户画像各自孤立存储,跨类型关联无法自动建立。
- 检索维度:纯向量检索能匹配语义相似性,但无法理解“那个处理器”中的“那个”指向的是一万轮之前的指代对象。
这三个问题的本质是:传统方案缺乏一个统一的、支持联想的内存模型。
祖龙的回答是把一切信息——对话、任务、知识、人物、文件——全部装入一张异构有向图,并在这张图上运行生物启发的记忆算法。
系统定义:祖龙记忆系统是一个以异构记忆图谱为认知骨架、以自主动态注意力为信息聚焦机制、以上下文压力监控为稳态保障、以 BFS 扩散为联想激活路径、以艾宾浩斯自然遗忘为记忆代谢引擎的类人长程记忆架构。
二、核心模块一:异构记忆图谱(MemoryGraph)
MemoryGraph 是祖龙的统一记忆中枢。它的核心数据模型非常简单,但组合起来极具表达力。
2.1 数据模型:9 种节点 + 7 种边
# 节点定义(简化自源码 memory_graph.py)
@dataclass
class GraphNode:
node_id: str # 全局唯一,带类型前缀
node_type: NodeType # 9 种类型之一
label: str # 人类可读标签
activation: float # 当前激活水平 (0.0-1.0)
created_at: float
last_accessed: float
access_count: int
backend_ref: str # 后端来源指针
metadata: Dict[str, Any] # 包含多维标签与全文内容
9 种节点类型:TASK(任务)、DIALOGUE(对话)、KNOWLEDGE(知识实体)、EXPERIENCE(经验文档)、EPISODE(情景摘要)、FILE(文件引用)、CONCEPT(概念)、PERSON(人物信息)、DOCUMENT(文档)
7 种边类型:
| 边类型 | 语义 | 保护策略 |
|---|---|---|
| HIERARCHY | 父子层级关系(任务拆解) | 结构性,永不修剪 |
| DEPENDENCY | 数据/执行依赖 | 结构性,永不修剪 |
| REFERENCE | 跨类型显式引用 | 可衰减 |
| TEMPORAL | 时间序列关系 | 结构性,永不修剪 |
| SEMANTIC | 语义相似(embedding cosine > 0.7) | 可衰减 |
| CAUSAL | 因果关系 | 可衰减 |
| ASSOCIATION | 赫布学习自动产生 | 可衰减 |
结构边(HIERARCHY / DEPENDENCY / TEMPORAL)标记 protected=True,在突触修剪时永不移除;学习/语义边(SEMANTIC / CAUSAL / REFERENCE / ASSOCIATION)参与赫布增强与艾宾浩斯衰减,随时间和交互动态演化。
2.2 多维标签体系
MemoryGraph 的核心设计之一是三组正交标签,让每个记忆节点在图空间中拥有唯一的“活性坐标”:
| 标签维度 | 可选值 | 计算方式 | 用途 |
|---|---|---|---|
| 温度(Temperature) | HOT / WARM / COLD | 基于 last_accessed 实时计算 | 检索路由 |
| 重要度(Importance) | TRIVIAL → MUST_REMEMBER(6 级) | 写入时规则检测 + 动态提升 | 差异化衰减速率控制 |
| 时间跨度(TimeScope) | RECENT / NON_RECENT | 查询时动态计算(默认 30 分钟窗口) | 并行检索互斥过滤 |
2.3 赫布学习:自动建边
赫布学习引擎是 MemoryGraph 最具创新性的模块之一。引用神经科学中 Donald Hebb 在 1949 年提出的“神经元 A 反复参与神经元 B 的激活,则 A 到 B 的连接会增强”原理,祖龙将其实现为自动边创建机制:
if 两个节点的共激活计数 >= 3:
自动创建 ASSOCIATION 边
权重递增公式: new_weight = old_weight + 0.1 × (1 - old_weight)
# 渐近趋向 1.0,符合赫布学习强化效应
同时,后台异步计算节点摘要向量的余弦相似度,超过 0.7 阈值自动创建 SEMANTIC 边。这意味着 MemoryGraph 不是静态数据库,而是一张不断自我重新布线的有机记忆网络。
三、核心模块二:自主动态注意力(记忆图谱上的动态激活博弈)
范围澄清:祖龙在硬件感知层另有一套三层注意力调度(L0 感知层 → L1 过滤层 → L2 推理层),用于多模态事件过滤。记忆板块的“自主动态注意力”特指在 MemoryGraph 图上运行的动态激活计算机制——它决定哪些记忆节点被唤醒并注入 LLM 的上下文窗口。
3.1 一维线性注意力的结构性缺陷
传统 Agent 的注意力只考虑“时间远近”这一维:
# 传统实现
weight = base × 0.5^(turn_diff / 20) × mode_multiplier
在第 11 轮问到“它多少钱?”时,dialogue:10(时间近但无关)权重为 0.97,dialogue:1(时间远但定义了指代对象)权重仅为 0.35——结果无关信息被注入,关键信息被遗漏。
3.2 图注意力:graph_boost 补偿时间衰减
祖龙在时间衰减公式的基础上,引入 graph_boost 因子,实现结构信息对时间衰减的补偿:
# 祖龙的实现
dialogue:1 的新权重 = 1.0 × 0.35 × 2.0 = 0.70
dialogue:10 的新权重 = 1.0 × 0.97 × 1.0 = 0.97
两者权重差从 2.77 倍缩小到 1.39 倍,dialogue:1 因结构关联被有效“唤醒”并注入上下文。
核心思想:时间衰减是“遗忘”的模拟,graph_boost 是“联想”的模拟——二者博弈的结果构成了动态注意力机制,实时决定哪些记忆进入 LLM 的注意力窗口。这是注意力从一维线性序列向图结构扩散的范式转移。
3.3 注意力模式切换
在注意力窗口构建阶段,LLM 还可以根据任务进度和上下文压力,自主选择两种注意力模式:
- 全局注意(Global Attention):用于回顾整体目标与高层图结构,防止在长链任务中迷失方向。
- 局部注意(Local Attention):聚焦当前执行步骤的细节,保证专注度。
这种模式切换由上下文压力监控驱动(详见第五节),与动态注意力机制协同,共同实现最小充分上下文的构建。
四、核心模块三:上下文压力监控(CircuitBreaker 熔断)
4.1 为什么需要熔断?
长时间运行的 Agent 面临上下文膨胀、信息增益递减的严重风险。传统方案(如 LangChain / CrewAI / OpenDevin)普遍采用 max_iterations 的硬限制,本质上是“到点了就停”,对任务语义质量无感知。
祖龙的 CircuitBreaker 实现了 6 信号综合检测:
| 信号 | 检测方式 | 触发条件 |
|---|---|---|
| 重复调用 | 记录最近 20 次 function call 签名 | 相同调用连续出现 ≥ 3 次 |
| 模式循环 | 滑动窗口模式匹配 | 3-5 步循环出现 ≥ 2 周期 |
| 信息增益递减 | 连续两个上下文的 KL 散度 | < 阈值 |
| 上下文压力 | 上下文窗口利用率 | > 85% |
| 时间流逝 | 任务执行时长 | > 可配置上限 |
| 无进度空转 | 最近 N 步无文件写入/工具调用 | > 可配置步数 |
4.2 三级响应状态机
GREEN → YELLOW(注入警告 prompt,提示 LLM 调整行为)
→ RED(强制停止,序列化当前状态,优雅退出)
与 LangChain 等方案的对比:
| 方案 | 检测方式 |
|---|---|
| 祖龙 | 6 信号综合熔断 + 信息增益检测 |
| LangChain | max_iterations 硬限制 |
| CrewAI | max_iterations 硬限制 |
| OpenDevin | 时间/步数限制 |
4.3 上下文压力触发注意力切换
上下文压力信号直接监测 LLM 的令牌使用率。当利用率突破 85% 阈值时,系统触发注意力切换流程:
- 丢弃:当前任务已完成的无关细节和不再需要的临时关联。
- 重载:从 MemoryGraph 中按需检索下一步相关的节点(通过 BFS 扩散激活),以摘要或详情的分级形式加载。
- 模式选择:LLM 可根据任务进度自主选择全局注意或局部注意。
这个流程正是“无限上下文”在系统层面的实现路径——通过持续、智能的上下文替换,在逻辑上维系跨越数万轮对话的宏观连续上下文。
五、核心模块四:BFS 扩散激活(联想式检索)
5.1 双路径并行架构
| 路径 | 数据范围 | 检索方式 | 延迟 |
|---|---|---|---|
| 热路径(Hot) | 热窗口内节点(最近约 30 分钟) | BFS 广度优先遍历 + 关键词匹配 | < 50ms |
| 冷路径(Cold) | 全量历史节点 | FAISS IVF 索引 + BGE 嵌入 | < 200ms |
两条路径通过 asyncio.gather 并行执行,结果按激活度降序合并,取 Top-K 注入上下文。
5.2 BFS 扩散激活的核心算法
BFS 的实现逻辑:
# 核心思想(简化自源码)
def compute_activations(seed_nodes, max_depth=3):
# 从种子节点出发,加权 BFS 逐层扩散
# activation = current_activation × edge_weight × decay(0.5)
# 双向传播,max_depth=3
为什么用 BFS 而非 DFS? 在记忆图谱中,BFS 逐层扩散的特性恰好模拟人脑的“联想式回忆”——从一个概念出发,先激活最近关联节点,再逐层延伸到更远的关联网络。max_depth=3 的设置在百毫秒级延迟下可遍历 200-500 个关联节点,覆盖绝大多数语义关联路径。
5.3 分级读取策略
为避免上下文窗口膨胀,检索结果采用先摘要后详情的分级读取:
- 第一次检索返回节点的
summary字段(50-150 字)。 - LLM 判断哪些节点需要更多上下文。
- 按需读取完整
content字段。
5.4 FC 工具暴露设计
MemoryGraph 内部维护 53 个公开方法,但仅通过 7 个 FC(Function Calling)工具暴露给模型:
| FC 工具 | 用途 |
|---|---|
recall_memory | 记忆检索 |
read_memory_node | 节点详情读取 |
save_memory_note | 保存记忆 |
discover_related | 关联发现 |
focus_on_chain | 聚焦推理链 |
zulong_memory_search | MCP 项目级记忆搜索 |
zulong_graph_query | MCP 图谱查询 |
这种“宽接口、窄暴露”的设计有效降低了 LLM 的自由度,避免模型操作底层图结构时的不可控风险。
六、核心模块五:自然遗忘(艾宾浩斯衰减 + 突触修剪)
6.1 6 级重要度半衰期
祖龙将艾宾浩斯遗忘曲线精确映射为 6 级记忆半衰期:
| 重要度 | 半衰期 | 说明 |
|---|---|---|
| TRIVIAL | 6 小时 | 闲聊寒暄 |
| NORMAL | 24 小时 | 一般对话 |
| IDENTITY | 720 小时(30 天) | 用户姓名等身份信息 |
| FACT | 360 小时(15 天) | 知识性事实 |
| IMPORTANT | 168 小时(7 天) | 重要决策/偏好 |
| MUST_REMEMBER | ∞(无穷大) | 核心约定/使命 |
重要度采用只升不降策略——即使记忆因长时间未访问而衰减,其重要度标签不会自动降级,但支持用户或系统主动提升。
6.2 衰减算法
# 核心衰减公式
def decay_and_prune(node):
weight = node.weight × exp(-elapsed_hours × ln(2) / half_life)
# half_life 取决于节点的重要度级别
# elapsed_hours 自上次访问以来经过的小时数
这是对艾宾浩斯遗忘曲线的直接工程化,符合 R = R₀ × e^(-t/S) 的标准指数衰减模型。
6.3 突触修剪:二级机制
单纯的衰减并不等于遗忘。祖龙实现了二级修剪:
- 软遗忘:节点的
activation降至阈值以下时,不再参与热路径检索(BFS 遍历),但仍保留在 FAISS 向量索引中,冷路径可重新激活。 - 硬修剪:后台异步任务(每 30 分钟)检查总节点数是否超过容量上限(可配置,默认 100,000),按
activation × importance_boost综合评分排序,移除最低分节点——但protected=True的结构边所连接的核心节点不会被移除。
这个设计确保了 MemoryGraph 的容量可控——如同人脑的突触修剪,不重要的记忆被逐渐淡忘,为新的学习腾出空间。
七、系统层面:宏观无限上下文的实现路径
7.1 不是扩大窗口,而是智能替换
祖龙实现“无限上下文”的关键,并非无限制地扩展 LLM 的物理窗口,而是通过上下文压力监控 + 动态注意力切换,始终向模型注入当前任务所必需的最小充分上下文(Minimum Sufficient Context)。
三级存储架构为这种快速替换提供了毫秒级的数据获取能力:
| 层级 | 数据位置 | 访问延迟 | 覆盖范围 |
|---|---|---|---|
| 热记忆(Hot) | Python 内存(NetworkX DiGraph) | < 1ms | 最近 1 小时内访问的节点 |
| 温记忆(Warm) | LMDB 内存映射文件 | 1-10ms | 1 小时 - 24 小时访问的节点 |
| 冷记忆(Cold) | FAISS IVF 索引 + JSON 存储 | 10-200ms | 全量历史 |
7.2 跨天级任务挂起/恢复
祖龙支持完整的“暂停 → 关机 → 第二天开机 → 恢复执行”序列化流程:
- TaskGraph(任务状态树)序列化为 JSON
- MemoryGraph 激活状态序列化为 GraphML
- 恢复时重建 NetworkX DiGraph 并重放最近上下文
这使得**跨年级的长期项目(软件开发、学术研究、装修工程等)**可以在没有上下文损失的条件下持续演进。
八、与主流方案的全维对比
| 能力维度 | 祖龙 (ZULONG) | MemGPT | LangChain Memory | AutoGPT | Mem0 |
|---|---|---|---|---|---|
| 记忆结构 | 异构有向图(9 节点 + 7 边) | 分层 KV 存储 | 消息列表 + 摘要 | 向量存储 | 事实图谱 |
| 检索方式 | BFS 热路径 + FAISS 冷路径 | LLM 自主管理 | 线性扫描 | 纯向量检索 | 向量 + 图谱 |
| 联想能力 | ✅ 7 种边类型自动关联 | ❌ | ❌ | ❌ | 有限三元组 |
| 赫布学习 | ✅ 共激活自动建边 | ❌ | ❌ | ❌ | ❌ |
| 艾宾浩斯衰减 | ✅ 6 级半衰期 + 突触修剪 | ❌ | ❌ | 基于年龄 | ❌ |
| 上下文压力熔断 | ✅ 6 信号综合熔断 | ❌ | max_iterations | ❌ | ❌ |
| 动态无限上下文 | ✅ 注意力切换 + 最小充分上下文 | ❌ | ❌ | ❌ | ❌ |
| 跨天级挂起/恢复 | ✅ 完整状态序列化 | 部分支持 | ❌ | ❌ | ❌ |
| 热检索延迟 | < 50ms | ~100ms | N/A | ~200ms | ~50ms |
数据来源:祖龙 TSD v3.0 技术规格说明书(2026-05-11)及公开基准测试结果。
九、工程实现速览
| 组件 | 源文件 | 代码行数 | 核心技术栈 |
|---|---|---|---|
| MemoryGraph | zulong/memory/memory_graph.py | 2,784 行 | NetworkX + LMDB + GraphML |
| CircuitBreaker | zulong/l2/circuit_breaker.py | 800+ 行 | 6 信号状态机 |
| TaskGraph | zulong/l2/task_graph.py | 1,500+ 行 | 无限深度递归树 |
| InferenceEngine | zulong/l2/inference_engine.py | 5,700+ 行 | 两阶段推理 + 5 层防护 |
- 图引擎:Python NetworkX(内存)+ LMDB 持久化 + GraphML 序列化
- 向量检索:FAISS IVF 索引 + BGE 嵌入模型(BAAI)
- 并发模型:Python asyncio + 多线程锁细粒度控制
- 协议支持:MCP(Model Context Protocol),对外暴露 7 个记忆相关工具
- 总代码规模:82,000+ 行(Python 30,000+ + TypeScript/TSX 52,000+)
十、总结
祖龙记忆系统从架构层面解决了 AI Agent 的“遗忘”问题。它用 2784 行 Python 代码实现了:
- 异构记忆图谱:9 种节点 + 7 种边类型,统一所有记忆形态
- 赫布学习:共激活自动建边,模拟神经可塑性
- 自主动态注意力:时间衰减与 graph_boost 博弈,实现图上动态激活
- BFS 扩散激活:联想式记忆检索(热 < 50ms + 冷 < 200ms)
- 艾宾浩斯遗忘 + 突触修剪:6 级半衰期 + 二级修剪
- CircuitBreaker:6 信号综合熔断,超越传统硬限制
- 宏观无限上下文:通过注意力切换实现跨会话的逻辑上下文连续性
我们在 GitHub 开源了全部代码与文档(82K+ 行),搜索 zulong 即可找到仓库。欢迎 Star & PR。
延伸阅读
- 祖龙 GitHub 仓库:github.com/beautistart…
- 技术规格说明书 (TSD v3.0):
docs/architecture/technical-spec-v3.md - MemoryGraph 完全指南:
docs/memory_graph/ - 系统深度技术分析报告:
docs/architecture/system-overview.md - Packer, C. et al. (2023). MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560.
- Ebbinghaus, H. (1885). Über das Gedächtnis. Leipzig: Duncker & Humblot.