mcpField
H
Holographic Memory

Holographic Memory

本地服务
holographic-memory.com记忆与知识22今天更新

关于 Holographic Memory

Holographic Memory 是面向 Agent 和应用开发者的嵌入式 Rust 引擎,用于本地文档、向量和事实记忆。它将搜索与记忆操作整合在一起且不发起网络调用,并提供语言绑定、HTTP 与 MCP 服务。

主要功能

  1. 01全文、向量与混合搜索
  2. 02记住、回忆、遗忘和解释 API
  3. 03带时间有效性与对话来源的事实
  4. 04可选 AES-256-GCM 加密
  5. 05支持多种语言绑定的 Rust 引擎

适用场景

  1. 01为 Agent 添加持久的本地记忆
  2. 02在离线应用中搜索文档和向量
  3. 03通过 HTTP 服务存储并查询向量
  4. 04研究向量符号记忆和事实查询

MCP 相关

hms-mcp 服务通过 stdio 或 HTTP 向 Model Context Protocol 客户端提供本地存储访问。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"writerslogic-holographic-memory": {
"command": "npx",
"args": [
"-y",
"holographic-memory-mcp"
]
}
}
}
启动命令npx -y holographic-memory-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmholographic-memory-mcp0.1.2
pypiholographic-memory-mcp0.1.2

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Holographic Memory 标志

Holographic Memory

为 Agent 和应用提供本地记忆:全文和向量搜索、记忆 API,以及向量符号事实存储,全部集成于一个可嵌入的 Rust 引擎中,且不会发起网络调用。

CI crates.io docs.rs PyPI npm MCP on npm MSRV 1.89 OpenSSF Scorecard OpenSSF Best Practices License: Apache-2.0

Bemula forgetting score, DeepSeek backbone LongMemEval dev, gpt-4o reader and judge VIBE llama-128-ip max recall@100, one thread SIFT-1M QPS at recall@10 0.95, one query thread, unpinned

网站 · 文档 · 快速开始 · 结果 · 为什么叫“全息”? · 功能 · 限制 · 贡献


## 它是什么

Holographic Memory(简称 HMS)是一个 Rust 库,可将文本、向量和事实存储在你设备上的目录中,并在需要时检索。它提供 Node.js 绑定、C、WASM 和 UniFFI 绑定、带 Python 客户端的 HTTP 服务器,以及 MCP 服务。除非你启用了需要它们的功能,否则不会调用任何服务、收集遥测数据或下载模型。

能力你将获得
文档搜索分块、基于阻塞倒排列表的词干化 BM25、布尔和短语查询、与所提供嵌入向量的混合融合、元数据筛选、字节偏移量
向量索引带内存映射顶点文件的图索引、用于插入和删除的可更新增量,以及可选的、通过示例查询训练的查询感知路由
记忆 API支持时间有效性和取代关系的 remember、recall、forget 和 explain;带来源溯源信息的对话记忆
存储原子替换和删除、防崩溃日志与检查点、经验证的压缩、每个存储实例仅允许一个写入者
安全可选的静态 AES-256-GCM 加密、签名审计日志、COSE/SCITT 溯源
向量符号层支持绑定、捆绑和置换的稀疏超向量、支持多跳查询的三元组、Hopfield 清理

适用对象

你正在构建你将获得
需要记忆的 Agent 或助手可从存储中移除事实的记忆 API,以及面向编辑器和 Agent 宿主的 MCP 服务
本地优先或离线应用存储在单个目录中的嵌入式搜索和存储,无需服务器进程,并支持可选加密
需要向量或文本搜索的服务带租户和作用域密钥的 HTTP hms-server,或在进程内使用该库
向量符号记忆研究绑定/捆绑代数、意义记忆和容量实验及其结果文件

基准结果

每一行都链接到对应的已提交文件。这些结果来自单台机器和注明的协议,不能替代对你自己的数据进行测试。

结果条件源文件
Bemula 遗忘分数为 0.322;已发表结果中的最佳值为 0.310(LangMem)完整拆分:50 段对话,135 个遗忘请求。Agent 和评判模型均为通过 OpenRouter 固定使用 DeepSeek 的 deepseek-v4-flash-0731,温度为 0;评判模型的快照是根据作者的运行元数据推断的。使用 text-embedding-3-small 的混合检索,k=5。与论文已发表的 DeepSeek 结果行比较;当天重新运行该测试套件的朴素 RAG 基线,得分为 0.075。运行一次。bemula_v1.json
LongMemEval dev:100 题中答对 89.75 题(4 次运行的均值,范围为 87 至 93)使用官方生成和评判提示词,gpt-4o-2024-08-06 作为阅读器和评判模型,上下文取前 10 条。检索采用基于缓存的 Qwen3 分数进行参考轮次排序,而非原生对话记忆检索。k 值是在 dev 集上选取的;没有留出集结果。longmemeval_official_dev_summary.json
VIBE llama-128-ip 的严格 recall@100 最高可达 0.99687,吞吐量为 1,457 QPS使用官方测试查询,单线程,查询感知图(ef=512)。两个冻结的 RoarGraph 配置均未达到 0.99。在 0.95 和 0.99 QPS 下表现落后(见下文)。query_aware_graph_v1/README.md
VIBE yi-128-ip 在召回率 0.95 时:3,214 QPS,对比 1,953(MLANN RF80)相同协议;仅与此处测得的冻结 RoarGraph 和 MLANN 配置比较。未达到召回率 0.99。query_aware_graph_v1/README.md
SIFT-1M 在 recall@10 为 0.95 时的 QPS:17,481,对比 hnswlib 的 7,630(2.29 倍,区间为 1.95 至 2.39)Core Ultra 9 185H,单客户端线程逐个发出查询,进程未固定到某个核心,使用 8 个线程构建索引。通过 Rust API 计时,hnswlib 则通过其 Python 绑定计时。heavy-ann-sift-...-185h-22c-27g.json
SciFact 混合检索 nDCG@10 为 0.729,高于其自身 BM25(0.688)和稠密检索(0.645)5,183 个文档,300 个查询,使用测试框架提供的 MiniLM 嵌入。NFCorpus:0.355,对比 0.323 和 0.317。public_scifact.json、public_nfcorpus.json
表现落后的项目
结果条件源文件
ann-benchmarks 在召回率 0.95 时:sift 为 2,819 QPS,对比 faiss-ivfpqfs 的 3,788(0.74 倍);glove 为 1,019,对比 ScaNN 的 1,535(0.66 倍)使用官方 ann-benchmarks 运行器,每次运行固定到一个 CPU,AVX2 主机ann_benchmarks_harness_wl02_v1.json
VIBE llama-128-ip QPS:召回率 0.95 时比 RoarGraph 低 24.6%,召回率 0.99 时比 MLANN RF80 低 54.8%单线程,使用官方测试查询query_aware_graph_v1/README.md
SIFT-1M 构建时间为 hnswlib 的 0.58 倍,服务 RSS 为其 0.46 倍与上文 QPS 行使用相同的运行docs/benchmarks/GAPS.md
在大多数语料上,文本搜索的导入时间、服务 RSS 和冷启动表现均落后于 SQLite FTS5 和 tantivyBEIR 和记忆语料,两台主机docs/benchmarks/GAPS.md
使用稀疏向量路径时,glove-100-angular 的 recall@10 为 0.252,吞吐量为 33.7 QPS;对比 FAISS HNSW 的 0.832 和 4,111 QPS单线程,Apple M4;稀疏路径仍处于实验阶段public_glove-100-angular.json

方法、区间和所有落后项目:docs/benchmarks 和 基准测试页面。 由 hms-bench table 根据 benchmarks/results/competitive/ 生成;方法和注意事项见 docs/benchmarks/COMPARISON.md。W = HMS 领先(95% 区间不包含持平),T = 持平,L = 对比项领先。

数据集指标HMS最佳其他项优势
sift-128-euclideanQPS @ recall@10 >= 0.95 (QPS)17,481hnswlib 7,6302.29xW
sift-128-euclideanp99 latency @ 0.95 (us)105hnswlib 2202.10xW
sift-128-euclidean构建时间 (s)312.60hnswlib 182.490.58xL
sift-128-euclideanRSS,服务期间 (MiB)2,204hnswlib 1,0190.46xL
sift-128-euclidean索引大小 (MiB)446.3hnswlib 873.81.96x-
beir:fiqanDCG@100.2654SQLite FTS5 0.26780.99xT
beir:fiqaQPS(单线程)(QPS)3,576tantivy 1,6172.21xW
beir:fiqap99 延迟 (us)501tantivy 1,2692.53xW
beir:fiqa导入/构建时间 (s)2.16SQLite FTS5 1.180.55xL
beir:fiqa峰值 RSS,服务期间 (MiB)2,480SQLite FTS5 2,4801.00xT
beir:fiqa磁盘占用 (MiB)20.6Apache Lucene 9.12.3 (JVM) 12.20.59xL
memorynDCG@100.4561Apache Lucene 9.12.3 (JVM) 0.46270.99xT
memoryQPS(单线程)(QPS)2,225tantivy 2,3990.93xT
memoryp99 延迟 (us)786tantivy 7330.93xT
memory导入/构建时间 (s)2.52SQLite FTS5 2.060.82xL
memory峰值 RSS,服务期间 (MiB)66SQLite FTS5 260.39xL
memory磁盘占用 (MiB)9.8Apache Lucene 9.12.3 (JVM) 10.31.05xW
memorynDCG@100.4561Apache Lucene 9.12.3 (JVM) 0.46270.99xT
memoryQPS(单线程)(QPS)11,857tantivy 4,5912.58xW
memoryp99 延迟 (us)145tantivy 4122.85xW
memory导入/构建时间 (s)1.21SQLite FTS5 0.880.73xL
memory峰值 RSS,服务期间 (MiB)2,480SQLite FTS5 2,4801.00xT
memory磁盘占用 (MiB)9.8Apache Lucene 9.12.3 (JVM) 10.31.05xW
beir:nfcorpusnDCG@100.2916SQLite FTS5 0.29141.00xT
beir:nfcorpusQPS(单线程)(QPS)38,963tantivy 14,7052.65xW
beir:nfcorpusp99 延迟 (us)57tantivy 1502.62xW
beir:nfcorpus导入/构建时间 (s)0.23SQLite FTS5 0.140.59xL
beir:nfcorpus峰值 RSS,服务期间 (MiB)748SQLite FTS5 7481.00xT
beir:nfcorpus磁盘占用 (MiB)2.1Apache Lucene 9.12.3 (JVM) 1.50.72xL
beir:nfcorpusnDCG@100.2916SQLite FTS5 0.29141.00xT
beir:nfcorpusQPS(单线程)(QPS)9,532tantivy 7,1051.34xT
beir:nfcorpusp99 延迟 (us)298tantivy 3001.01xT
beir:nfcorpus导入/构建时间 (s)0.59SQLite FTS5 0.290.48xL
beir:nfcorpus峰值 RSS,服务期间 (MiB)57SQLite FTS5 300.53xL
beir:nfcorpus磁盘占用 (MiB)2.1Apache Lucene 9.12.3 (JVM) 1.50.72xL
beir:scifactnDCG@100.7027Apache Lucene 9.12.3 (JVM) 0.70221.00xT
beir:scifactQPS(单线程)(QPS)17,782tantivy 6,4502.76xW
beir:scifactp99 延迟 (us)95tantivy 2923.09xW
beir:scifact导入/构建时间 (s)0.31SQLite FTS5 0.200.63xL
beir:scifact峰值 RSS,服务期间 (MiB)196tantivy 1740.89xT
beir:scifact磁盘占用 (MiB)2.9Apache Lucene 9.12.3 (JVM) 2.00.68xL
beir:scifactnDCG@100.7027Apache Lucene 9.12.3 (JVM) 0.70221.00xT
beir:scifactQPS(单线程)(QPS)2,711tantivy 2,8790.94xL
beir:scifactp99 延迟 (us)526tantivy 5200.99xT
beir:scifact导入/构建时间 (s)1.42SQLite FTS5 0.430.30xL
beir:scifact峰值 RSS,服务期间 (MiB)160SQLite FTS5 540.34xL
beir:scifact磁盘占用 (MiB)2.9Apache Lucene 9.12.3 (JVM) 2.00.68xL

开始使用

只需克隆一次:git clone https://github.com/writerslogic/holographic-memory && cd holographic-memory。 运行离线 Agent 记忆演示:cargo run --release --example demo-offline-agent。

Rust

在你自己的 Rust 项目中,添加当前的 Apache-2.0 源码:

cargo add holographic-memory --git https://github.com/writerslogic/holographic-memory

已发布的 crate 0.6.1 仍采用 AGPL-3.0-or-later 许可。

use holographic_memory::{DocumentInput, HmsCore, SearchOptions};

let dir = tempfile::tempdir()?;
let hms = HmsCore::new(4096, Some(dir.path().display().to_string()), None)?;
hms.memorize_document(DocumentInput {
    id: "backups".into(),
    text: "Restore deleted documents from verified backups.".into(),
    source_uri: Some("operations.md".into()),
    version: Some("1".into()),
    metadata: Some(serde_json::json!({ "project": "alpha" })),
    chunk_words: None, overlap_words: None, store_text: None, embeddings: None, title_weight: None,
})?;
let hits = hms.search_documents("restore backups", &SearchOptions::default())?;
println!("{} {:?}", hits[0].document_id, hits[0].source_uri);
Node.js

安装 Node.js 绑定(该软件包会为你的平台选择原生二进制文件):

npm install holographic-memory

若要改为从源代码构建原生模块(需要 Rust):

npm ci --omit=optional && npm run build
const { HolographicMemorySystem } = require('holographic-memory')
const { DocumentMemory } = require('holographic-memory/semantic')

async function main() {
  const dir = require('node:fs').mkdtempSync(require('node:path').join(require('node:os').tmpdir(), 'hms-readme-'))
  const memory = new DocumentMemory(new HolographicMemorySystem(4096, dir))
  await memory.memorize({
    id: 'backups', text: 'Restore deleted documents from verified backups.',
    sourceUri: 'operations.md', version: '1', metadata: { project: 'alpha' },
  })
  const [hit] = await memory.search('restore backups', { filter: { project: 'alpha' } })
  console.log(hit.documentId, hit.sourceUri, hit.text)
  await memory.flush()
}
main().catch(error => { console.error(error); process.exit(1) })
服务端和 Python

Python 软件包 holographic-memory-sdk 是 hms-server 的 HTTP 客户端;hms-server 用于存储你提供的向量。(holographic-memory-py 提供原生向量搜索和相位向量,但不提供文档搜索。)

cargo build --release --features server --bin hms-server
HMS_API_KEY=change-me target/release/hms-server --input-dim 384 &
uv pip install holographic-memory-sdk
from holographic_sdk import HolographicClient

client = HolographicClient(url="http://127.0.0.1:8080", api_key="change-me", tenant_id="demo")
client.add_documents([{"id": "a", "vector": [0.1] * 384, "text": "hello", "metadata": {}}])
print(client.query([0.1] * 384, top_k=1)["matches"][0]["id"])

端点、标志、租户和限制请参阅 服务端文档。可运行的 Python 快速入门示例(使用玩具嵌入器)位于 examples/quickstart/python。

MCP

hms-mcp 可通过标准输入/输出或 HTTP,向任意模型上下文协议客户端提供存储:

npx -y holographic-memory-mcp                                # stdio; downloads a verified binary on first run
npx -y holographic-memory-mcp --transport http               # http://127.0.0.1:8765/mcp

MCP 软件包是独立的启动器。若要从源代码构建服务端:

cargo build --release --features mcp,security --bin hms-mcp   # add local-models for semantic recall
./target/release/hms-mcp                                       # stdio
./target/release/hms-mcp --transport http                      # http://127.0.0.1:8765/mcp

客户端设置、数据目录和单写入者规则:MCP 集成。

五分钟快速入门 将介绍 Rust、Python 和 Node 中的数据摄取、搜索、与 SQLite FTS5 的比较以及加密;CI 还会在每个拉取请求中运行这些代码。若要体验无需嵌入和网络的完整 Agent 记忆,请运行 cargo run --example demo-offline-agent。

为什么叫“全息”?

在全息图中,底片的每个碎片都包含整幅图像的模糊副本。将它切成两半,你得到的仍是整幅图像,只是分辨率较低,而不是半幅图像。全息降维表示和向量符号架构(VSA)让记忆具备了这一特性:

  • 绑定两个向量(此处为稀疏位集合的异或),将角色与填充值关联起来:capital ⊗ paris。再次用角色进行绑定,即可还原出填充值的噪声副本。
  • 将多个绑定对捆绑到一个固定大小的向量中。结果与每个组成部分仍保持相似,因此一个向量就能存储完整记录,且没有任何单个位承载某条事实。
  • **通过共振回忆。**输入带噪提示,最近的已存储模式就会胜出(相似度搜索、Hopfield 清理)。损坏向量会让每个条目都略微退化,而非删除少数条目,因此噪声越大,回忆能力就逐渐下降。

你可以用几行代码观察这一过程(将 100 个条目合并为并集,并逐步损坏): cargo run --release --manifest-path examples/quickstart/rust/Cargo.toml --bin holographic。

**这里哪些内容是真正的全息技术:**稀疏超向量类型及其绑定、捆绑和置换操作;关系型“意义记忆”(将三元组存储为绑定复合体,支持多跳查询和 Hopfield 清理);并集捆绑成员资格测试和共振器网络(均需启用 experimental 功能)。

**哪些内容属于常规工程:**文档搜索(词干化 BM25 加精确余弦相似度;不读取超向量)、图索引和倒排文件向量索引、记忆 API、日志存储和各类服务端。这些内容均不声称具备全息行为。包含测试数据的详细版本见 概念。

当前提供的功能

功能状态文档中说明的限制
混合文档搜索(BM25 + 精确余弦相似度、筛选条件、字节偏移量)已提供精确扫描符合条件的文本块;请先对语料库进行基准测试,再评估容量(指南)
布尔词法搜索(+required、-excluded、带引号的短语)已提供仅支持扁平查询,不支持嵌套;空查询或仅包含排除项的查询不会匹配任何内容(设计文档)
原子替换/删除、崩溃安全日志、经过验证的压缩、进程锁已提供每个存储仅支持一个写入者;压缩不属于安全擦除
向量索引(qgraph 顶点图,内存映射)已提供在 SIFT-1M 上,构建时间和服务阶段的 RSS 不及 hnswlib(差距)
可更新向量索引(用于插入和删除的持久化增量)已提供仅支持一个写入者;格式见 VECTOR-UPDATES.md
查询感知图路由(基于示例查询训练)已提供(可选启用)需要有代表性的训练查询;已在 VIBE llama 和 yi 上测试(报告)
记忆 API:记住、回忆、忘记、解释已提供忘记会从存储中移除事实,但无法覆盖模型推断出的内容(文档)
对话记忆(conversation-memory)已提供有界上下文,精确记录来源;原生回忆功能尚未在 LongMemEval 上完成端到端基准测试
语义记忆:三元组、多跳、Hopfield 清理已提供(运行时可选启用)已在合成数据集和包含 2,120 条事实的数据集上测试(research_bench_16384_256.json)
联合包成员资格(experimental)研究中在 D = 16,384 时,相对于 N = 500 存在正间隙(4% 的误报率),测试规模最高达 2,500(benchmark_scaling_results.json)
稀疏向量索引(memorize_vector)实验性性能不及 HNSW(结果)
加密存储(security)已提供AES-256-GCM、Argon2id;覆盖日志、索引缓存和文本段。元数据、文件名和大小未加密
签名审计日志、凭据门控访问、COSE/SCITT/C2PA(provenance)已提供主机必须对 DID 进行身份验证;尚未实现 PoSME、RATS、did:web
设备端模型(local-models:Qwen3 嵌入/重排/LLM)已提供仅使用本地权重;绝不下载
hms-server HTTP API,多租户(server)已提供单节点;TLS、按租户限定范围的密钥(指南)
MCP 服务(mcp:hms-mcp,stdio 和 HTTP)已提供加密需要启用 security;语义回忆需要启用 local-models
Node.js 绑定已在 npm 上提供,也可从源代码构建安装时根据平台选择原生二进制文件
C、Go、.NET、Java、Kotlin、Swift 和 WebAssembly 绑定可获取源代码需要本地构建;语言包和原生捆绑包尚未发布(运行时指南)
Python客户端 + 阶段底座不支持进程内文档搜索
查询隐私搜索(private-search)实验性用于搜索由他人持有的索引;仅向评分器隐藏查询向量(说明)

除文档搜索和向量索引外,上述所有功能都需要通过默认关闭的 Cargo 功能或运行时选项启用;Cargo 功能列出了所有选项。

架构

flowchart TB
  subgraph bindings["Bindings and servers"]
    rust["Rust crate"]
    node["Node.js (napi)"]
    ffi["C, WASM, UniFFI"]
    python["Python: holographic-memory-sdk"]
    server["hms-server (HTTP)"]
    mcp["hms-mcp (stdio, HTTP)"]
  end
  subgraph engine["Engine API"]
    core["HmsCore: documents, vectors, facts, mutation gate"]
    prov["Security and provenance: signed audit log, COSE/SCITT"]
  end
  subgraph indexes["Indexes and memory"]
    text["Text index: blocked postings, BM25, Boolean and phrase"]
    vector["Vector index (qgraph): vertex file, updatable delta, query-aware projection"]
    memory["Memory API: remember, recall, forget, conversation memory"]
    vsa["Vector-symbolic layer: bind, bundle, Hopfield cleanup"]
  end
  subgraph storage["Storage"]
    journal["Journal and checkpoints"]
    segments["Append-only segments (CRC32, LZ4)"]
    mapped["Memory-mapped files"]
    crypto["AES-256-GCM encryption (optional)"]
  end
  python --> server
  rust --> core
  node --> core
  ffi --> core
  server --> core
  mcp --> core
  core --> text
  core --> vector
  core --> memory
  core --> vsa
  core --> prov
  memory --> text
  text --> journal
  vector --> journal
  memory --> journal
  journal --> segments
  segments --> mapped
  segments --> crypto

模块图:docs/ARCHITECTURE.md。

限制

  • 并非匿名。 超向量草图和术语计数不是加密;任何拥有存储库的人都可以对候选文本进行编码并进行比较。storeText: false 仍会保留术语计数、ID 和嵌入,因此不是隐私保护措施。
  • 文档搜索采用传统方式。 它不使用超向量;全息部分是代数和语义记忆。
  • 每个存储库只能有一个写入者。 第二个写入进程在打开时会因锁定错误而失败。
  • 容量数据是点值,并非保证值,且仅针对已测试范围给出(容量)。
  • 基准测试结果来自单台机器。 条件见各结果文件;单核 ann-benchmarks 运行和 VIBE 高召回率数据点均有损耗(参见表现较差之处)。
  • 掩码只是混淆处理。 客户端向量掩码会保留所有成对相似度。
  • 存储库是一个目录,而 HmsCore::new(.., None, ..) 使用当前目录。

完整声明:docs/PRIVACY.md。请通过 SECURITY.md 私下报告漏洞。

贡献

CONTRIBUTING.md:环境设置、CI 运行的检查、DCO 签署(git commit -s,无需 CLA)。从一个适合新手的议题或讨论区开始。请参阅行为准则。基准测试变更会重新生成其涉及的结果文件;README 引用的是文件,而非凭记忆记录的数据。

许可证

Apache-2.0。请参阅 LICENSE。可在开源或专有软件(包括网络服务)中使用、修改和嵌入,且无需承担著佐权义务。直到 crate 0.6.1(含)为止的版本均以 AGPL-3.0-or-later 发布,并继续适用这些条款。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。