Memvid 单文件 AI 记忆层深度指南:.mv2 格式、智能帧与 Rust 实战
2026/9/14 8:52:37 网站建设 项目流程

Memvid 单文件 AI 记忆层深度指南:.mv2 格式、智能帧与 Rust 实战

【免费下载链接】memvidMemory layer for AI Agents. Replace complex RAG pipelines with a serverless, single-file memory layer. Give your agents instant retrieval and long-term memory.项目地址: https://gitcode.com/GitHub_Trending/me/memvid

Memvid 是一个面向 AI Agent 的单文件内存层:数据、嵌入向量、全文检索索引、时序索引与元数据全部打包进一个.mv2文件,无需数据库、无需外部服务,即可获得即时的本地检索与长期记忆。本文以官方日语版 README(docs/i18n/README.ja.md)为骨架,结合仓库源码与 MV2_SPEC.md 格式规范,完整讲解其设计理念、功能特性、安装配置、Rust API 实战、构建测试、嵌入模型部署与单文件格式细节,读完即可上手构建自己的可移植 AI 记忆系统。


一、Memvid 是什么?

Memvid 是一个可移植的 AI 记忆系统,它把数据、嵌入向量、检索结构和元数据封装进单个文件。与维护复杂 RAG 管道或基于服务器的向量数据库不同,Memvid 允许直接从文件进行高速检索。

其结果是:一个模型无关、无需基础设施的记忆层,让 AI Agent 拥有随处可用的持久长期记忆。官方 README 将其定位为 "Memory layer for AI Agents",替代复杂 RAG 管道,提供 serverless 的单文件记忆层。

核心概念(コアコンセプト)

概念说明源码对应
Living Memory Engine(成长式记忆引擎)跨会话持续追加、分叉、演化记忆src/memvid/mutation.rs(put/commit 系列)
カプセル・コンテキスト(.mv2胶囊)可设置规则与有效期的自包含、可共享记忆胶囊MV2_SPEC.md 格式规范
タイムトラベル・デバッグ(时间旅行调试)可回退、重放或分叉任意记忆状态src/replay/ 与SearchRequest.as_of_frame/as_of_ts
スマート・リコール(智能召回)预测式缓存,本地记忆访问 < 5mssrc/memvid/sketch.rs(sketch 预过滤)
コーデック・インテリジェンス(编解码智能)自动选择压缩方式,随版本升级Frameencoding字段(Raw/Zstd/Lz4)

智能帧(Smart Frames)设计

Memvid 借鉴视频编码技术(不是为了存视频),而是以追加(append-only)优化的高效智能帧序列组织 AI 记忆

  • 智能帧是不可变(immutable)单元,内容连同时间戳、校验和、基础元数据一起存储;
  • 帧被分组以便高效压缩、索引与并行读取;
  • 支持对历史记忆状态的查询(time-travel);
  • 以时间线形式检查知识如何演化;
  • 通过已提交的不可变帧实现崩溃容错
  • 借鉴视频编码的高效压缩

最终产物是一个单一文件,如同 AI 系统的"可回退记忆时间线"。核心 API 支持:

  • 追加数据而不修改/损坏已有数据(put_bytes/put_bytes_with_options);
  • 对历史状态查询(as_of_frame/as_of_ts);
  • 时间线检查(timeline())。

使用场景(ユースケース)

Memvid 为 AI Agent 提供持久记忆与快速召回,模型无关、多模态、完全离线。官方列出的典型场景包括:长期运行的 AI Agent、企业知识库、离线优先 AI 系统、代码库理解、客户支持 Agent、工作流自动化、销售/营销辅助、个人知识助手、医疗/法律/金融垂直 Agent、可审计可调试的 AI 工作流、以及自定义应用。


二、SDK 与 CLI 一览

安装方式说明
CLInpm install -g memvid-cli命令行工具
Node.js SDKnpm install @memvid/sdkNode 客户端
Python SDKpip install memvid-sdkPython 客户端
Rustcargo add memvid-core核心库(本仓库)

本文聚焦 Rust 核心库memvid-core,其版本信息见 Cargo.toml(当前2.0.140,edition 2024,rust-version 1.85.0,Apache-2.0)。


三、安装与环境要求(Rust)

前提条件

  • Rust 1.85.0+(由 Cargo.toml 中rust-version = "1.85.0"与 rust-toolchain.toml 锁定),可从 rustup 安装。

添加到项目

[dependencies] memvid-core = "2.0"

功能特性(Feature Flags)

特性说明底层依赖(见 Cargo.toml[features]
lex基于 BM25 的全文检索(Tantivy)dep:tantivy
pdf_extract纯 Rust PDF 文本提取dep:pdf-extract
vec向量相似度检索(HNSW + ONNX 本地文本嵌入)dep:ortdep:hnswdep:ndarraydep:tokenizersdep:space
clipCLIP 视觉嵌入(图像检索)vec+dep:imagedep:rayon
whisperWhisper 语音转写(Candle 推理)dep:symphoniadep:candle-*dep:hf-hub
temporal_track自然语言日期解析(如 "last Tuesday")—(纯逻辑实现)
parallel_segments多线程数据摄入dep:num_cpusdep:crossbeam-channel
encryption基于密码的加密胶囊(.mv2edep:argon2dep:aes-gcmdep:zeroize

此外还有default = ["lex", "pdf_extract", "simd"],以及extractouspdf_oxidepdfiumtemporal_enrichlogic_mesh(DistilBERT-NER 实体关系图)、replaysymspell_cleanupapi_embed(OpenAI 等 API 嵌入)、simdmetal/cuda/accelerate(Whisper GPU 加速)等可选特性。按需启用:

[dependencies] memvid-core = { version = "2.0", features = ["lex", "vec", "temporal_track"] }

注意:vecclipwhisper等特性会引入较重的 ML 依赖链(ONNX Runtime / Candle),首次编译耗时较长。


四、快速上手(Quick Start)

官方快速上手示例(与 examples/basic_usage.rs 一致的模式):

use memvid_core::{Memvid, PutOptions, SearchRequest}; fn main() -> memvid_core::Result<()> { // 创建新的记忆文件 let mut mem = Memvid::create("knowledge.mv2")?; // 带元数据追加文档 let opts = PutOptions::builder() .title("Meeting Notes") .uri("mv2://meetings/2024-01-15") .tag("project", "alpha") .build(); mem.put_bytes_with_options(b"Q4 planning discussion...", opts)?; mem.commit()?; // 执行检索 let response = mem.search(SearchRequest { query: "planning".into(), top_k: 10, snippet_chars: 200, ..Default::default() })?; for hit in response.hits { println!("{}: {}", hit.title.unwrap_or_default(), hit.text); } Ok(()) }

核心 API 与源码印证

创建与打开Memvid::create(path)创建带内嵌 WAL 与空 TOC 的新.mv2文件,并在句柄生命周期内独占锁定文件(见 src/memvid/lifecycle.rs);Memvid::open(path)用于重新打开已有文件。

写入put_bytes(payload)追加原始字节;put_bytes_with_options(payload, options)附带元数据/选项(src/memvid/mutation.rs)。写入后必须调用commit()持久化(CommitMode::Full)。

PutOptions 完整参数(见 src/types/options.rs):

参数默认说明
timestampNone自定义时间戳
track/kindNone轨道/类型标签
uriNonemv2://层级路径
titleNone展示标题
tags/labels标签与分类
extra_metadata自定义键值元数据
enable_embeddingfalse是否生成本地嵌入
auto_tagtrue自动打标签
extract_datestrue自动提取日期
extract_tripletstrue抽取主谓宾三元组(MemoryCards,O(1) 实体查询与图查询)
no_rawfalse不存原始二进制,仅存提取文本 + SHA256
dedupfalse按 BLAKE3 内容哈希去重,重复则返回已存在帧序号
instant_indextrue即时索引(WAL 追加后软提交,<1s 可搜)
extraction_budget_ms350ms文本提取时间预算,0 表示无预算

tag(key, value)同时写入extra_metadatatags,这与 MV2 帧的tags: Map<String, String>结构对应。

检索mem.search(SearchRequest{..})返回SearchResponse。完整字段见 src/types/search.rs:

  • querytop_ksnippet_charscursor(分页游标);
  • uri/scope(限定 URI 或命名空间,如mv2://docs/);
  • as_of_frame/as_of_ts(时间旅行:只看某一帧/时间点之前的记忆);
  • no_sketch(禁用 sketch 预过滤);
  • acl_context/acl_enforcement_modeaudit审计 /enforce强制执行);
  • temporaltemporal_track特性下的自然语言时间过滤)。

响应包含hits(含frame_idurititletext片段、scoremetadata)、total_hitselapsed_msengine(Tantivy / LexFallback / Hybrid)与next_cursor。若未启用lex特性,search会返回LexNotEnabled错误(src/memvid/search/mod.rs)。


五、构建(Build)

克隆仓库后:

git clone https://github.com/memvid/memvid.git cd memvid
  • 调试构建:cargo build
  • 发布构建(优化):cargo build --release
  • 指定特性构建:cargo build --release --features "lex,vec,temporal_track"

当前仓库的仓库地址为GitHub_Trending/me/memvid,克隆命令中的地址请以你实际拉取到的远端为准。


六、运行测试(Testing)

# 全部测试 cargo test # 带标准输出 cargo test -- --nocapture # 指定测试 cargo test test_name # 仅集成测试 cargo test --test lifecycle cargo test --test search cargo test --test mutation

仓库 tests/ 下还包含crash_recovery.rs(崩溃恢复)、doctor_recovery.rs(doctor 修复)、encryption_capsule.rs(加密胶囊)、replay_integrity.rs(时间旅行完整性)、single_file.rs(单文件保证)、xlsx_structured.rs等集成测试,可直接验证上述 API 行为。


七、可运行示例(Examples)

examples/ 目录提供开箱即用的示例代码:

示例命令说明
基本用法cargo run --example basic_usagecreate / put / search / timeline / reopen / verify 全流程
PDF 摄入cargo run --example pdf_ingestion摄入论文 PDF(如 "Attention Is All You Need")并检索
CLIP 图像检索cargo run --example clip_visual_search --features clip基于 CLIP 嵌入的图像搜索
Whisper 转写cargo run --example test_whisper --features whisper音频转文字
文本嵌入cargo run --example text_embedding --features vec完整嵌入、相似度计算与检索排序
OpenAI 嵌入cargo run --example openai_embedding --features api_embedAPI 型嵌入(需网络)

basic_usage 详解

examples/basic_usage.rs 展示了完整生命周期:

  1. Memvid::create(&path)创建记忆文件;
  2. put_bytes/put_bytes_with_options写入多篇文档(title、uri、tags);
  3. mem.commit()提交持久化;
  4. mem.stats()查看frame_count及 lex/vec/time 索引是否存在;
  5. mem.search(SearchRequest{..})检索,支持scope: Some("mv2://docs/")限定范围;
  6. mem.timeline(TimelineQuery::default())按时间顺序浏览全部帧;
  7. drop(mem)Memvid::open(&path)重新打开,验证持久化;
  8. Memvid::verify(&path, false)校验文件完整性。

pdf_ingestion 详解

examples/pdf_ingestion.rs 演示将 PDF 二进制直接交给put_bytes_with_options:Memvid 会自动完成文本提取(pdf_extract/pdf_oxide等特性)、分块(chunking)、索引,随后用 "attention mechanism"、"transformer architecture" 等查询即可命中论文内容。PDF 提取后还可用symspell_cleanup特性修复断词问题(见 Cargo.toml 注释)。


八、文本嵌入模型(Text Embedding Models)

vec特性通过ONNX Runtime 本地推理生成文本嵌入(src/text_embed.rs),完全离线、无需云 API。使用前需手动下载模型文件。

推荐:BGE-small(默认)

mkdir -p ~/.cache/memvid/text-models # 下载 ONNX 模型 curl -L 'https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/onnx/model.onnx' \ -o ~/.cache/memvid/text-models/bge-small-en-v1.5.onnx # 下载 tokenizer curl -L 'https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/tokenizer.json' \ -o ~/.cache/memvid/text-models/bge-small-en-v1.5_tokenizer.json

模型列表(源码注册表一致,见 src/text_embed.rsTEXT_EMBED_MODELS

模型维度大小适用场景
bge-small-en-v1.5384~120MB默认(快、轻量)
bge-base-en-v1.5768~420MB需要更高精度
nomic-embed-text-v1.5768~530MB多用途任务
gte-large1024~1.3GB最高精度

其他模型下载

# BGE-base (768 维) curl -L 'https://huggingface.co/BAAI/bge-base-en-v1.5/resolve/main/onnx/model.onnx' \ -o ~/.cache/memvid/text-models/bge-base-en-v1.5.onnx curl -L 'https://huggingface.co/BAAI/bge-base-en-v1.5/resolve/main/tokenizer.json' \ -o ~/.cache/memvid/text-models/bge-base-en-v1.5_tokenizer.json # Nomic (768 维) curl -L 'https://huggingface.co/nomic-ai/nomic-embed-text-v1.5/resolve/main/onnx/model.onnx' \ -o ~/.cache/memvid/text-models/nomic-embed-text-v1.5.onnx curl -L 'https://huggingface.co/nomic-ai/nomic-embed-text-v1.5/resolve/main/tokenizer.json' \ -o ~/.cache/memvid/text-models/nomic-embed-text-v1.5_tokenizer.json # GTE-large (1024 维) curl -L 'https://huggingface.co/thenlper/gte-large/resolve/main/onnx/model.onnx' \ -o ~/.cache/memvid/text-models/gte-large.onnx curl -L 'https://huggingface.co/thenlper/gte-large/resolve/main/tokenizer.json' \ -o ~/.cache/memvid/text-models/gte-large_tokenizer.json

在代码中使用

use memvid_core::text_embed::{LocalTextEmbedder, TextEmbedConfig}; use memvid_core::types::embedding::EmbeddingProvider; // 使用默认模型 (BGE-small) let config = TextEmbedConfig::default(); let embedder = LocalTextEmbedder::new(config)?; let embedding = embedder.embed_text("hello world")?; assert_eq!(embedding.len(), 384); // 更换模型 let config = TextEmbedConfig::bge_base(); let embedder = LocalTextEmbedder::new(config)?;

源码补充说明(src/text_embed.rs):

  • TextEmbedConfig::default()默认模型目录为系统缓存目录下的memvid/text-models,与上述~/.cache/memvid/text-models一致;
  • 提供便捷构造函数:bge_small()bge_base()nomic()gte_large()
  • 所有模型max_tokens = 512(BERT 系标准序列长度);
  • 内置嵌入缓存(默认容量 1000 条)与模型空闲卸载(5 分钟无活动自动卸载);
  • macOS 上会自动抑制 ONNX Runtime 初始化时的 "Context leak detected" 噪音警告。

完整示例(相似度计算 + 检索排序)见 examples/text_embedding.rs。


九、单文件格式(.mv2 文件构成)

一切内容都收拢在单个.mv2文件中:

┌────────────────────────────┐ │ ヘッダー (4KB) │ 魔数、版本、容量 ├────────────────────────────┤ │ 組み込みWAL (1-64MB) │ 崩溃恢复 ├────────────────────────────┤ │ データセグメント │ 压缩帧 ├────────────────────────────┤ │ 全文検索インデックス (Lex) │ Tantivy 全文检索 ├────────────────────────────┤ │ ベクトルインデックス (Vec) │ HNSW 向量 ├────────────────────────────┤ │ タイムインデックス │ 时序排序 ├────────────────────────────┤ │ TOC (フッター) │ 段偏移目录 └────────────────────────────┘

不生成任何.wal.lock.shm等侧车文件。完整格式规范见 MV2_SPEC.md(当前版本 2.1),以下为要点。

头部(Header,4096 字节)

前 4KB 固定布局(全部多字节整数为 little-endian):magicMV2\0)、versionspec_major=2spec_minor=1footer_offset(TOC 偏移)、wal_offset(恒为 4096)、wal_sizewal_checkpoint_poswal_sequencetoc_checksum(TOC 段的 SHA-256)及 4016 字节保留区。

内嵌 WAL(崩溃恢复)

WAL 从字节 4096 开始,容量随目标文件大小递增:

文件容量WAL 大小
< 100 MB1 MB
< 1 GB4 MB
< 10 GB16 MB
>= 10 GB64 MB

WAL 条目格式:sequence(u64) +entry_type(u8) +payload_len(u32) +payload+checksum(CRC32)。条目类型:0x01帧追加、0x02帧更新、0x03帧删除(墓碑)、0x04索引更新。检查点(checkpoint)在WAL 占用达 75% 或每 1000 笔事务时触发,将 WAL 条目刷入数据段;seal()强制立即检查点;恢复时重放sequence > wal_checkpoint_pos的条目。put_many批量模式还支持wal_pre_size_bytes预分配 WAL 以避免批量中途扩容导致的 O(file_size) 搬移(见 src/types/options.rs)。

帧结构(Frame)

每个帧表示一条内容,字段包括:frame_id(u64 单调递增)、urimv2://层级路径)、titlecreated_at(Unix 秒)、encoding(0=Raw、1=Zstd、2=Lz4)、payload(压缩内容)、payload_checksum(未压缩负载 SHA-256)、tags(键值对)、status(0=active、1=tombstoned)。

数据段与段类型

帧按段分组存储:0x01数据段(帧)、0x02Lex 索引段、0x03Vec 索引段、0x04时间索引段。段头含 magic、version、segment_type、frame_count、compressed 标志与 32 字节校验和。

时间索引

启用了时间旅行(time-travel)的时序查询。条目为frame_id(8) +timestamp(8) +offset(8,数据段内字节偏移),魔数MVTI。对应 src/io/time_index.rs 与 src/memvid/timeline.rs。

Lex 全文索引(Tantivy)

启用lex特性后内嵌 Tantivy 索引段,索引字段:bodytitleuritags(扁平化),支持BM25 排序、短语查询、布尔操作符、日期范围过滤(对应 src/search/tantivy/ 与 src/lex.rs 的 LexFallback 实现)。

Vec 向量索引(HNSW)

启用vec特性后内嵌 HNSW 索引段:维度 384(BGE-small)、余弦相似度、M=16ef_construction=200(对应 src/vec.rs,另提供 src/vec_pq.rs 的 PQ 量化版本)。

TOC(目录,文件末尾)

TOC 是最后一个段,由头部footer_offset指向:magicMVTC、version、segment_count、SegmentDescriptor[](segment_type + offset + length + SHA-256)、IndexManifests 与 32 字节校验和。自描述:仅凭 TOC 即可解析整个文件。

URI 方案

所有内容通过mv2://URI 寻址:mv2://[track/][path/]name,例如mv2://meetings/2024-01-15mv2://docs/api/reference.mdmv2://media/photo.png

格式不变量(Invariants)

  1. 单文件保证:无.wal.shm.lock等侧车文件;
  2. 只追加帧:已有帧绝不在原位置修改;
  3. 确定性:相同 API 调用产生相同字节;
  4. 崩溃安全:WAL 保证异常终止下的持久性;
  5. 自描述:TOC 包含解析文件所需的全部元数据。

版本历史

版本变更
2.1当前版本,内嵌 WAL、temporal track 支持
2.0单文件格式,移除外部索引
1.x遗留格式(已弃用)

十、进阶能力:加密胶囊(.mv2e)与时间旅行

密码加密胶囊(encryption特性)

启用encryption特性后(依赖 Argon2 + AES-GCM + zeroize),可将.mv2锁定为密码加密的.mv2e胶囊:lock_file加密、unlock_file解密(流式/一次性两种模式,解密后校验MV2\0魔数并原子写入),详见 src/encryption/capsule.rs 与 src/encryption/。对应集成测试 tests/encryption_capsule.rs。

时间旅行与重放(replay特性)

SearchRequest.as_of_frame/as_of_ts让检索"回到过去"只看某时间点之前的记忆;src/replay/ 提供完整的会话重放引擎,支持对任意记忆状态回退、重放或分叉——这正是"タイムトラベル・デバッグ"的落地实现。相关验证见 tests/replay_integrity.rs。


十一、支持与许可

  • 反馈与支持邮箱:contact@memvid.com
  • 许可:Apache License 2.0,详见 LICENSE。

【免费下载链接】memvidMemory layer for AI Agents. Replace complex RAG pipelines with a serverless, single-file memory layer. Give your agents instant retrieval and long-term memory.项目地址: https://gitcode.com/GitHub_Trending/me/memvid

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询