切换主题

Mnemo 本地记忆层:Ollama 长期记忆、部署与治理

Easton editorial illustration: portable local memory cartridge, local model terminal dock, SQLite graph index

"Mnemo GitHub README(2026-07-17 核验)用于确认项目定位、Docker + Ollama quickstart、当前 API、环境变量、Rust crate 架构、测试数量和 benchmark 口径。"

你的 Ollama 模型已经能回答问题了,但每次对话都从零开始。昨天聊过的项目决策、今天设置的偏好,明天全忘了。

这就是本地 LLM 的记忆缺失问题。Ollama 提供的是”能回答”的模型服务,但回答什么、记不记得你之前的约束,完全靠你每次手动复述。

Mnemo 不是再做一个 RAG。它用知识图谱 + 实体提取来管理长期记忆,让你的本地 LLM 能记住项目决策、实体关系,而不是每次都问你”这个 API 是做什么的”。

1. Mnemo 是什么:定位与核心能力

1.1 定位词解读

“local-first AI memory layer” 的关键在两个词:

  • local-first:数据存你本地,不上云,可迁移,不依赖某个 SaaS 的生死
  • memory layer:不是再做一个 RAG,也不是再做一个 agent 框架。它只负责”记忆”这件事 —— 实体提取、图谱构建、语义检索

举个例子:你问”这个项目的 API 基地址是什么”,纯向量搜索会返回一堆”API”相关的文档片段,但不知道你具体指哪个项目。图谱检索会追踪”项目 → API → baseUrl”的关系链,直接返回你之前设置的配置值。

但前提是实体提取正确。如果 LLM 把”API 基地址”误识别成两个实体(“API”和”基地址”),图谱会分裂,检索会断链。这是噪声积累的根源。

定位清楚了,下面看核心能力。

1.2 核心能力矩阵

Mnemo 的 README 列了四个核心能力:

  1. persistent knowledge graph(持久化知识图谱)

    • 实体、关系存 SQLite,不是一次性向量
    • 图谱结构可查询、可导出、可迁移
  2. entity extraction(实体提取)

    • 从对话里自动识别实体(人名、项目名、API 名、决策)
    • 不是纯向量检索,而是把”这个 API 的用途是什么”变成可查询的实体-关系结构
    • 实体提取的质量取决于 LLM 的理解能力。本地 LLM(如 llama3)在复杂对话中可能误识别,噪声积累是个持续风险。README 没给自动清理方案,你需要定期检查图谱质量
  3. semantic retrieval(语义检索)

    • 当前检索管线组合全文 chunk 搜索、实体名搜索、图扩展、关系过滤与评分排序
    • 图扩展结果会降权,直接命中的内容优先于推断关系,减少无边界的上下文扩张
  4. graph-first vs pure vector search

纯向量搜索是”查相似”,图谱检索是”查关系”。前者会返回一堆语义相似但无关的噪声,后者能追踪实体间的关系链。

对比一下会更清楚:

维度纯向量搜索Mnemo 知识图谱
检索逻辑相似度排序实体-关系追踪
噪声风险高(相似但无关)低(有实体锚定)
可解释性低(黑盒向量)高(可见图谱)
可迁移性向量难导出SQLite 可导出
适用场景文档检索项目记忆、实体关系

1.3 技术栈与许可证

技术栈:

  • Rust(四个 crates,见下一节)
  • SQLite(本地存储,WAL 模式)
  • petgraph(内存图谱)
  • OpenAI / Ollama / Anthropic API(LLM 后端)

许可证:MIT License(可用、可改、可分发)

风险提醒:

  • 早期项目(2026-06-05 GitHub README)
  • API、架构可能变化
  • 没有大规模生产验证
  • README 性能数据是自测,不是独立证明

2. 架构组成:四个 Rust crates

Mnemo 用 Rust 写成,拆成四个 crates,职责清楚:

mnemo-core:核心逻辑

  • 实体提取、图谱构建、检索逻辑
  • 不依赖具体 LLM 后端,只定义接口

mnemo-api:服务端

  • 提供 HTTP API(默认端口 8080)
  • 接收对话、调用 core、返回结果
  • 健康检查:curl http://localhost:8080/health

mnemo-cli:命令行工具

  • 调试、管理、查询
  • 通过 HTTP 调用 Mnemo API,便于从终端写入、检索、查看实体和清空记忆

mnemo-bench:性能测试

  • README 的 122 Rust tests、21 Python tests、12 benchmarks 都在这里
  • 自测数据来源

拆成四个 crate 的好处:

  • core 可以单独测试,不依赖 API
  • cli 方便本地调试,不需要起服务
  • bench 独立,不影响生产代码

不好的地方:

  • 需要完整 Rust 工具链才能编译(除非用 Docker)
  • crate 间 API 变化时,可能要同步改多处

3. 安装部署:三种路径

Mnemo 提供三种部署方式,按复杂度排序:

3.1 Docker + Ollama(最快上手)

前提:已安装 Docker、Ollama。

# 1. clone 项目
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo

# 2. 启动 Docker
docker compose up -d

# 3. 拉模型(在 Docker 内)
docker exec mnemo-ollama ollama pull llama3

# 4. 健康检查
curl http://localhost:8080/health

注意:命令可能变化,请以 GitHub README 为准。

说明:Docker compose 会启动两个容器——mnemo-api(服务端)和 mnemo-ollama(Ollama)。后者是可选的。如果你本地已经有 Ollama 运行,可以只用 mnemo-api 容器,通过 MNEMO_LLM_BASE_URL=http://host.docker.internal:11434/v1 连接本地 Ollama。

验证 LLM 连接:健康检查返回 {"status":"ok"} 时,说明 API 已启动,但还没验证 LLM 连接。用 curl 发一个测试请求:

curl -X POST http://localhost:8080/ingest \
  -H "Content-Type: application/json" \
  -d '{"content":"项目 Atlas 的 API 基地址是 https://api.example.test","source":"chat","session_id":"mnemo-trial"}'

如果写入成功,再调用 /retrieve 验证召回:

curl -X POST http://localhost:8080/retrieve \
  -H "Content-Type: application/json" \
  -d '{"text":"Atlas 的 API 基地址是什么?","session_id":"mnemo-trial"}'

返回包含相关实体、记忆块或 context_prompt,才说明 LLM 提取与检索链路都正常。

优点:

  • 不需要 Rust 工具链
  • Docker 自动处理依赖
  • Ollama 和 Mnemo 在同一个 compose 网络,网络配置简单

缺点:

  • Docker 占用资源
  • 调试麻烦(要进容器查 SQLite)
  • 日志分散在两个容器

3.2 Binary(本地编译)

前提:已安装 Rust 工具链(cargo, rustc)、Ollama。

# 1. clone 项目
git clone https://github.com/zaydmulani09/mnemo.git
cd mnemo

# 2. 编译 API crate
cargo install --path crates/mnemo-api

# 3. 配置 Ollama 地址
export MNEMO_LLM_BASE_URL=http://localhost:11434/v1

# 4. 启动服务
mnemo-api

注意:命令可能变化,请以 GitHub README 为准;这条路径需要 Rust 工具链。

说明:编译时间取决于硬件和 Cargo 缓存。编译成功后,mnemo-api 默认使用当前目录下的 mnemo.db;数据库路径也可以通过 MNEMO_DB_PATH 或 TOML 配置调整。

验证 Ollama 连接:启动前,先确认 Ollama 运行在 localhost:11434,并已拉取模型(ollama pull llama3)。启动后,用 curl 测试:

curl -X POST http://localhost:8080/ingest \
  -H "Content-Type: application/json" \
  -d '{"content":"测试 Mnemo 实体提取","source":"cli-check"}'

优点:

  • 不依赖 Docker
  • 调试方便(本地进程,日志在同一终端)
  • 可以直接用 mnemo-cli 操作本地 SQLite
  • 可以自定义端口、数据库路径(通过环境变量)

缺点:

  • 需要完整 Rust 工具链
  • 编译时间长(首次)
  • 依赖管理可能出问题(cargo.lock 可能过期)

3.3 OpenAI-compatible(云端 LLM)

前提:有 OpenAI / Anthropic / 其他 OpenAI-compatible API key。

环境变量清单(按 2026-06 GitHub README 核验):

export MNEMO_LLM_BASE_URL=https://api.openai.com/v1
export MNEMO_LLM_API_KEY=sk-...
export MNEMO_LLM_MODEL=gpt-4o-mini
export MNEMO_LLM_PROVIDER=openai

然后启动:

mnemo-api

注意:环境变量名可能变化,请以 GitHub README 为准。

适用场景:

  • 本地算力不够,用云端 LLM
  • 已有 OpenAI API 额度
  • 不介意数据上传到云端(注意:用云端 LLM 时,对话内容会上传到云端 API,local-first 的隐私优势只对本地存储有效)

三种路径,按你的实际情况选一种。下面看一下性能数据。

4. 性能表现:README 自测数据

Mnemo 的 README 列了性能自测数据(截至 2026-07-17 核验):

测试条件

  • Apple M2(debug build)
  • SQLite WAL 模式
  • petgraph 在内存

性能数据

  • 完整检索管线:约 4.2 ms
  • Release build 声称快 3-5 倍(约 0.8-1.4 ms)

注意:这是 README 自测,不是独立证明;性能会随硬件、数据量和 LLM 后端变化。

解读这些数字:

  • 4.2 ms 是”检索”时间,不含 LLM 推理(LLM 推理才是瓶颈)
  • SQLite WAL + 内存图谱的组合,检索确实快
  • 但这只是检索环节,不是”对话速度”

实际体验会取决于:

  • LLM 推理时间(比检索慢得多)
  • 对话内容长度(实体提取需要 LLM 推理)
  • 数据量(图谱越大,检索越慢)

建议:在目标硬件上跑 mnemo-bench,看实际数据。README 的数字只能当参考,不能当承诺。

5. Local-first 特性与边界

5.1 Local-first 优势

Local-first 的核心:数据在你本地,不上云。

具体优势:

  1. 隐私保护

    • 对话内容、实体、关系都存本地 SQLite
    • 不上传到第三方 SaaS(前提是用本地 LLM)
  2. 数据可控

    • SQLite 文件可导出、备份、迁移
    • 不依赖某个 SaaS 的生死(服务商倒闭,你的数据还在)
  3. 可迁移性

    • 换机器时,复制 SQLite 文件即可
    • 不需要重新”训练”记忆
  4. 可调试

    • SQLite 是标准格式,可用任何 SQLite 工具查看
    • 图谱结构可见,不是黑盒向量

5.2 潜在风险与边界

Local-first 有优势,但也有风险:

  1. 噪声积累

    • 实体提取不完美,会误识别
    • 误识别的实体会影响后续检索
    • 需要定期清理(但 Mnemo 没给自动清理方案)
    • 噪声积累不是 Mnemo 独有的问题,是所有自动记忆系统的通病。区别在于:Mnemo 的图谱可见,你可以看到噪声实体、错误关系;向量系统的噪声藏在向量里,你看不到。这是图谱的优势,也是负担——你需要主动维护
  2. 撤回与恢复边界

    • 当前 API 支持删除单个实体、删除单个记忆块,也支持带确认头的全量 /wipe
    • 但它没有“撤销上一次写入”或按业务决策整体回滚的高层事务接口
    • 如果错误决策已经扩散成多个实体和关系,仍需要按来源或 session 定位影响范围,再逐项删除或从备份恢复
    • 建议:在关键决策存入前记录 sourcesession_id 和外部审计标识,并先在测试环境验证实体提取
  3. hidden state

    • 图谱结构复杂,可能存了你看不到的关系
    • 检索时可能返回你不知道为什么返回的结果
  4. 适用边界

    • 数据量大时,SQLite + 内存图谱会有压力
    • 多 agent 共享时还要自行补齐权限、多租户隔离和运维策略

5.3 适用 vs 不适用场景判断表

场景适用性原因
个人项目、小团队✓ 适用数据量小、隐私要求高、可迁移性好
大数据量(GB级)✗ 不适用SQLite + 内存图谱压力、噪声积累
团队协作(多人写)⚠ 有条件可通过同一 API 服务共享,但需自行验证权限、隔离和并发行为
强隐私要求✓ 适用数据不上云(前提是用本地 LLM)
需要全局共享记忆✗ 不适用local-first 是本地独占,不共享
已有 Ollama 环境✓ 适用直接集成,学习成本低
没有 Rust 工具链有条件用 Docker 路径,但调试麻烦

判断:如果你的场景是”个人项目、隐私要求高、已有 Ollama、数据量不大”,Mnemo 可以尝试。如果是”数据量大、团队协作、需要全局共享”,建议等 Mnemo 成熟或考虑其他方案。

具体建议:

  • 先在测试环境跑一遍 Docker 路径,看图谱结构、实体提取质量和检索效果
  • 用测试对话验证噪声风险,故意说一些无关内容,看 Mnemo 是否误识别
  • 准备清理方案,提前用 SQLite 工具熟悉图谱结构,知道怎么手动删错误实体
  • 关注 README 更新。早期项目的 API 和架构可能变化,部署命令也可能过期

6. 下一步:系列文章导航

如果你还没看过 Ollama 本地 LLM 系列的前面几篇,建议按顺序读:

  1. Ollama 入门:本地运行大语言模型的第一步

    • 如果还没装 Ollama,从这里开始
  2. Ollama API 调用:从 curl 到 OpenAI SDK 兼容接口

    • Mnemo 用 OpenAI-compatible API,需要了解 Ollama 的 API 接口
  3. Ollama Embedding 实战:本地向量检索与 RAG 搭建

    • 用这篇对照纯向量检索与 Mnemo 的全文检索、实体搜索和图扩展管线
  4. AI Agent 记忆管理:长期记忆与知识治理实战

    • Mnemo 是记忆层工具,这篇讲 Agent 记忆的治理思路

读完这四篇,再装 Mnemo,理解会更完整。下一步:在本地跑一遍 Mnemo 的 Docker 路径,看看知识图谱长什么样。

用 Docker 和 Ollama 跑通 Mnemo 最小验证

先在临时环境验证 Mnemo 的服务启动、模型连接、记忆写入、召回、持久化和清理能力,再决定是否接入主力 Agent。

⏱️ 预计耗时: 1-2 hours

  1. 1

    步骤 1: 克隆仓库并启动 compose

    按 GitHub README 克隆 mnemo 仓库,执行 `docker compose up -d`,确认 mnemo-api 和 mnemo-ollama 容器启动。
  2. 2

    步骤 2: 拉取测试模型

    在容器内执行 `docker exec mnemo-ollama ollama pull llama3`,或按当前 README 选择推荐模型。
  3. 3

    步骤 3: 检查 API 健康状态

    请求 `http://localhost:8080/health`,先确认服务本身可访问,再排查 LLM 连接。
  4. 4

    步骤 4: 写入一条测试记忆

    用 README 的 Python SDK 或 API 示例写入一条项目记忆,避免第一天直接接入真实主项目。
  5. 5

    步骤 5: 验证召回和重启持久化

    用自然语言查询刚写入的记忆,重启容器后再次查询,确认 SQLite 数据没有丢失。
  6. 6

    步骤 6: 演练删除和过期

    故意写入一条错误记忆,尝试删除、标记过期或重建图谱,确认后续回答不会继续引用旧事实。

常见问题

记忆会不会越存越多,最后全是垃圾?
会。Mnemo 的实体提取是自动的,LLM 可能误识别,噪声会积累。缓解方法是定期用 mnemo-cli 或 SQLite 工具清理,并设置实体过滤规则;但 README 没给完整自动清理方案,图谱质量仍需要人工维护。
Mnemo 比向量搜索好在哪?
核心差异是图谱检索和相似度排序。向量搜索查相似,容易返回相似但无关的片段;知识图谱查实体关系,有锚点、可解释,也更适合项目决策和实体关系。不过实体误识别会污染图谱,构建图谱也需要 LLM 推理。
Mnemo 出问题了能回滚吗?
当前 API 提供按实体和记忆块删除的端点,也提供带确认头的全量清空端点,但没有“撤销上一次写入”的事务式操作。试点时应保留来源和 session_id,并提前演练定点删除、备份与恢复。
Mnemo 支持哪些 LLM 后端?
README 说明它可以接 Ollama、OpenAI、Anthropic 或其他 OpenAI-compatible API。用云端 LLM 时,对话内容会上传到对应 API,local-first 的隐私优势只覆盖本地存储,不覆盖云端推理传输。
能不能多个 agent 共享一个记忆库?
可以让多个 agent 通过同一个 Mnemo API 服务读写同一记忆库,但 README 没有给出多租户隔离、权限边界或高并发保证。正式使用前应验证 session 隔离、写入冲突和敏感数据访问策略,不要让多个进程直接操作同一个数据库文件。
Mnemo 数据迁移怎么做?
先停止写入并备份 SQLite 数据库,再把数据库复制到新机器,以兼容配置启动 Mnemo。迁移后要检查 `/health`、实体数量、图关系和代表性召回结果;README 没有承诺跨版本数据库迁移兼容性,因此升级前还应保留可恢复备份。

11 分钟阅读 · 发布于: 2026年7月18日 · 修改于: 2026年7月19日

当前属于系列阅读第 18 / 18 篇

Ollama 本地 LLM 实战指南

如果你是从搜索进入这篇文章,建议顺手补上上一篇或继续下一篇,这样更容易把同一主题读完整。

查看系列总览

相关文章

BetterLink

想持续收到这个主题的更新?

你可以直接关注作者更新、订阅 RSS,或者继续沿着系列入口往下读,避免下次又回到搜索结果重新找。

关注公众号

评论

使用 GitHub 账号登录后即可评论

Easton BlogEaston Blog