2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Hermes 的记忆层有 8 种实现,我为什么选了最反常识的那个

发布日期:2026-07-05 17:40:46 浏览次数: 1541
作者:极客工具 XTool

微信搜一搜,关注“极客工具 XTool”

推荐语

Hermes Agent 记忆层有 8 种实现,作者为何独爱最反常识的 Holographic 方案?本文带你一探究竟。

核心内容:
1. Hermes 记忆层八种方案的对比与排序逻辑
2. 三种存储范式背后的哲学差异
3. Holographic 方案的优势与选择理由

杨芳贤
53AI创始人/腾讯云(TVP)最具价值专家

最近在折腾 Hermes Agent,发现一个有意思的事:它的记忆层不是一个方案,而是 8 个可以热插拔的 Provider

存储方式从最古老的 Markdown 文件,到最时髦的知识图谱;部署方式从一个 SQLite 文件,到一整套云端托管。更骚的是,其中有一个叫 Holographic 的,既不用向量,也不用图谱,用的是一种我大学数值分析课上睡过去的数学——HRR(Holographic Reduced Representations)。

用了一圈之后,我把默认配置改成了 Holographic。这篇就来聊聊为什么。

先把 8 个方案摆上桌

Hermes 的 Memory Provider 设计很克制——它没想给你"一个打天下"的方案,而是承认不同场景需要不同的存储和检索策略。

我按"有多轻"排了个序,从最轻到最重:

       
                                           
排名Provider存储后端数据结构部署方式初始化
1HolographicSQLiteHRR 代数向量 + 事实三元组纯本地零配置
2ByteRoverMarkdown 文件树层级知识树(L0/L1/L2)本地优先 + 可选云同步装 CLI
3HindsightPostgreSQL知识图谱 + 事实 + 实体本地 daemon / Dockerhermes memory setup
4OpenViking自托管文件数据库文件系统层级跑 openviking-server启动服务
5Mem0Qdrant / pgvector向量嵌入 + 图谱云端 / Docker Compose简单设置
6HonchoPostgreSQL + Redis用户表示 + 会话摘要云端 / Docker/K3s配置较复杂
7RetainDB云端托管数据库向量 + BM25 索引仅云端API Key
8Supermemory云端托管数据库向量 + 会话图谱仅云端API Key
       
     

排序逻辑很简单:外部依赖越少越轻,初始化越傻瓜越轻,检索越不依赖 LLM 越轻

三种存储范式,三种哲学

把 8 个方案按存储方式归类,会发现它们其实代表了三种完全不同的"记忆哲学"。

范式一:文档即记忆(Markdown)

代表:ByteRover、Hermes 自带的 MEMORY.md

最朴素也最人本的设计——记忆就是一堆 Markdown 文件,你能读,Agent 也能读。


    
    
    
  .brv/context-tree/
├── authentication/
│   ├── context.md          # 域级概览
│   └── jwt-implementation/
│       └── context.md      # 主题级概览

ByteRover 的聪明之处在于分层加载:L0 摘要(100 tokens)→ L1 概览(2K tokens)→ L2 全文。Agent 先看摘要,需要细节再深入,官方说能省 80-90% 的 token。

优点:透明、可读、可 Git 版本控制、离线可用。 缺点:检索基本靠关键词或 LLM 读全文,模糊语义搜索是短板。

范式二:向量即记忆(Vector)

代表:Mem0、Honcho、RetainDB、Supermemory

当下最主流的方案。把每条记忆 embedding 成向量,检索时算余弦相似度。

Mem0 是这个流派的明星(GitHub 25k+ stars),管线很清晰:


    
    
    
  对话 → LLM 提取事实 → 冲突检测去重 → 存入向量库 → 检索时向量召回 + reranker

优点:模糊语义搜索强,"类似这样的有哪些"这种问题答得好。 缺点:要么自己跑 Qdrant/pgvector,要么上云端付钱;检索精度其实不如宣传的那么神——LongMemEval 基准上 Mem0 只有 67.6%,是所有方案里最低的。

范式三:图谱即记忆(Graph)

代表:Hindsight、Mem0 的图模式

不只是记事实,还记事实之间的关系。"小明养了橘子" + "橘子是一只猫" + "猫通常讨厌洗澡" ——图谱能推理出"小明家可能需要宠物沐浴服务"这种跨三条边的关联。

Hindsight 是这条路的标杆,本地嵌入式 PostgreSQL + 知识图谱 + 多策略检索(语义 + BM25 + 图谱 + 时序)+ reranker,LongMemEval 拿到 94.6%。

优点:复杂关系推理强,支持时序演变。 缺点:最重——要 PostgreSQL,要 LLM 抽实体关系,检索延迟最高。

番外篇:代数即记忆(HRR)

代表:Holographic(独一份)

这就是那个反常识的方案。它既不算向量,也不算图谱,而是把记忆表示成可叠加的复值向量,检索时不是算相似度,是直接做代数运算。

我第一次看文档的时候反应是:"这不就是数值分析课睡过去那节课的内容吗?"

但用起来真的很爽。

Holographic 实测:亚毫秒检索是怎么做到的

讲点真实使用体验。

一条命令开跑


    
    
    
  hermes memory setup   # 选 holographic
hermes config set memory.provider holographic

它需要的东西只有两样:

  • • ✅ SQLite(Python 自带)
  • • ✅ NumPy(可选,没有的话降级到 FTS5)

不需要:Docker、PostgreSQL、Redis、Qdrant、API Key、云账号、网络连接。

所有数据存在 ~/.hermes/memory_store.db 一个文件里。

HRR 代数检索到底在干嘛

这个我多花点篇幅讲,因为这是 Holographic 最特别的地方,也是文档里语焉不详的部分。

先回顾传统向量检索怎么工作:

  1. 1. 用预训练模型(BGE、OpenAI embedding)把每条记忆 embedding 成一个向量
  2. 2. 你提一个问题,把问题也 embedding
  3. 3. 把问题向量和库里每一条算余弦相似度
  4. 4. 取最相似的 top-k 返回

复杂度 O(N×D):N 是库里记忆条数,D 是向量维度。记忆越多,查询越慢。而且离不开一个预训练 embedding 模型。

HRR 走了完全不同的路——没有预训练模型,也没有向量库。它靠哈希函数实时生成向量,把所有记忆叠加进同一个 1024 维向量里,查询时直接"解出"答案。

第 0 步:每个词的 1024 维向量从哪来?

这是最反常识的点。传统 RAG 要靠大模型预训练生成词向量;HRR 完全不用——它对每个单词用一个固定的哈希函数实时算出来


    
    
    
  DIM = 1024  # 源码里硬编码的全局常量

def
 encode_atom(word: str):
    # 1. 拿单词文本做 SHA256,算出固定随机种子

    seed = int(sha256(word.encode()).hexdigest()[:16], 16)
    # 2. 用这个种子生成 1024 维的随机相位向量

    rng = np.random.default_rng(seed)
    return
 rng.uniform(0, 2*np.pi, size=DIM)

两个关键性质:

  • 确定性:同一个词(比如 橘子),不管什么时候、重启多少次程序,算出来的 1024 维向量永远一模一样——因为种子来自哈希。
  • 近似正交:不同单词的哈希种子不同,生成的向量在 1024 维空间里天然几乎垂直(相似度接近 0)。这是 HRR 卷积运算的数学前提。

这些向量不存磁盘。运行时在内存里开个 cache = {单词: 向量} 字典,第一次用到某个词就算一次塞进去,下次直接读。重启清空也没关系,再算一遍还是同一个向量。

存的时候:把事实揉成向量,全部相加

每条事实先拆成 (主语, 关系, 宾语) 三元组。比如存"小明养了橘子":

  1. 1. 拆三元组:(小明, 养了, 橘子)
  2. 2. 三个词分别 encode_atom 拿到 3 个 1024 维向量(缓存命中就直接读)
  3. 3. 用圆周卷积 把三个向量揉成一个 binding(仍然 1024 维):
    
        
        
        
      binding = vec(小明) ⊛ vec(养了) ⊛ vec(橘子)
  4. 4. 把这个 binding 加到全局记忆向量 M 上
    
        
        
        
      M = M + binding
  5. 5. 落盘:原始三元组文本和 binding 写进 SQLite 的 fact_store 表,更新后的 M 写进 hrr_global_state 表(只有一行,专门存这 1024 个浮点数)。

最关键的一步来了——所有事实的 binding 直接相加,全部叠进同一个 1024 维向量 M:


    
    
    
  M = binding(小明养了橘子)
  + binding(橘子讨厌洗澡)
  + binding(小明给橘子梳毛)
  + ...

不管你存了多少条事实,M 永远是 1024 维。所有记忆都"叠"在这一个向量里,互相干扰但能近似恢复。这是 HRR 最反直觉的地方:信息不是按条目存的,而是按叠加存的。

查的时候:给一个 cue,反卷积解出答案

你想知道"小明养了什么",构造一个 cue(提示向量):


    
    
    
  cue = vec(小明) ⊛ vec(养了)          # 用相同的卷积运算造钥匙
result = unbind(M, cue)              # 反卷积,把答案分量"解"出来

数学上,反卷积会"对齐"到当初绑定时用的 vec(橘子) 这个分量;其他事实因为是用不同的 key 绑定的,对齐后变成背景噪声。最后把 result 跟 cache 里所有原子向量(小明、橘子、洗澡、梳毛……)算一次相似度,最接近的就是答案——橘子。

为什么能做到亚毫秒

整个查询就是几次固定大小的向量运算(卷积 + 反卷积 + 点积),没有"扫表"这一步。复杂度是 O(D),D 固定为 1024。无论库里有 100 条还是 10 万条事实,单次查询的计算量完全一样。

加上 M 常驻内存(SQLite 那份只是持久化备份,重启时加载回内存),实际查询连磁盘都不用读。

这就是"亚毫秒"的来源——它把检索问题变成了固定维度的代数运算

代价是:它是精确匹配友好,模糊查询不友好。问"小明养了什么"答得好,因为这是按 key 取 value;问"类似橘子的宠物有哪些"答不上来,因为原子向量是随机哈希生成的,词与词之间没有语义关系橘子 的向量相似度,跟 橘子键盘 的相似度一样,都接近 0)。

双引擎:HRR + FTS5

Holographic 其实很务实,没把宝全押在 HRR 上。它内部是混合检索:

       
                                           
引擎擅长操作
HRR 代数实体关系组合查询probe / related / reason / contradict
FTS5 全文关键词模糊匹配search
       
     

9 个操作里有 4 个是 HRR 独门的,剩下的是常规 CRUD + 关键词搜索。

信任评分:非对称惩罚的小心思

每条事实有一个 0.0–1.0 的 trust 分数,默认 0.5。用户反馈:

  • helpful → trust += 0.05
  • unhelpful → trust -= 0.10

注意惩罚是奖励的两倍。这是个聪明的设计——记忆系统最大的敌人不是漏记,而是噪音累积。一旦确认错误,要快速清掉;确认有用,慢慢加。

这个理念和我之前研究 OpenClaw 的 Dreaming 巩固机制是相通的:重要的事说三遍才记住,错的事一次就纠偏

一段真实的使用

举个跟工作无关的例子——假设你要 Agent 帮你管理宠物信息,让它记几条事实:


    
    
    
  > fact_store(action='add', content='小明养了橘子')
> fact_store(action='add', content='橘子讨厌洗澡')
> fact_store(action='add', content='小明每周给橘子梳毛')

下次会话,Holographic 自动从这些事实里抽出实体:小明橘子洗澡梳毛。然后你可以这么查:


    
    
    
  > fact_store(action='reason', entities=['小明', '橘子'])
→ 返回:"小明养了橘子" + "小明每周给橘子梳毛"

reason 是 HRR 的杀手锏——它能回答"同时涉及 A 和 B 的事实"。这是纯关键词搜索做不到的,因为单条事实里可能根本没同时出现这两个词。

SQLite 里能看到什么


    
    
    
  sqlite3 ~/.hermes/memory_store.db \
  "SELECT fact_id, content, trust_score FROM facts ORDER BY trust_score DESC LIMIT 10;"

    
    
    
  fact_id | content                       | trust_score
--------+-------------------------------+------------
f_0042  | 小明每周给橘子梳毛              | 0.65
f_0039  | 橘子讨厌洗澡                    | 0.55
f_0038  | 小明养了橘子                    | 0.50

清清楚楚,没有任何黑盒。这一点对我是决定性的——我不希望我的"记忆"是一坨我自己都看不懂的向量矩阵。

我选 Holographic 的真实理由

讲了这么多技术细节,说点朴素的。

1. 我是懒人。 配 PostgreSQL、写 Docker Compose、注册云账号、申请 API Key——这些事每多一步,"用起来"的概率就降一半。Holographic 零配置,装好 Hermes 就能用。

2. 经常离线。 飞机上、高铁上、咖啡馆破 Wi-Fi,都是常态。云端方案在这些场景下直接报废。

3. 想要数据主权。 我的记忆是我的。一个 SQLite 文件,我能备份、能 Git 跟踪、能用 sqlite3 命令查、能写脚本批量改。换成云端服务,这些自由都没了。

4. 性能足够。 几百条事实的库,HRR 运算几乎瞬时。我又不是要在亿级数据上做实时推理。

5. 概念优雅但门槛低。 HRR 数学很深,但我不用懂也能用——add/search/reason 三个操作覆盖 90% 场景。

但它确实有短板

不说缺点就是软文了。

模糊语义搜索不行。 "类似 XXX 的东西有哪些"这类问题,Holographic 的 FTS5 经常答非所问。如果你重度依赖语义召回,去用 Mem0 或 Hindsight。

单用户设计。 SQLite 文件锁不支持并发写,多 Agent 同时往里塞事实会有竞争。团队场景老老实实上 Hindsight 或 ByteRover Cloud。

数据量天花板。 没做分片,几十万条会掉性能。但说实话,个人用户很难撞到这个上限——你一辈子能产生多少条值得记住的事实?

记忆提取靠会话后批处理。 不像 Mem0 有服务端 LLM 实时抽取,Holographic 默认是会话结束时一次性提取(auto_extract),实时性弱一些。

选型决策树

把所有方案压缩成一句话:

  • 追求极致轻量、离线、可控Holographic(你正在看的这篇)
  • 想要 Markdown 透明 + Git 版本控制ByteRover
  • 要图谱推理 + 高精度(94.6%)Hindsight
  • 自托管团队、要省 tokenOpenViking
  • 最快启动、懒得管Mem0 云端版
  • 多 Agent 深度用户建模Honcho

如果还是选不出来,就用 Holographic 跑两周,跑下来你会发现——大部分人的记忆需求,根本用不到知识图谱和向量数据库。

写在最后

Hermes 这套 8 Provider 的设计给我一个启发:记忆系统没有银弹,但有合适的 trade-off

向量数据库很酷,知识图谱很美,但"我的记忆存在一个我能打开的 SQLite 文件里,亚毫秒检索,零依赖,离线可用"——这种朴素的安全感,是任何花哨方案都换不来的。

至少对我这种个人用户,够了。


你现在的 Agent 用的是什么记忆方案? 还是根本没配?留言聊聊,我很好奇大家在这块踩过什么坑——尤其是从向量数据库换回 Markdown 的反向操作,是不是只有我一个人。

本文基于 Hermes Agent 官方文档与源码分析,HRR 原理参考 Plate 1995 的原始论文。所有命令与配置已实测。

                 

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅