持久化记忆知识图谱服务

提供基于SQLite的知识图谱持久化记忆功能,支持语义搜索和智能上下文检索。

  • by iAchilles
  • JavaScript
  • 本地部署
  • 13 星标
  • 更新于
在 GitHub 查看 iachilles/memento

使用说明

纪念品

有些记忆最好保存下来。

通过基于SQLite的知识图提供持久内存功能,该知识图使用BGE-M3嵌入存储实体、观察结果和语义搜索关系,以实现跨对话的智能上下文检索。

特性

  • 语义向量搜索(sqlite-vec/pgvector,1024d)
  • 离线嵌入模型(bge-m3)
  • 具有SQLite和PostgreSQL后端的模块化存储库层
  • 基于时间、流行度、情境和重要性因素的增强相关性评分
  • 结构化图形 entities, observations,以及 relations
  • 轻松与Claude Desktop集成(通过MCP)

先决条件

系统SQLite版本检查

Memento需要SQLite 3.38+。大多数macOS和Linux发行版都会发布 sqlite3 开箱即用,但请仔细检查它是否存在并且足够新:

sqlite3 --version       # should print a version string, e.g. 3.46.0

重要提示: 此检查只是为了验证SQLite是否安装在您的系统上。Memento不使用sqlite3 CLI进行操作,它在内部使用Node.js sqlite3模块。

如果您看到“找不到命令”(或您的版本早于3.38),请安装SQLite:

平台 安装命令
macOS(自制) brew install sqlite
Debian/Ubuntu sudo apt update && sudo apt install sqlite3

配置

Memento现在支持可插拔存储后端。配置受控 完全通过环境变量,因此很容易嵌入MCP中 工作流程。

变量 描述
MEMORY_DB_DRIVER 数据库后端的可选选择器。默认为 sqlite。设置为 postgres 启用PostgreSQL管理器。
MEMORY_DB_PATH SQLite数据库文件的文件系统路径(仅在驱动程序为 sqlite).
SQLITE_VEC_PATH 通往预构建的可选绝对路径 sqlite-vec 扩展共享库。
MEMORY_DB_DSN / DATABASE_URL PostgreSQL连接字符串被消耗 pg 客户。
PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE 单个PostgreSQL连接参数。当没有提供DSN时使用。
PGSSLMODE 当设置为 require,SSL将通过启用 rejectUnauthorized: false.
MEMENTO_WRITE_HOOK_PATH JSON Lines文件的可选路径。设置后,Memento会在每次成功的图突变后附加一个事件。

写钩子事件

集 MEMENTO_WRITE_HOOK_PATH 当另一个进程需要对内存写入做出反应而不轮询整个图时:

MEMENTO_WRITE_HOOK_PATH=/tmp/memento-events.jsonl memento

每一行都是一个带有ISO的JSON对象 timestamp一 operation,以及更改后的实体/关系有效载荷。例子:

{"timestamp":"2026-05-05T16:33:16.619Z","operation":"create_entity","entity":{"name":"Hook Test","entityType":"test"}}

支持的操作包括 create_entity, add_observations, create_relation, delete_entities, delete_relations, delete_observations,以及 set_importance。仅对实际删除的记录发出删除事件。

钩子写入失败会记录到stderr中,但不会使已经成功的图变异失败。需要严格对账的消费者应将挂钩与偶尔对账相结合 read_graph 或有针对性 open_nodes 检查。

PostgreSQL注释

  • PostgreSQL管理器要求 pgvector 扩展。它会自动初始化为 CREATE EXTENSION IF NOT EXISTS vector.

克劳德桌面:

{
  "mcpServers": {
    "memory": {
      "description": "Custom memory backed by SQLite + vec + FTS5",
      "command": "npx",
      "args": [
        "@iachilles/memento@latest"
      ],
      "env": {
        "MEMORY_DB_PATH": "/Path/To/Your/memory.db"
      },
      "options": {
        "autoStart": true,
        "restartOnCrash": true
      }
    }
  }
}

故障排除

sqlite-vec扩展问题

重要提示: Memento通过Node.js以编程方式加载sqlite-vec扩展,而不是通过sqlite3 CLI。

常见误解:

  • ❌ 为sqlite3 CLI创建shell别名不会影响Memento
  • ❌ 在sqlite3 CLI中加载扩展对Memento没有帮助
  • ✅ 使用npm安装的sqlite-vec或set SQLITE_VEC_PATH 如果自动检测失败,则环境变量。这应该指向Node.js兼容的扩展版本,通常可以在您的 node_modules 目录。

如果自动向量加载失败:

# Find the Node.js-compatible vec extension
find node_modules -name "vec0.dylib"  # macOS
find node_modules -name "vec0.so"     # Linux

# Use it via environment variable
SQLITE_VEC_PATH="/full/path/to/node_modules/sqlite-vec-darwin-x64/vec0.dylib" memento

API概述

此服务器公开以下MCP工具:

  • create_entities
  • create_relations
  • add_observations
  • delete_entities
  • delete_relations
  • delete_observations
  • read_graph
  • search_nodes
  • open_nodes
  • set_importance -设置重要性级别(关键/重要/正常/临时/已弃用)

当 MEMENTO_WRITE_HOOK_PATH 配置后,变异工具还为下游消费者附加JSONL写入事件。

LLM应该知道的用于有效内存处理的指令集示例(请参阅memory_PROTOCOL.md)

嵌入模型

此项目使用 @xenova/变压器,量化版本为 bge-m3,在Node.js中完全离线运行。

许可证

麻省理工学院