Hermes Memory Provider 与 Mem0:被忽视的记忆抽象层,打通 Agent 间知识共享

如果你在用 Hermes Agent,你大概率只用到了它的文件记忆——MEMORY.mdUSER.mdSKILL.md。这本身已经很实用了:告诉它你的偏好,它记住;和它协作多了,它越来越懂你。但很多人不知道的是,Hermes 还藏着一个被严重低估的能力:Memory Provider 机制。它把“记忆存储”做成了可插拔的抽象层,让你的 Agent 不仅记住你,还能在不同 Agent 之间共享知识。对于需要多个 Agent 分工协作的企业场景,这是从“单兵作战”到“团队协作”的关键一步。

一、“等等,Hermes 还有这个功能?”

先讲一个真实的场景。你在 Hermes 里设了一个“代码审查 Agent”,告诉它你的代码规范:函数不超过 50 行、变量命名用完整单词、修改前必须先跑测试。用了两周,这个 Agent 已经熟悉你的偏好了。

然后你新建了一个“部署 Agent”,让它帮你写部署脚本。你可能会困惑——这个新 Agent 对之前的规范一无所知。你不得不从头教一遍。

更糟的是,如果你有三个 Agent——代码审查、部署、运维——它们各自有一份 ~/.hermes/ 下的记忆文件,互相隔离。这就是记忆孤岛问题:Agent 不是不够聪明,是被关在了自己的“记忆牢房”里。

很多人到这一步的反应是:“没办法,Agent 就这样吧。”但 Hermes 其实早就想好了这个问题。

Hermes 不只是用文件记东西。它有一个完整的 Memory Provider 机制——把“记忆存在哪”抽象成了可替换的接口。 内置文件存储(MEMORY.md 等)只是默认的实现。你完全可以接入一个外部的记忆服务,让多个 Agent 共享同一套记忆。

我不知道有多少 Hermes 用户知道这个功能的存在。我猜测,不多。因为“文件记忆”已经够用了,绝大多数教程写到“修改 ~/.hermes/config.yaml 配模型”就停下来了,不会深入去讲 memory.provider 这个配置项。

这个例子本身就是一个提醒:用好一个工具,不能停在“上手教程”层面。 工具的更新速度远快于教程。你今天看到的 Hello World,可能漏掉了三个月前新加的核心功能。Hermes 的 Memory Provider 早在 2026 年初的版本中就有了,但你在中文搜索里几乎找不到完整介绍。这不是功能不够好,是信息传播有滞后。学好基础、关注本体更新——这两件事比追着看各种“我用 XX 工具搭建了 XX 系统”的分享视频更有价值。

二、Memory Provider 机制详解

2.1 设计思路:内置记忆 + 外部 Provider 并存

Hermes 的记忆架构有一个巧妙的设计:内置文件记忆始终生效,外部 Provider 是叠加的补充。 不是“二选一”,是“都要”。

具体来说,当 Memory Provider 处于激活状态时,Hermes 会在每次对话中做以下六件事:

  1. 把 Provider 的上下文注入到系统提示词中
  2. 每轮对话前,从 Provider 异步预取相关记忆
  3. 将对话历史同步到 Provider
  4. 会话结束时自动提取记忆(如果 Provider 支持)
  5. MEMORY.mdUSER.md 的写入镜像同步到 Provider
  6. 向 Agent 暴露 Provider 专用的工具(如 mem0_searchmem0_profile 等)

你不需要改业务代码、不需要改 Prompt、不需要改变使用习惯。你只是多了一个“记忆后端”,多了一个“知识共享层”。

2.2 九大 Provider 一览

截至 2026 年 6 月,Hermes 内置了 9 个外部 Memory Provider。按部署方式和适用场景,我给它们分个类:

Provider 部署方式 核心能力 适合谁
Mem0 云端 / 自托管 自动事实提取、语义搜索、多租户隔离 企业场景(本文重点)
Honcho 云端 / 自托管 用户建模、辩证推理、会话摘要 跨会话用户理解
OpenViking 自托管 文件系统式知识层级、6 类记忆自动提取 开源自托管
Holographic 本地 SQLite FTS5 全文搜索、信任评分 完全本地、轻量
ByteRover 本地 / 可选云同步 层级知识树、预压缩提取、CLI 管理 本地优先带同步
Hindsight 云端 / 本地 pg 知识图谱、实体关系、跨记忆反思合成 需要图谱推理
RetainDB 云端 混合搜索(BM25+向量)、7 种记忆类型、增量压缩 需要高级搜索
Supermemory 云端 上下文隔离、会话图、多容器、用户画像注入 防止记忆污染
Memori 云端 结构化记忆、按项目/会话归属、后台录入 结构化场景

数量之多,超出大部分人的预期。而且每个 Provider 都有明确的设计哲学——不是“大而全”,而是“每个解决一类特定的记忆问题”。你需要知识图谱推理就上 Hindsight,需要完全本地化就上 Holographic,需要云原生多租户就上 Mem0 或 RetainDB。

2.3 局限:同一时间只能启用一个 Provider

Hermes 的一个限制是:同一时间只能激活一个外部 Memory Provider。内置文件记忆和外部 Provider 可以并存,但不能同时用两个外部 Provider(比如 Mem0 + Honcho 不能同时开)。

这个限制目前看是合理的——多个 Provider 同时注入上下文会把 System Prompt 撑爆。但如果你恰好在两个 Provider 之间犹豫,建议先按“适配度”而非“功能数量”来选:选最贴合你痛点的那一个。

三、重点讲 Mem0:企业自主 Agent 的记忆基础设施

为什么在九个 Provider 里重点聊 Mem0?因为它最贴合企业自主 AI Agent 流程的需求。当你在团队里部署 Agent 做正经事——不只是个人助手,而是多个 Agent 分工协作——你会遇到这些真实问题:

  • 记忆要跨 Agent 共享,但又要按 Agent 维度隔离
  • 记忆要持久化,不能重启就丢
  • 记忆要语义检索——靠关键词搜索找“用户偏好”是天方夜谭
  • 记忆要有审计日志(谁什么时候记了什么、改了什么)
  • 整个记忆系统要自托管,数据不出内网

Mem0 是为每一个需求设计的。它是目前 GitHub 上最活跃的 Agent 专用记忆层项目,被 Anthropic、LangChain 等多个团队推荐,API 设计简洁到可以用三行代码接进任何 Agent 框架。

3.1 Mem0 的记忆处理流程

当你调用 memory.add("用户喜欢简洁的命名风格") 时,Mem0 在后台做了五件事:

  1. 事实提取:调用 LLM 从文本中自动抽取结构化事实(实体:用户,关系:偏好,对象:简洁命名)
  2. 去重与合并:如果已有类似记忆,合并而非重复写入。避免了“同一个偏好被记了 20 遍”。
  3. 向量化:通过 Embedding 模型将记忆转为向量
  4. 入库:向量进 Qdrant(等向量库),元数据进 SQLite
  5. 历史记录:把本次操作写到 history 表——增删改全部有迹可查

检索时用的是三层混合策略

  1. 向量语义搜索——找语义相近的记忆(“命名规范”能匹配到“变量命名偏好”)
  2. BM25 关键词搜索——捕捉精确关键词匹配,弥补向量搜索的“约等于”偏差
  3. 实体过滤——按 user_idagent_id 维度过滤,实现多租户隔离

三路结果最后送入 Reranker 重排序,输出最相关的 Top-N 条记忆。这意味着注入到 Agent 上下文中的记忆,既相关又精简——不会浪费 Token。

3.2 多租户隔离:企业场景的原生能力

user_id + agent_id 的双维度隔离是 Mem0 对多 Agent 场景最有力的回答:

# Agent 代码审查
memory.add("函数不超过 50 行", user_id="team-backend", agent_id="code-reviewer")

# Agent 部署
memory.add("部署前必须跑冒烟测试", user_id="team-backend", agent_id="deployer")

# Agent 运维搜索记忆
results = memory.search("代码规范", user_id="team-backend", agent_id="maintainer")

搜索结果会保留 user_id=team-backend 维度的记忆,但也可以配置跨 Agent 共享。灵活度够高:可以全部隔离、可以按团队共享、可以全局共享。

3.3 自托管:数据不出内网

全链路自托管支持:

config = {
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "host": "qdrant-internal",
            "port": 6333
        }
    },
    "llm": {
        "provider": "openai",
        "config": {
            "model": "qwen2.5-7b-instruct",
            "api_base": "http://vllm-internal:8000/v1",
            "api_key": "not-needed"
        }
    },
    "embedder": {
        "provider": "huggingface",
        "config": {
            "model": "BAAI/bge-m3"
        }
    }
}

三个关键后端都可以本地化:

  • 向量存储:Qdrant / Milvus / ChromaDB / Weaviate
  • 提取 LLM:本地 vLLM 或 Ollama(不需要 GPT-4,一个小模型就能做好事实提取)
  • Embedding:BGE-M3 或本地 Embedding 模型

整套系统运行在内网,没有一行数据离开你的服务器。

四、动手:在 Hermes 中接入 Mem0

4.1 部署 Mem0

先起 Qdrant(向量数据库):

docker run -d --name qdrant -p 6333:6333 qdrant/qdrant

安装 Mem0:

pip install mem0ai

4.2 配置 Hermes 接入 Mem0

交互式配置最简单:

# 一步到位
hermes memory setup

选项列表会展示所有支持的 Provider,输入 mem0 选中。然后按提示填入 API Key(如果用云端)或自托管端点信息。

或者手动改配置:

# 设置 Provider
hermes config set memory.provider mem0

# 配置密钥(写入 ~/.hermes/.env)
echo "MEM0_API_KEY=your-key" >> ~/.hermes/.env
echo "MEM0_API_URL=http://your-mem0-server:8000" >> ~/.hermes/.env

# 配置用户标识(可选,在 ~/.hermes/mem0.json 中指定 user_id 和 agent_id)

4.3 验证:看记忆是否同步

配置后在 Hermes 中随便聊几句:

hermes chat "我们团队的后端服务统一用 Go 1.22+,部署在 K8s 上"
hermes chat "帮我写一个 K8s deployment 模板"

第二次对话后,检查记忆:

hermes chat "mem0_search: Go 版本要求"

如果回答正确,说明记忆已经入了 Mem0 并能被检索到。

4.4 多 Agent 验证

用 Hermes 的 Profile 机制(见前面的 Profile 文章),创建两个独立的 Agent 分身,然后让它们接入同一个 Mem0 实例——使用不同的 agent_id 但相同的 user_id

# Profile A(代码审查 Agent)
hermes -p code-reviewer config set memory.provider mem0

# Profile B(部署 Agent)
hermes -p deployer config set memory.provider mem0

现在在 Agent A 中记录的偏好,Agent B 也能检索到。记忆不再是孤岛。

五、为什么企业应该关注这个

到了这里,你可能觉得“不就是多加了一个后端,有什么大不了”。但把视角从“个人用户”切换到“企业 DevOps 团队”,你会发现这一步是质的飞跃。

5.1 从单 Agent 到多 Agent 的分水岭

个人使用场景:一个 Agent,一个项目,一个人。文件记忆够了。

团队使用场景:三个 Agent(审查、部署、运维),共享一个项目背景,记忆必须互通。文件记忆不够了。

Memory Provider 就是这道分水岭上的桥。 它让你不需要换工具、不需要改流程,只是多配了一个后端,就从“单 Agent 模式”切换到了“多 Agent 协作模式”。

5.2 审计与合规

文件记忆的记录是“改了就是改了”,没有历史版本。当团队在排查一个生产事故,需要追溯“Agent 是什么时候记住那个错误配置的”时,文件记忆回答不了。

Mem0 的 history 表记录了每次记忆操作的日志——什么时间、什么 Agent、做了什么修改。这在合规场景下是硬需求。

5.3 灵活切换,没有被锁定

Hermes 的 Provider 机制有一个被低估的优势:你可以在 Provider 之间切换,而不丢失记忆。 因为内置文件记忆始终生效——你即使换了 Provider,MEMORY.mdUSER.md 里的记忆还在。外部 Provider 是叠加层,不是替代层。

这降低了试错成本:你可以先用 Mem0 试试,不满意再换 Honcho 或 Holographic,文件记忆一直在。

六、完整架构:LiteLLM + Mem0 + Hermes

如果你看过之前的 LiteLLM 文章,这里给出一个企业 AI Agent 基础设施的完整拼图:

企业内网
│
├── 模型接入层:LiteLLM 网关
│   ├── 统一 OpenAI 兼容接口
│   ├── 多租户预算控制(按团队/项目)
│   ├── 自动 Fallback(公网→公网,内网→内网)
│   └── 成本追踪与审计日志
│
├── 模型推理层
│   ├── 本地 vLLM(Qwen / DeepSeek)
│   └── 公网模型(通过 LiteLLM 统一接入)
│
├── Agent 层:Hermes Agent
│   ├── Agent A(代码审查)── MyMemory Provider → Mem0
│   ├── Agent B(部署)───── MyMemory Provider → Mem0
│   └── Agent C(运维巡检)── MyMemory Provider → Mem0
│
└── 记忆层:Mem0 + Qdrant
    ├── 多 Agent 共享记忆
    ├── 多租户隔离(user_id / agent_id)
    ├── 混合检索(向量 + BM25 + Reranker)
    └── 操作审计日志

每一层解耦,每一层可替换。这就是“AI 基础设施”的思维:不锁定任何一个组件,不依赖任何一家厂商,所有能力内网闭环。

七、小结

写这篇文章,最想强调的其实不是 Mem0 多好用——虽然它确实好用——而是“你用的工具可能比你想象的更强大”这个事实。

Hermes 的用户里,有多少人知道它支持 9 种外部记忆后端?有多少人知道一个配置项就能解决多 Agent 知识共享?我相信比例不高。这不是用户的问题——工具迭代快,文档众多但分散,真正深入某个功能的人总是少数。但如果你想在企业里真正把 AI Agent 用起来,就不能停留在“我会用工具”的层面,而要进入“我理解工具的架构设计”的层面。

回到 Memory Provider,它的价值在于:把“Agent 的记忆”从“单个程序的附带功能”升级为“可以独立演进的基础设施能力”。 你今天用的是 Mem0,半年后可能换成更好的后端——Agent 代码不需要改。这才是好的抽象应该有的样子。

每天前进一小步,就是一个新的高度!