memvid/memvid · 上手攻略

  • 仓库:memvid/memvid
  • 链接:https://github.com/memvid/memvid
  • 分类:ai / agent(RAG 替代、记忆层)
  • 作者:spark
  • 更新:2026-07-13

一、是什么

Memvid 是一个"单文件 AI 记忆层"(single-file memory layer)项目,目标是把 LLM Agent 需要的"长期记忆 + 检索"打包成一个可拷贝、可分享、可版本管理.mv2 文件,从而彻底替代传统 RAG 链路里的向量数据库 + 检索服务

它用了一种"借鉴视频编码"的有趣思路:把每条记忆存为一个不可变的 Smart Frame(带时间戳、checksum、元数据),多帧组成可压缩、可并行读取、可时间回溯的序列;底层用 Tantivy 做 BM25 全文索引 + HNSW 做向量索引 + 内置 Chronological Time Index,所有东西塞进同一个文件。

  • 核心库(Rust)memvid-core 2.0,发布在 crates.io
  • Python SDKpip install memvid-sdk(2.0.160,2026-05-27)
  • Node.js SDKnpm install @memvid/sdk
  • CLInpm install -g memvid-cli
  • 官方文档https://docs.memvid.com
  • 许可证:Apache-2.0

截至 2026-07,仓库约 15.7k Stars周增 +28,是 RAG 替代方案里关注度上升最快的项目之一。

⚠️ 重要Memvid v1(基于 QR 码编码)是已弃用版本,README 明确说"如果你看到 QR 码相关内容,那是过时信息"。当前主推 v2(.mv2 格式)。

二、解决什么问题

传统 RAG 链路里 Agent 想要"持久记忆",通常要:

  1. 拆文档 → 分块 → 嵌入 → 存到 Pinecone / Chroma / Weaviate 等向量库
  2. 维护一个常驻检索服务 + 配套的 WAL、lock、shm 边车文件
  3. 处理一致性问题、副本、备份
  4. 想分享给别人用?要么部署一整套服务,要么导出数据再导入

Memvid 把这些事收编到一个文件

  • 一份 .mv2 = 数据 + 嵌入 + 全文索引 + 时间索引 + 元数据
  • 没有外部依赖,没有 sidecar 文件,append-only 不破坏旧数据
  • 单文件可拷贝(用 rsync / Git LFS / S3 / U 盘都能分发)
  • 崩溃安全(嵌入式 WAL,1-64MB 可配置)
  • 模型无关(自带 BGE / Nomic / GTE 本地 ONNX embedding,也支持 OpenAI API)

按官方宣传,对比标准方案"基础设施成本下降 93%"(一家之言,未独立验证)。

三、快速安装

推荐 Rust ≥ 1.85(core 用),Python ≥ 3.8 / Node ≥ 18。

3.1 Python(最快上手)

pip install "memvid-sdk[full]"
# 或按需:
pip install "memvid-sdk[langchain]"   # LangChain 工具集成
pip install "memvid-sdk[llamaindex]"  # LlamaIndex query engine
pip install "memvid-sdk[openai]"      # OpenAI function schema

3.2 Node.js

npm install @memvid/sdk
# 或 CLI
npm install -g memvid-cli

3.3 Rust(core,命令行 + 库)

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

常用 features:lex(BM25)/ vec(HNSW + 本地 ONNX)/ pdf_extract(纯 Rust PDF 解析)/ clip(视觉搜索)/ whisper(音频转写)/ api_embed(OpenAI 嵌入)/ temporal_track(自然语言时间解析)/ parallel_segments(多线程摄入)/ encryption(加密 capsule .mv2e)/ symspell_cleanup(PDF 文本修复)。

⚠️ vec feature 用本地 embedding 之前,要先手动下载 ONNX 模型到 ~/.cache/memvid/text-models/(下面 4.4 详述),不会自动拉。

四、核心用法

4.1 Python 三行起步(PyPI README 示例)

from memvid_sdk import create, use

# 建一个空文件
mv = create("basic", "notes.mv2")

# 塞一段记忆
text = "Decided to use PostgreSQL for the main database."
mv.put(text)
mv.commit()      # 提交,不 commit 数据还在 WAL 里
mv.close()

# 之后再开(auto 模式:有就开、没有就建)
with use("basic", "notes.mv2", mode="auto") as mv:
    answer = mv.ask("What database are we using?", model="openai:gpt-4o-mini")
    print(answer)

4.2 Rust 直接调 core(README 主示例)

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 resp = mem.search(SearchRequest {
        query: "planning".into(),
        top_k: 10,
        snippet_chars: 200,
        ..Default::default()
    })?;
    for hit in resp.hits {
        println!("{}: {}", hit.title.unwrap_or_default(), hit.text);
    }
    Ok(())
}
cargo run --example basic_usage

4.3 PDF 摄入(用 "Attention Is All You Need" 论文做示例)

cargo run --example pdf_ingestion --features pdf_extract

Python 等价:

from memvid_sdk import use

with use("basic", "research.mv2", mode="auto") as mv:
    mv.put_file("attention.pdf")   # 自动抽文本
    mv.commit()
    print(mv.ask("What is multi-head attention?"))

4.4 启用本地向量检索(要先把模型下载好)

mkdir -p ~/.cache/memvid/text-models
# 默认 BGE-small(384 维,最快)
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
curl -L 'https://huggingface.co/BAAI/bge-small-en-v1.5/resolve/main/onnx/tokenizer.json' \
  -o ~/.cache/memvid/text-models/bge-small-en-v1.5_tokenizer.json

可选更强模型:BGE-base (768, ~420MB)、Nomic (768, ~530MB)、GTE-large (1024, ~1.3GB)。

Rust 中切换:

let cfg = TextEmbedConfig::bge_base();   // 或 gte_large() / nomic()
let embedder = LocalTextEmbedder::new(cfg)?;

4.5 用 OpenAI embedding(更省心,但要 API key)

export OPENAI_API_KEY="sk-..."
use memvid_core::api_embed::{OpenAIConfig, OpenAIEmbedder};
let cfg = OpenAIConfig::default();         // text-embedding-3-small (1536d)
let cfg = OpenAIConfig::large();           // text-embedding-3-large (3072d)
let embedder = OpenAIEmbedder::new(cfg)?;

4.6 防止"模型混用"(建议显式绑定)

mem.set_vec_model("bge-small-en-v1.5")?;
// 之后用别的模型会立刻报 ModelMismatch

4.7 与 LangChain / LlamaIndex 集成

pip install "memvid-sdk[langchain]"
from memvid_sdk import use

mv = use("langchain", "notes.mv2")
# 现在 mv 暴露了 LangChain Retriever / Document Store 接口

五、典型适用场景

  • 长跑 Agent:让 ChatGPT/Claude 风格的 Agent 在多次会话间累积记忆,不用外挂数据库。
  • 离线优先 / 端侧 AI:iPad、嵌入式设备、单文件就能跑整套记忆系统。
  • 企业知识库:把整本手册、研报库 commit 进一个 .mv2,分发给前线团队。
  • 审计 / 可调试 AI 工作流:append-only + 时间索引 → 能"rewind / replay / branch"任意时刻的记忆状态。
  • 客户支持 Agent:FAQ、产品文档一次性 ingest,新员工拿到一个 .mv2 就能上手。
  • 多 Agent 共享记忆:不同 Agent 共享同一个 .mv2 文件(Git LFS / S3 共享)。
  • 个人知识助手:把 Obsidian / Notion 导出的 markdown 灌进 .mv2,做"全库问答"。
  • 医疗 / 法律 / 金融:需要可追溯、可版本化、不上云的数据载体。

六、坑与注意

  1. v1 ≠ v2:网上很多教程还在讲 QR 码编码的 v1,已经弃用。看到 QR / 二维码 / video-encoding-as-video 这类描述,先确认是 v1 还是 v2;本攻略聚焦 v2。
  2. 必须 commit():Rust API 里 put_* 之后没 commit() 数据只进 WAL,重启后看似丢失但不报错;Python SDK 的 with use(...) 上下文会自动 commit,但裸用 create 后忘了 commit 会困惑。
  3. 本地 embedding 模型不会自动下载:用 vec feature 之前先 curl 4.4 的 ONNX,否则报 "model file not found"。
  4. 不要混 embedding 模型:用 BGE-small 建的索引,不能用 OpenAI text-embedding-3 查;如需切换,要么重建文件,要么用 set_vec_model 显式校验。
  5. 大文件性能:单个 .mv2 文件目前没有硬上限,但 HNSW 在千万级向量上需要可观内存(粗估 768d × 1M 条 ≈ 3GB RAM);超过千万级建议分片。
  6. 加密 feature:用 encryption feature 后输出是 .mv2e,SDK 默认不识别,必须显式给密码。
  7. 更新频繁:v2 在 2026-01 才完成 Rust 重写,2026-05 Python SDK 2.0.160;API 命名还在演进,跨版本代码不能直接 copy-paste,锁版本号
  8. "93% 成本下降"是官方宣传:未经独立 benchmark 复现,建议在小规模 PoC 里自己测。
  9. 时间索引是辅助:内置的 temporal_track 支持 "last Tuesday" 之类的自然语言时间解析,但不是全文语义时间问答,复杂时序推理还是要靠 LLM。
  10. 没看到官方 .mv2 文件格式 spec 的 PDF 化导出MV2_SPEC.md 描述了帧结构,但如果做长期归档,建议自己写 snapshot 脚本定期备份。

七、与同类对比

方案 形态 优势 短板
Memvid v2(本) 单文件 Rust 引擎 + 多语言 SDK 零基础设施、可拷贝、原生时间索引、append-only 单机为主,超大规模数据分片需自建
Chroma / Pinecone / Weaviate 服务化向量库 分布式、生产级、生态成熟 要运维、要付费、文件不可移植
FAISS / HNSWlib 本地向量库 纯 C++ 快、轻量 只管向量,没有时间索引 / 全文 / 元数据
LlamaIndex / LangChain RAG 框架 现成 chain / agent 集成 底层还是要接一个向量库,没解决"基础设施复杂度"
Zep / Letta(mem0) Agent 专用记忆服务 为 Agent 设计、长期记忆、SSE 云服务为主、闭源部分逻辑、自托管要起服务
SQLite + sqlite-vec 单文件 + 向量 极简、可嵌入 SQL 性能不及专用向量库、缺乏时间索引

一句话:Memvid 抢的是"我懒得运维 Pinecone,又想要长期记忆 + 可分享"的中间地带——比向量库简单、比 sqlite-vec 强、比 Agent 框架自带的记忆层更可移植。

八、一句话推荐结论

Memvid v2 是 2026 年最值得玩的"AI 记忆层"项目之一:单文件 .mv2 解决分发和备份、原生时间索引 + 全文 + 向量混合检索、LangChain/LlamaIndex/OpenAI 都接得上,CLI + Python + Node + Rust 四端 SDK 全;缺点是项目仍在快速演进(v2 才半年)、v1 QR 教程在网上混淆视听、本地 embedding 模型要手动下。适合做 PoC 和产品差异化,不适合扛千万级 QPS 的核心检索服务。