Memvid CLI Docker 镜像使用指南:用容器跑通 AI 记忆库的创建、检索与问答
【免费下载链接】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 的"单文件记忆层",而memvid/cliDocker 镜像把它的命令行工具封装成了开箱即用的容器化方案:无需安装 Node.js、无需管理依赖,一条docker run即可完成记忆库创建、文档导入、语义检索与 RAG 问答。本文以 docker/cli/README.md 为骨架,结合镜像 Dockerfile、TESTING.md 与仓库源码(如 MV2_SPEC.md),系统讲解镜像的获取、全部命令用法、API Key 注入、Shell 别名、Compose 编排、多架构测试与故障排查,读完即可在自己的工作流里直接落地使用。
快速开始:三分钟跑通第一个记忆库
Memvid CLI 镜像的核心工作模式是容器无状态 + 宿主机目录挂载:记忆库文件(.mv2)保存在宿主机挂载目录中,容器退出(--rm)后不留任何残留数据。以下三步即可创建记忆库、写入文档并完成检索:
# 1. 拉取镜像 docker pull memvid/cli # 2. 创建记忆库(当前目录挂载为容器内的 /data) docker run --rm -v $(pwd):/data memvid/cli create my-memory.mv2 # 3. 导入文档 docker run --rm -v $(pwd):/data memvid/cli put my-memory.mv2 --input doc.pdf # 4. 语义检索 docker run --rm -v $(pwd):/data memvid/cli find my-memory.mv2 --query "search"要点说明:
-v $(pwd):/data是必选项:镜像内工作目录为/data(见 Dockerfile),所有.mv2文件都读写于此。不挂载目录意味着容器退出后记忆库即丢失。--rm建议保留:Memvid 设计为单文件存储、无守护进程、无外部数据库,容器用完即焚是符合其"serverless"定位的最佳实践。- 上述命令中
doc.pdf会经镜像内置的文档解析能力提取文本后写入记忆库,这一能力对应 Rust 核心库 Cargo.toml 中默认启用的pdf_extract等特性。
基础命令全解:help / version / create / put / find / ask / stats
| 命令 | 作用 | 典型参数 |
|---|---|---|
(无参数) | 显示帮助 | — |
--version | 显示 CLI 版本 | — |
create <name>.mv2 | 创建记忆库文件 | 文件名为.mv2单文件 |
put <name>.mv2 --input <path> | 导入文档/目录 | --input支持文件或目录 |
find <name>.mv2 --query "<text>" | 语义 + 词法混合检索 | --query指定查询词 |
ask <name>.mv2 "<question>" | RAG 问答(需 LLM API Key) | -m openai指定模型提供方 |
stats <name>.mv2 | 查看记忆库统计信息 | — |
# 显示帮助 docker run --rm memvid/cli # 显示版本 docker run --rm memvid/cli --version # 创建记忆库文件 docker run --rm -v $(pwd):/data memvid/cli create my-memory.mv2 # 导入单个文档 docker run --rm -v $(pwd):/data memvid/cli put my-memory.mv2 --input document.pdf # 检索记忆库 docker run --rm -v $(pwd):/data memvid/cli find my-memory.mv2 --query "search term" # RAG 问答(需要 OPENAI_API_KEY,-m openai 指定模型) docker run --rm -v $(pwd):/data \ -e OPENAI_API_KEY="sk-..." \ memvid/cli ask my-memory.mv2 "What is this about?" -m openai # 查看统计信息 docker run --rm -v $(pwd):/data memvid/cli stats my-memory.mv2关于.mv2单文件格式:create生成的文件并不是普通文本,而是一个自包含的二进制容器。根据仓库 MV2_SPEC.md 的格式规范,.mv2文件内部按顺序组织为:4KB 文件头(含 magicMV2\0、版本、WAL 偏移、TOC 校验和)、嵌入式 Write-Ahead Log(WAL)、数据段(帧内容,支持 Zstd/LZ4 压缩)、词法索引段(Tantivy)、向量索引段(HNSW)、时间索引段,以及末尾的 TOC(段目录 + SHA-256 校验和)。这意味着一个.mv2文件就同时承载了原始内容、全文索引、向量索引与崩溃恢复日志,这正是容器只需挂载一个目录即可运行的底层原因。
注入 API Key:解锁云端能力
ask命令做 RAG 问答时,需要 LLM 提供方的 API Key;Memvid 云端特性则通过 Memvid 自己的 Key 启用。两者均通过-e环境变量注入:
# 同时注入 Memvid 云 Key 与 OpenAI Key docker run --rm -v $(pwd):/data \ -e MEMVID_API_KEY="mv2_..." \ -e OPENAI_API_KEY="sk-..." \ memvid/cli ask my-memory.mv2 "your question"环境变量说明:
OPENAI_API_KEY:调用 OpenAI 系模型完成问答。对应 Rust 核心库 Cargo.toml 中api_embed特性(基于reqwest的 API 嵌入提供方),即文本向量化与问答推理走远程 API,本地仍负责存储与检索。MEMVID_API_KEY:启用 Memvid 云服务能力(如托管模型/云端功能),前缀通常为mv2_。
安全提示:请勿在脚本、日志或公开配置中硬编码 Key,建议通过 shell 变量、密钥管理工具或 Docker Secret 注入。原文档的 docker-compose 示例即采用
${MEMVID_API_KEY}这类环境变量占位符,详见下文。
Shell 别名(推荐):把容器命令变成原生命令
每次敲docker run --rm -v $(pwd):/data ...冗长且易错。官方推荐在~/.bashrc或~/.zshrc中添加别名,将memvid直接映射为容器调用,同时把两个 API Key 透传进来:
alias memvid='docker run --rm -v $(pwd):/data -e MEMVID_API_KEY -e OPENAI_API_KEY memvid/cli'注意这里的-e MEMVID_API_KEY -e OPENAI_API_KEY不带值,表示透传宿主机已导出的同名环境变量(若宿主机未设置则容器内为空)。配置后即可像本地命令一样使用:
memvid create my-memory.mv2 memvid put my-memory.mv2 --input docs/ memvid find my-memory.mv2 --query "hello"别名方式的收益:
- 自动挂载当前目录到
/data,无需每次手写-v; - 自动透传 Key,问答场景开箱即用;
- 与 npm 全局安装的
memvid-cli命令接口保持一致,切换部署方式时零成本。
Docker Compose 编排示例
对于需要常驻、定时任务或与业务服务共置的场景,可用 Compose 声明式管理。原文档示例(注意version字段在较新 Docker Compose 中可省略):
version: '3.8' services: memvid: image: memvid/cli:latest volumes: - ./data:/data environment: - MEMVID_API_KEY=${MEMVID_API_KEY} - OPENAI_API_KEY=${OPENAI_API_KEY} entrypoint: ["memvid"] command: ["stats", "my-memory.mv2"]结构拆解:
volumes: ./data:/data:把宿主机./data目录挂载为容器的记忆库目录,.mv2文件持久化于此;environment:从宿主机环境变量(.env文件或 shell 导出)读取 Key;entrypoint + command:与 Dockerfile 保持一致——镜像默认入口就是memvid,默认命令为--help;此处显式覆盖为stats my-memory.mv2,适合容器启动即执行一次统计/维护任务。
镜像构建细节:Dockerfile 逐层解读
镜像 Dockerfile 的构建逻辑清晰,值得逐层理解:
FROM ubuntu:24.04 # 基础镜像 # 安装 ca-certificates、curl、libssl3 # 经 nodesource 安装 Node.js 24 RUN npm install -g memvid-cli@latest && npm cache clean --force # 安装 CLI(版本固定策略见下) RUN useradd -m memvid # 创建非 root 用户 USER memvid # 切换非 root 运行 WORKDIR /data # 记忆库工作目录 ENTRYPOINT ["memvid"] # 默认入口 CMD ["--help"] # 默认命令值得注意的设计点:
- 非 root 运行:
USER memvid降低了容器提权风险;相应地,挂载目录需对memvid用户可写,否则会报权限错误(排查方法见下节)。 - 工作目录固定为
/data:所有命令都在该目录下操作,这也是-v $(pwd):/data挂载约定一致性的来源。 - 版本策略:当前 Dockerfile 使用
npm install -g memvid-cli@latest安装最新版,同时 LABEL 中声明了镜像版本(如2.0.131);若需可复现的固定版本,可将@latest改为具体版本号(如memvid-cli@2.0.131)。 - 镜像体积:CLI 镜像以 Node.js 运行时承载 npm 包
memvid-cli;而仓库内另一份 docker/core/Dockerfile 是面向 Rust 核心库memvid-core的多阶段构建镜像(编译lex,pdf_extract特性),两者定位不同:CLI 镜像面向最终用户命令行操作,core 镜像面向源码级示例与测试。
功能特性速览
镜像封装后的 CLI 能力清单(源自 docker/cli/README.md 的 Features 与仓库源码交叉印证):
- 单文件
.mv2存储:数据、索引、元数据全部在一个文件内,无 sidecar 文件,见 MV2_SPEC.md 的 "Single-file guarantee" 不变量; - 语义 + 词法混合检索:词法侧为 Tantivy 全文索引(BM25、短语查询、布尔运算),语义侧为 HNSW 向量索引(384 维、余弦距离),对应 Cargo.toml 中
lex与vec特性; - RAG 问答:
ask命令基于检索结果调用 LLM 生成回答; - 多格式文档支持:PDF、DOCX、图片、音频等。仓库 src/reader 目录下可见 PDF(
pdf.rs、pdf_extractor.rs)、DOCX(docx.rs)、PPTX(pptx.rs)、XLS/XLSX(xls.rs、xlsx.rs)等解析器,CLI 的put --input即调用此类能力完成内容抽取。
本地构建与验证:从源码到可测试镜像
若不想直接 pull,可本地构建并验证(完整步骤见 docker/cli/TESTING.md)。
1. 构建镜像
cd docker/cli docker build -t memvid/cli:test .2. 冒烟测试基本命令
docker run --rm memvid/cli:test --help docker run --rm memvid/cli:test --version3. 挂载目录端到端测试
mkdir -p /tmp/memvid-test && cd /tmp/memvid-test echo "This is a test document about AI and machine learning." > test.txt docker run --rm -v $(pwd):/data memvid/cli:test create test-memory.mv2 docker run --rm -v $(pwd):/data memvid/cli:test put test-memory.mv2 --input test.txt docker run --rm -v $(pwd):/data memvid/cli:test find test-memory.mv2 --query "AI" docker run --rm -v $(pwd):/data memvid/cli:test stats test-memory.mv24. 自动化测试脚本
仓库提供了开箱即用的 test.sh:构建镜像 → 测试--help/--version→ 在mktemp -d临时目录中创建记忆库并写入测试文档 → 清理临时目录。直接运行:
cd docker/cli ./test.sh5. 多架构测试(需 buildx)
# 创建 builder docker buildx create --name memvid-builder --use # 为指定平台构建并加载到本地 docker buildx build \ --platform linux/amd64 \ --tag memvid/cli:test-amd64 \ --load \ . # 验证 amd64 镜像 docker run --rm memvid/cli:test-amd64 --help说明:Dockerfile 底层依赖apt与 nodesource 安装脚本,多架构需在支持对应平台的 builder 上执行;构建流程属于仓库开发/测试环节,日常使用直接docker pull memvid/cli即可。
故障排查指南
镜像找不到(Image not found)
先确认是否已本地构建,或改用官方远端镜像:
# 本地构建后使用 test 标签 docker build -t memvid/cli:test docker/cli # 或直接使用官方镜像 docker pull memvid/cli挂载目录权限错误(Permission denied)
由于镜像以非 root 用户memvid运行(见 Dockerfile),挂载的宿主机目录必须对该用户可读可写:
chmod 755 /path/to/your/directory如果目录需要写入.mv2文件,可考虑更细粒度的chown或使用具名 volume(Docker 会自动处理权限)。
CLI 命令找不到(memvid: command not found)
验证 npm 包是否已正确安装进镜像:
docker run --rm memvid/cli:test which memvid若返回路径(如/usr/local/bin/memvid)则说明安装正常,问题出在命令调用方式;若为空,则镜像构建阶段npm install -g memvid-cli可能失败(可检查网络或 npm registry 可达性)。
总结:容器化单文件记忆库的落地姿势
Memvid CLI Docker 镜像将"serverless、单文件、可移植"的记忆层理念贯彻到了部署层:容器本身无状态,一切持久化都收敛到挂载目录里的.mv2文件。配合-v $(pwd):/data挂载、环境变量注入 API Key、Shell 别名与 Compose 编排,你可以把create / put / find / ask / stats这套记忆管理流水线无缝嵌入 Agent 工作流、CI 任务或定时批处理中;而.mv2文件内部由 WAL、Tantivy 词法索引与 HNSW 向量索引自洽组织(详见 MV2_SPEC.md),让"一个文件就是一座可检索的记忆库"真正开箱即用。需要深入源码时,可继续研读 docker/cli/TESTING.md 了解镜像验证体系,或在 src/memvid 与 src/search/tantivy 中探索检索与存储的底层实现。
【免费下载链接】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),仅供参考