LLM记忆存储系统

memory-bank-mcp是一个基于Zettelkasten方法和认知遗忘机制的持久化记忆存储系统,为大型语言模型提供记忆持久层,支持语义相似性搜索和检索衰减模拟。

  • by AceOfWands
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 AceOfWands/memory-bank-mcp

使用说明

🧠 存储体mcp


🧩 标语

一个持久的、自组织的LLM记忆库——由Zettelkasten和认知遗忘提供支持。


🎯 目标

memory-bank-mcp 提供一个 内存持久层 对于使用 Zettelkasten记笔记法 作为其核心结构。
它允许LLM 存储、关联和检索知识片段 (“记忆笔记”)通过语义相似性和 可回收性衰减,模仿人类的长期记忆行为。


🏗️ 架构概述


⚙️ 主要特点

  • 🧠 基于Zettelkasten的结构 --通过语义或概念关系连接的笔记。
  • 🔗 链接类型 --因果、对比、例子、衍生概念、共享语境、对立。
  • 🧮 可回收性衰减 --模拟遗忘随时间呈指数衰减。
  • 🔍 相似性搜索 --使用pgvector进行嵌入 all-MiniLM-L6-v2.
  • 🧰 MCP端点接口 --通过服务器发送事件(SSE)进行简单高效的通信。
  • 🚀 Docker化部署 --准备去任何地方跑步。
  • 🔄 LLM生成的链接解释 --注释关系的自动原因生成。

🧠 记忆笔记结构

每 记忆笔记 表示一个原子知识单元——一个自包含的想法、观察或陈述——富含元数据,用于上下文检索和认知衰退管理。

字段 类型 描述
ID UUID 自动分配给每个音符的唯一标识符。
内容 String 注释的正文。
vectorContent float[384] 用于相似性搜索的嵌入向量(通过pgvector存储)。
关键词 列表 从内容中提取关键概念以提高召回率。
链接 列表 与相关注释的连接,每个注释都有一个类型和LLM生成的解释。
上下文 String 可选上下文信息(例如,来源、主题或情况)。
标签 列表 用于主题分组或过滤的用户定义标签
时间戳 String 注释的创建日期和时间。
上次访问时间 long 上次检索的Unix时间戳(秒)。
检索计数 long 此笔记被访问的次数,用于可检索性衰减。

链接类型

该系统中使用的链接类型的灵感来自 柯林斯与奎利安(1969) 和 柯林斯与洛夫特斯(1975),他将人类语义记忆建模为由以下关系连接的节点网络: 分层包容 (ISA)和 关联链接 相关概念之间。 在此基础上,我们定义了笔记之间的链接类型,以捕捉经典语义关系和概念推理的扩展,包括对比关系和对立关系。

  • 因果 --表示概念之间的因果关系,类似于柯林斯框架中的定向关联链接。
  • 对比 --表示音符之间的概念或事实差异。虽然在原始柯林斯模型中没有明确存在,但它可以被理解为一种 具有发散意义的联想关系,反映从上下文或经验中学到的语义区别。
  • 例子 --提供支持或澄清另一个注释的插图或实例。这与柯林斯的 的实例 或者将特定示例分层映射到类别。
  • 派生概念 --表示注释从另一个概念中抽象或概括,将柯林斯的层次结构中的属性继承思想扩展到派生或高阶概念。
  • 共享上下文 --链接是指发生在同一主题、情境或领域背景下的笔记,是捕捉经验中共现的关联链接的扩展。
  • 反对 --标记直接反驳或驳斥他人的注释。在柯林斯的原始模型中,负面或抑制性联系没有被定义;在这个系统中,反对派被表示为 具有负极性的特殊联想联系,编码概念之间的语义冲突。

每个链接都包含一个 来源, 目的地, 类型和a 解释,这是由配置的LLM自动生成的。 这使得网络既能保持经典语义记忆的结构特性,又能保持知识表示所需的更丰富的推理关系。


🧩 可检索性模型

可回收性的灵感来自 “长期记忆的两个组成部分” 以及控制哪些笔记随着时间的推移仍然可以访问。

$$ R(t,i)=e^{t\cdot\log(K)/(c_1\cdotc_2^{i-1})} $$

哪里:

  • 吨 =自上次检索以来的秒数
  • 我 =检索计数
  • K =第一个区间的目标概率
  • c₁ =第一个间隔的持续时间
  • c₂ =再学习系数

可检索性随着时间的推移而呈指数级衰减,无法访问,使系统能够 喜欢最近使用或经常回忆的笔记 同时逐步降低过时的可见性——这一过程充当 认知衰退机制 而不是简单的数据删除。

🔍 过滤器类型

可以应用两种过滤策略来控制哪些音符被认为是可检索的:

  1. 阈值滤波

    • 使用固定的最小可检索性值(例如0.25)。
    • 低于此阈值的注释将从结果集中排除。
    • 适用于确定性和一致性行为。
  2. 概率滤波器

    • 应用概率函数,其中可检索性较高的笔记在候选集中保留的机会按比例更大。
    • 引入可变性,更好地模拟人类回忆的不确定性。
    • 当你想要一种“自然遗忘”的行为而不是一种硬性的界限时,这是理想的。

两个过滤器都可以在配置文件中选择(retrievability-filter.type = threshold | probabilistic)这取决于所需的存储器保持动态。


🔌 MCP工具(服务器发送事件)

MCP接口通过以下方式提供内存操作 春季AI 工具。

工具名称 描述 输入 输出
get_memory_notes_by_ids 通过UUID获取内存笔记。 UUID列表 列表 MemoryNote 物体
search_memory_notes 给定上下文字符串搜索相关内存笔记。 上下文(字符串) 使用可检索性过滤对笔记进行排序
add_memory_note 添加具有给定内容的新记忆笔记。 内容(字符串) 已创建 MemoryNote

协议: 服务器发送事件(SSE)


🧱 依赖项

  • Java 24
  • 弹簧靴: 3.x
  • 春季AI: 用于MCP协议支持
  • PostgreSQL 随着 pg向量
  • Langchain4j: 用于LLM链路生成和集成

🐳 部署(Docker)

构建并运行:

docker build -t memory-bank-mcp .
docker run -p 8080:8080 memory-bank-mcp

您还可以通过MCP配置将其作为内存后端集成到任何LLM系统中。


⚙️ 提供自定义配置

您可以通过挂载自定义项来覆盖任何默认设置 application.properties 运行时文件。 只需将配置文件放置在与Docker命令相同的目录中,并将其挂载到容器的 /app/config 路径:

docker run \
  -p 8080:8080 \
  -v $(pwd)/application.properties:/app/config/application.properties \
  memory-bank-mcp

⚙️ 配置

memory-bank-mcp 主要通过以下方式配置 环境变量,或者通过定制 application.properties 文件放置在 与可执行JAR相同的目录.


🌍 环境变量

环境变量 描述 默认值
OPENAI_API密钥 用于生成链接解释的LLM的API密钥。 –
OPENAI_MODEL_NAME OpenAI(或兼容提供商)的模型名称。 gpt-3.5-turbo
打开温度 LLM输出的采样温度。 0.7
OPENAI_MAX令牌 每个LLM响应的最大令牌计数。 512
OPENAI_超时 请求LLM操作超时。 30s
Postgres URL PostgreSQL的JDBC连接字符串(启用了pgvector)。 jdbc:postgresql://localhost:5432/postgres
Postgres用户名: 数据库用户名。 postgres
Postgres密码: 数据库密码。 password
POSTGRES/DDL_AUTO Hibernate的模式管理模式。 update
日志级别 根记录级别。 info

🧠 可检索性过滤器配置

可检索性过滤器可以通过创建 application.properties 文件与JAR位于同一文件夹中。

配置类概述

筛选器配置由初始化 RetrievabilityFilterInitConfiguration 类,它会根据以下内容自动选择正确的过滤器类型:

属性 描述 默认值
可检索性过滤器类型 要使用的过滤器类型: threshold 或 probabilistic. threshold
可检索性过滤器设置已启用 启用或禁用检索机制。 true
可检索性过滤器设置目标召回概率 预期在第一个间隔后仍可回忆的知识部分。 0.95
可检索性过滤器.设置.第一区间长度 第一个间隔的持续时间(秒)。 604800 (7天)
过滤器的可检索性、设置、学习率 控制每次检索后间隔扩展程度的因素。 1.5

筛选器特定设置

筛选器类型 附加属性 描述 默认值
阈值滤波 retrievability-filter.settings.threshold 在结果中包含注释所需的最小可检索性值(0-1)。 0.0

行为总结

  • 阈值过滤器 → 仅保留可检索性超过固定阈值的笔记。
  • 概率滤波器 → 注释的可检索性越高,其在结果集中保留的概率就越高。

该机制提供了一个可配置的 认知衰退系统,使内存能够自然地向相关性发展,而不是充当静态数据存储。


🚗 未来路线图

  • []可配置的嵌入模型
  • []对Ollama的支持
  • []添加可选缓存
  • []定期重组链接(遗忘笔记收集器)
  • []上下文感知合并(合并或重构重叠的注释)

📜 许可证

该项目根据 Apache许可证2.0.