轻量级内存服务器

sabmemory是一款轻量级的Rust MCP内存服务器,采用SQLite FTS5全文搜索代替向量嵌入,实现低资源消耗下的快速相关搜索,适用于需要高效内存管理的场景。

  • by Sablinova
  • Rust
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 Sablinova/sabmemory

使用说明

sabmemory

轻量级Rust MCP内存服务器。接近零的RAM替代了基于嵌入式的存储系统。

~6 MB RAM 在生产中。单个4.1 MB静态二进制文件。没有Python,没有Node.js,没有ML运行时,没有外部依赖。内置网络仪表板,具有知识图可视化功能。

为什么是sabmemory?

每个其他MCP内存服务器都需要大量的运行时(Python/Node.js)、用于嵌入的ML模型或云API调用。sabmemory使用SQLite FTS5全文搜索而不是向量嵌入——以资源成本的一小部分实现快速、相关的搜索。

与其他MCP内存服务器的比较

概述

服务器 语言 星级 许可证 搜索方法 RAM使用率 安装大小
sabmemory 锈 FTS5 + BM25 ~6 MB 4.1 MB二进制文件
mcp存储器服务 Python 1.5k Apache 2.0 BM25+ONNX矢量混合 ~500-850 MB ~400 MB(型号+部署)
健忘的 Python 190 MIT FastEmbed+交叉编码器重新排序 ~300-500 MB ~200 MB(型号+显示器)
mem0 Python/TS 49.1k Apache 2.0 LLM驱动的提取+向量 ~ 300-500 MB pip安装+LLM API
基本内存 Python 2.6k MIT FastEmbed矢量搜索 约200-400 MB pip安装(约200 MB)
@模型上下文协议/服务器内存 TypeScript 80.5k* MIT 实体图遍历 ~50-80 MB npm安装
超级存储器 TypeScript 16.8k MIT 混合RAG(云) 云托管 SaaS

*星号显示的是modelcontextprotocol/servers monorepo,而不是内存包。

特性

功能 sabmemory mcp内存服务 健忘 mem0 基本内存 @mcp/memory 超级内存
MCP工具 49 15+(REST+MCP) 42(3元) ~10 ~10 4 云API
知识图谱 是 是(键入边) 是 否 否 是(三元组) 否
实体系统 是(键入,AKA) 否 是 否 否 有(简单) 否
内存版本控制 是(链) 否 否 不 否 是
自动链接 是(FTS5) 否 是(矢量) 否
自动忘记/过期 是 是(衰变) 否 否 不 是
代币预算 是 否 是 不 否 否 不
项目 是 否 是 不 否 否 不
文档 是 否 是 不是 是(Markdown) 否 否
代码伪影 是 否 是 不 否 否 不
用户配置文件 是(自动生成) 否 否 是 否 不 否
Web仪表板 是(3D WebGL) 是 否 是(OpenMemory) 否 否 有(SaaS)
多用户 单用户(本地) 是(身份验证) 是的(多租户) 是 单用户 单租户 是(SaaS)
集装箱范围界定 是 否 否 无 无 否 不

运行时和依赖关系

特性 sabmemory mcp内存服务 健忘 mem0 基本内存 @mcp/memory 超级内存
运行时 无(静态二进制) Python 3.10+ Python 3.12+ Python 3.8+ Python 3.11+ Node.js 18+ 云
外部服务 无 无(ONNX本地) 无(FastEmbed本地) OpenAI API密钥 无 没有 云API
需要ML模型 不 是(MiniLM-L6-v2) 是(bge-small-en) 是[通过LLM API]] 是[快速嵌入] 否 是[云]
存储后端 SQLite(捆绑) SQLite vec SQLite或PostgreSQL Qdrant/ChromaDB/自定义 SQLite+Markdown JSONL文件 云
Docker支持 不需要 是 是 否 否 不适用
安装命令 cargo build pip install uvx forgetful-ai pip install mem0ai pip install basic-memory npx 注册
需要配置 零配置 .env 推荐 Zero-config 需要LLM API密钥 Zero-connfig Zero-cononfig 需要帐户
离线操作 是 是 是 不 (需要LLM API) 是 是 不
自托管 是 是 有 是 对 有 有

搜索质量权衡

sabmemory以语义相似性换取资源效率。FTS5+BM25执行关键字感知排名搜索,而不是意义感知向量搜索。在实践中,这对于MCP内存用例来说效果很好,因为:

  1. 记忆是简短的原子笔记,带有明确的关键字和标签
  2. 编写内存的代理与搜索内存的代理是同一个代理——它使用一致的术语
  3. 无论词汇匹配如何,重要性得分提升都会显示最相关的结果
  4. 通过FTS5相似性自动链接在写入时捕获相关概念

对于需要真正语义搜索的用例(在搜索“car”时找到“automotive”),基于嵌入的服务器(如mcp内存服务或Forgetful)更合适。

在2 GB VPS(Ubuntu 24.04)上测量。 sabmemory RSS:6.5 MB Ps正在使用中,包含19个内存、2个实体、2个项目和1个文档。空闲实例降至约2 MB。

特性

  • 49个本地MCP工具 --内存、实体、项目、文档、代码工件、关系、配置文件、版本控制
  • FTS5全文搜索 BM25排名+重要性得分提升
  • 内存版本控制 --具有关系类型(更新/扩展/派生)的版本链,灵感来自 超级存储器
  • 自动遗忘 --set forget_after 自动到期日期;软遗忘与过时的区别
  • 集装箱范围界定 — container_tag 命名空间隔离字段
  • 自动链接 --新存储器通过FTS5自动链接到类似的现有存储器
  • 代币预算搜索 --结果受可配置令牌预算的限制(默认8000)
  • 知识图谱 --具有类型化关系、双向内存链接的实体
  • 文档和代码工件 --存储长格式内容和可重用代码片段
  • 用户配置文件 --从高重要性记忆(静态+动态事实)自动生成
  • 内置迁移 --从导入数据 健忘 数据库

安装

来源

git clone https://github.com/Sablinova/sabmemory.git
cd sabmemory
cargo build --release
cp target/release/sabmemory ~/.local/bin/

需求

  • Rust 1.70+(使用2021版)
  • 没有其他依赖关系——SQLite是通过rusqlite捆绑的

用法

MCP服务器(stdio)

sabmemory serve
# or just:
sabmemory

服务器使用MCP协议通过stdin/stdout进行通信。在MCP客户端中配置它。

OpenCode配置

{
  "mcp": {
    "sabmemory": {
      "type": "local",
      "command": ["/path/to/sabmemory", "serve"],
      "enabled": true
    }
  }
}

从健忘的ai迁移

sabmemory migrate --from ~/.local/share/forgetful/forgetful.db

迁移:项目、实体、内存、文档、代码工件、关系和所有关联。FTS索引在迁移后会自动重建。

数据存储

数据库: ~/.local/share/sabmemory/sabmemory.db

数据库在首次运行时自动创建。所有数据都存储在一个带有FTS5虚拟表的SQLite文件中,用于全文搜索。

建筑

搜索策略

  1. 自然语言查询被标记为FTS5搜索词
  2. FTS5 MATCH与BM25排名分数相关性
  3. 帖子过滤器:过时、遗忘、过期、项目、标签、容器、min_importance
  4. 重要性得分提升应用于最终排名
  5. 代币预算执行限制了结果大小
  6. 链接内存扩展增加了链接知识

内存模型

记忆遵循Zettelkasten(原子音符)原则:

  • 标题:简短,可搜索(最多200个字符)
  • 内容:单个概念(最多2000个字符)
  • 上下文:为什么这很重要(最多500个字符)
  • 关键词:用于搜索聚类(最多10个)
  • 标签:用于分类(最多10个)
  • 重要性:1-10分影响搜索排名和个人资料生成

版本控制(受超级内存启发)

记忆可以通过以下方式形成版本链 parent_memory_id:

  • 更新:新版本与父版本相矛盾/替换父版本
  • 扩展:新版本丰富了父版本
  • 源自:系统推断关系

只有最新版本(is_latest=true)出现在搜索结果中。

自动忘记

集 forget_after (ISO 8601日期)存储在内存中。在每次查询之前,过期的内存会自动标记为遗忘。被遗忘的记忆被排除在搜索之外,但保留以供审计。

工具参考

记忆工具(13)

工具 说明
create_memory 使用自动链接创建原子内存
get_memory 获取所有关联的内存
update_memory PATCH更新字段
delete_memory 永久删除
query_memory FTS5搜索与BM25+重要性提升
get_recent 最近更新的记忆
link_memories 创建双向链接
unlink_memories 删除链接
mark_obsolete 带有审计跟踪的软删除
forget_memory 软遗忘(不同于过时)
search_similar 查找文本相似的记忆
create_version 创建版本更新
get_version_chain 获取完整版本历史记录

实体工具(15)

工具 说明
create_entity 创建实体(人、组织、设备、概念)
get_entity 获取实体详细信息
update_entity 补丁更新
delete_entity 删除所有关联
list_entities 列出/筛选实体
search_entities 按姓名/别名搜索FTS
get_entity_memories 实体的内存ID
link_entity_memory 将实体链接到内存
unlink_entity_memory 删除实体内存链接
link_entity_project 将实体链接到项目
unlink_entity_project 删除实体项目链接
create_relationship 类型化定向关系
get_relationships 获取实体关系
update_relationship 更新关系
delete_relationship 删除关系

项目工具(5)

工具 说明
create_project 创建项目容器
get_project 获取具有内存计数的项目
update_project 补丁更新
delete_project 删除(保留相关记忆)
list_projects 列出/筛选项目

文档工具(5)

工具 说明
create_document 存储长表单内容
get_document 获取完整内容
update_document 补丁更新
delete_document 删除
list_documents 列表/筛选器

代码工件工具(5)

工具 说明
create_code_artifact 存储可重用代码
get_code_artifact 获取工件
update_code_artifact 补丁更新
delete_code_artifact 删除
list_code_artifacts 列表/筛选器

用户和配置文件工具(4)

工具 说明
get_user 获取用户信息
update_user_notes 更新用户笔记
get_profile 自动生成的配置文件
refresh_profile 重新生成配置文件

元工具(2)

工具 说明
list_tools 按类别列出所有工具
tool_info 详细的工具信息+模式

Web仪表板

sabmemory包括一个内置的web仪表板,用于可视化您的知识图、浏览记忆和探索实体/项目/文档。

运行仪表板

sabmemory dashboard --port 3080

仪表板在 http://localhost:3080 并提供:

  • 知识图谱 --所有记忆、实体及其连接的交互式Three.js WebGL 3D可视化
  • 内存浏览器 --包含重要性、标签和元数据的所有记忆的可搜索列表
  • 实体资源管理器 --查看实体、其类型、别名和关系
  • 项目视图 --具有相关内存计数的项目
  • 文档视图 --存储的长格式文档
  • 搜索 --在所有记忆中进行全文搜索
  • 细节模态 --单击任何内存以查看完整内容、链接和关联

仪表板API

仪表板在上公开了一个REST API /api/:

端点 描述
GET /api/stats 内存、实体、项目、文档和链接计数
GET /api/memories 所有带有元数据的内存
GET /api/memory/{id} 具有链接和关联的单个内存
GET /api/entities 所有实体
GET /api/relationships 具有已解析名称的实体关系
GET /api/projects 具有内存计数的项目
GET /api/documents 所有文件
GET /api/graph 用于可视化的完整知识图(节点+边)
GET /api/search?q=... FTS5搜索

作为systemd服务运行

# Create user service
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/sabmemory-dashboard.service << 'EOF'
[Unit]
Description=sabmemory web dashboard
After=network.target

[Service]
ExecStart=%h/.local/bin/sabmemory dashboard --port 3080
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target
EOF

# Enable and start
systemctl --user daemon-reload
systemctl --user enable --now sabmemory-dashboard

反向代理(nginx)

要使用HTTPS为反向代理后面的仪表板提供服务,请执行以下操作:

server {
    listen 443 ssl;
    server_name memory.yourdomain.com;

    location / {
        proxy_pass http://127.0.0.1:3080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

积分

sabmemory的灵感来自并建立在以下想法之上:

  • 超级存储器 --内存版本控制链、带过期的自动遗忘、基于容器的作用域、自动生成的用户配置文件、内存类型分类
  • 健忘 --知识图架构(实体、关系、内存实体关联)、文档和代码工件存储、基于项目的组织、原子内存原理

许可证

麻省理工学院