Memvid 单文件 AI 记忆层深度指南:.mv2 格式、智能帧与 Rust 实战
发布时间:2026/9/14 8:53:06 作者:尧图编辑部 阅读量:1,286

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/memvidMemvid 是一个面向 AI Agent 的单文件内存层数据、嵌入向量、全文检索索引、时序索引与元数据全部打包进一个.mv2文件无需数据库、无需外部服务即可获得即时的本地检索与长期记忆。本文以官方日语版 READMEdocs/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.rsput/commit 系列カプセル・コンテキスト.mv2胶囊可设置规则与有效期的自包含、可共享记忆胶囊MV2_SPEC.md 格式规范タイムトラベル・デバッグ时间旅行调试可回退、重放或分叉任意记忆状态src/replay/ 与SearchRequest.as_of_frame/as_of_tsスマート・リコール智能召回预测式缓存本地记忆访问 5mssrc/memvid/sketch.rssketch 预过滤コーデック・インテリジェンス编解码智能自动选择压缩方式随版本升级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.140edition 2024rust-version 1.85.0Apache-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 的全文检索Tantivydep:tantivypdf_extract纯 Rust PDF 文本提取dep:pdf-extractvec向量相似度检索HNSW ONNX 本地文本嵌入dep:ort、dep:hnsw、dep:ndarray、dep:tokenizers、dep:space等clipCLIP 视觉嵌入图像检索vecdep:image、dep:rayonwhisperWhisper 语音转写Candle 推理dep:symphonia、dep:candle-*、dep:hf-hub等temporal_track自然语言日期解析如 last Tuesday—纯逻辑实现parallel_segments多线程数据摄入dep:num_cpus、dep:crossbeam-channelencryption基于密码的加密胶囊.mv2edep:argon2、dep:aes-gcm、dep:zeroize此外还有default [lex, pdf_extract, simd]以及extractous、pdf_oxide、pdfium、temporal_enrich、logic_meshDistilBERT-NER 实体关系图、replay、symspell_cleanup、api_embedOpenAI 等 API 嵌入、simd、metal/cuda/accelerateWhisper GPU 加速等可选特性。按需启用[dependencies] memvid-core { version 2.0, features [lex, vec, temporal_track] }注意vec、clip、whisper等特性会引入较重的 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(bQ4 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.rsMemvid::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抽取主谓宾三元组MemoryCardsO(1) 实体查询与图查询no_rawfalse不存原始二进制仅存提取文本 SHA256dedupfalse按 BLAKE3 内容哈希去重重复则返回已存在帧序号instant_indextrue即时索引WAL 追加后软提交1s 可搜extraction_budget_ms350ms文本提取时间预算0 表示无预算tag(key, value)同时写入extra_metadata与tags这与 MV2 帧的tags: MapString, String结构对应。检索mem.search(SearchRequest{..})返回SearchResponse。完整字段见 src/types/search.rsquery、top_k、snippet_chars、cursor分页游标uri/scope限定 URI 或命名空间如mv2://docs/as_of_frame/as_of_ts时间旅行只看某一帧/时间点之前的记忆no_sketch禁用 sketch 预过滤acl_context/acl_enforcement_modeaudit审计 /enforce强制执行temporaltemporal_track特性下的自然语言时间过滤。响应包含hits含frame_id、uri、title、text片段、score、metadata、total_hits、elapsed_ms、engineTantivy / 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.rsdoctor 修复、encryption_capsule.rs加密胶囊、replay_integrity.rs时间旅行完整性、single_file.rs单文件保证、xlsx_structured.rs等集成测试可直接验证上述 API 行为。七、可运行示例Examplesexamples/ 目录提供开箱即用的示例代码示例命令说明基本用法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 展示了完整生命周期Memvid::create(path)创建记忆文件put_bytes/put_bytes_with_options写入多篇文档title、uri、tagsmem.commit()提交持久化mem.stats()查看frame_count及 lex/vec/time 索引是否存在mem.search(SearchRequest{..})检索支持scope: Some(mv2://docs/)限定范围mem.timeline(TimelineQuery::default())按时间顺序浏览全部帧drop(mem)后Memvid::open(path)重新打开验证持久化Memvid::verify(path, false)校验文件完整性。pdf_ingestion 详解examples/pdf_ingestion.rs 演示将 PDF 二进制直接交给put_bytes_with_optionsMemvid 会自动完成文本提取pdf_extract/pdf_oxide等特性、分块chunking、索引随后用 attention mechanism、transformer architecture 等查询即可命中论文内容。PDF 提取后还可用symspell_cleanup特性修复断词问题见 Cargo.toml 注释。八、文本嵌入模型Text Embedding Modelsvec特性通过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.rsTextEmbedConfig::default()默认模型目录为系统缓存目录下的memvid/text-models与上述~/.cache/memvid/text-models一致提供便捷构造函数bge_small()、bge_base()、nomic()、gte_large()所有模型max_tokens 512BERT 系标准序列长度内置嵌入缓存默认容量 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以下为要点。头部Header4096 字节前 4KB 固定布局全部多字节整数为 little-endianmagicMV2\0、version、spec_major2、spec_minor1、footer_offsetTOC 偏移、wal_offset恒为 4096、wal_size、wal_checkpoint_pos、wal_sequence、toc_checksumTOC 段的 SHA-256及 4016 字节保留区。内嵌 WAL崩溃恢复WAL 从字节 4096 开始容量随目标文件大小递增文件容量WAL 大小 100 MB1 MB 1 GB4 MB 10 GB16 MB 10 GB64 MBWAL 条目格式sequence(u64) entry_type(u8) payload_len(u32) payloadchecksum(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://层级路径、title、created_atUnix 秒、encoding0Raw、1Zstd、2Lz4、payload压缩内容、payload_checksum未压缩负载 SHA-256、tags键值对、status0active、1tombstoned。数据段与段类型帧按段分组存储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 索引段索引字段body、title、uri、tags扁平化支持BM25 排序、短语查询、布尔操作符、日期范围过滤对应 src/search/tantivy/ 与 src/lex.rs 的 LexFallback 实现。Vec 向量索引HNSW启用vec特性后内嵌 HNSW 索引段维度 384BGE-small、余弦相似度、M16、ef_construction200对应 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-15、mv2://docs/api/reference.md、mv2://media/photo.png。格式不变量Invariants单文件保证无.wal、.shm、.lock等侧车文件只追加帧已有帧绝不在原位置修改确定性相同 API 调用产生相同字节崩溃安全WAL 保证异常终止下的持久性自描述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。十一、支持与许可反馈与支持邮箱contactmemvid.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),仅供参考