使用说明
🧠 存储体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₂ =再学习系数
可检索性随着时间的推移而呈指数级衰减,无法访问,使系统能够 喜欢最近使用或经常回忆的笔记 同时逐步降低过时的可见性——这一过程充当 认知衰退机制 而不是简单的数据删除。
🔍 过滤器类型
可以应用两种过滤策略来控制哪些音符被认为是可检索的:
-
阈值滤波
- 使用固定的最小可检索性值(例如0.25)。
- 低于此阈值的注释将从结果集中排除。
- 适用于确定性和一致性行为。
-
概率滤波器
- 应用概率函数,其中可检索性较高的笔记在候选集中保留的机会按比例更大。
- 引入可变性,更好地模拟人类回忆的不确定性。
- 当你想要一种“自然遗忘”的行为而不是一种硬性的界限时,这是理想的。
两个过滤器都可以在配置文件中选择(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.