Hermes + Holographic:AI Agent 的"长期记忆"是如何工作的
大多数 AI 助手每次对话都从零开始。Hermes Agent 通过 Holographic 记忆插件,让 AI 真正拥有跨会话的结构化长期记忆------而且完全本地运行,不需要任何外部 API。
背景:AI 助手的"失忆"问题
用过 AI 助手的人都有这个感受:每次新开一个对话,它就像失忆了一样,什么都要重新解释。你的技术栈、你的偏好、上周讨论过的项目------全没了。
Hermes Agent 的内置记忆(MEMORY.md / USER.md)解决了一部分问题:把关键信息写成 Markdown 文本,每次对话时注入到 prompt 中。但这种方式有明显局限------
- 文本量大时会占用大量 context window
- 无法做精确检索,只能全量加载
- 没有"知识之间的关联性"
Holographic 记忆插件是为解决这些问题而生的。
Holographic 是什么
Holographic 是 Hermes 的一个本地记忆扩展插件,名字来源于认知科学中的 HRR(Holographic Reduced Representations,全息降维表示) 理论(Plate, 1995)。
核心特点:
- 📦 纯本地 --- 基于 SQLite,零依赖,不需要任何外部 API 或云服务
- 🧮 向量化存储 --- 每条事实都有对应的 HRR 相位向量
- 🔍 三路混合检索 --- FTS5 全文搜索 + Jaccard 词重叠 + HRR 向量相似度
- 📊 信任评分系统 --- 每条记忆有动态 trust score,可通过反馈训练
- 🏷️ 实体关联 --- 自动提取命名实体,支持多实体组合推理
架构:两层记忆并行工作
启用 Holographic 后,Hermes 实际上运行着两套互补的记忆系统:
scss
Hermes Agent
├── 内置 Memory (MEMORY.md / USER.md)
│ ├── 形式:Markdown 文本
│ ├── 适合:用户偏好、环境配置等轻量信息
│ └── 机制:每次对话全量注入 prompt
│
└── Holographic (memory_store.db)
├── 形式:结构化 facts + HRR 向量
├── 适合:项目知识、复杂关联、可推理的事实
└── 机制:按需检索,trust score 过滤
两个层级同时工作,互补而不替代。
HRR:向量符号架构的核心原理
HRR 是 Holographic 最独特的部分,值得深入理解。
基本思想
传统向量表示(如 word embedding)把词映射到向量空间,但很难表达关系。比如"KEN 使用 Kubernetes"这种结构化知识,用普通向量很难编码。
HRR 用三个代数操作解决了这个问题:
css
bind(A, B) → 相位相加 = 把两个概念"绑定"成一个复合概念
unbind(M, A) → 相位相减 = 从记忆中取回与 A 关联的概念
bundle(A,B,C) → 相位均值 = 把多个概念"叠加"成一个超级向量
Holographic 的实现方式
每个词通过 SHA-256 生成确定性的相位向量(1024 维),跨进程、跨机器完全一致:
python
def encode_atom(word: str, dim: int = 1024) -> np.ndarray:
"""确定性相位向量 --- 同一个词永远映射到同一个向量"""
uint16_values = []
for i in range(math.ceil(dim / 16)):
digest = hashlib.sha256(f"{word}:{i}".encode()).digest()
uint16_values.extend(struct.unpack("<16H", digest))
phases = np.array(uint16_values[:dim]) * (2π / 65536.0)
return phases
一条事实文本通过对词向量执行 bundle(叠加)操作,得到整句话的语义表示,存入数据库的 hrr_vector 字段(BLOB 格式)。
检索流程:三路混合打分
当需要从记忆库中查找相关事实时,Holographic 执行一个三阶段流水线:
yaml
输入 Query
│
▼
Stage 1: FTS5 全文搜索 (SQLite 原生)
│ 取 limit×3 个候选
▼
Stage 2: 三路重排序
├── FTS5 匹配分 × 0.4
├── Jaccard 词重叠 × 0.3
└── HRR 向量相似度 × 0.3
│
▼
Stage 3: Trust Score 加权
│ final_score = relevance × trust_score
▼
返回 Top-K 结果
这个设计很聪明:FTS5 保证关键词精确匹配,Jaccard 处理同义词覆盖,HRR 捕捉语义相近但词面不同的情况。三路互补,没有任何单一方法能独立做到这个效果。
信任评分:让记忆自我进化
每条事实默认 trust_score = 0.5。每次被检索和使用后,可以通过 fact_feedback 工具给反馈:
ini
标记 helpful → trust_score += 0.05
标记 unhelpful → trust_score -= 0.10
分值范围限制在 [0.0, 1.0],检索时默认过滤 trust_score < 0.3 的事实。
效果:准确的记忆不断被强化,过时或错误的记忆逐渐沉底,最终自动被过滤掉。这是一个简洁但有效的自我进化机制。
与 Hermes 的集成方式
Holographic 通过 MemoryProvider 接口挂入 Hermes 的会话生命周期:
ini
Session 开始
→ MemoryManager 加载 HolographicMemoryProvider
→ 注册两个新工具到对话:
• fact_store (9种操作)
• fact_feedback (训练 trust score)
对话中
→ AI 可调用 fact_store(action="add") 主动存入事实
→ 调用 fact_store(action="probe", entity="KEN") 取回某人所有相关事实
→ 调用 fact_store(action="reason", entities=["KEN","K8s"]) 多实体组合查询
Session 结束 (on_session_end hook)
→ auto_extract=true 时,自动从对话提取值得记住的事实
→ 写入 memory_store.db
fact_store 支持的 9 种操作覆盖了完整的知识管理需求:
| 操作 | 用途 |
|---|---|
add |
存入一条新事实 |
search |
关键词混合检索 |
probe |
取回某实体的所有相关事实 |
related |
查找与某实体结构上相邻的事实 |
reason |
多实体组合推理查询 |
contradict |
查找互相矛盾的事实(记忆卫生) |
update |
更新已有事实 |
remove |
删除事实 |
list |
枚举所有事实 |
实际效果:测试验证
在我的环境中,整个链路的测试结果如下:
bash
# 初始化 provider,写入一条事实
provider.initialize('test-session-001')
result = provider.handle_tool_call('fact_store', {
'action': 'add',
'content': 'KEN 是 Lead Cloud DevOps Engineer,偏好中文交流,位于中国',
'category': 'user_pref',
'tags': 'ken,profile,devops'
})
# → {"fact_id": 1, "status": "added"}
# 检索
result = provider.handle_tool_call('fact_store', {
'action': 'search',
'query': 'KEN DevOps'
})
# → {"results": [{"fact_id": 1, "content": "KEN 是 Lead Cloud DevOps Engineer...",
# "trust_score": 0.5, "score": 0.316}], "count": 1}
写入、检索全部正常,SQLite 原生,零网络请求。
开启方法
只需两步:
bash
# 1. 设置 provider 为 holographic(无需 API key)
hermes config set memory.provider holographic
# 2. 开启自动提取(session 结束时自动从对话中提取事实)
hermes config set plugins.hermes-memory-store.auto_extract true
可选配置(写入 config.yaml):
yaml
plugins:
hermes-memory-store:
auto_extract: true
default_trust: 0.5 # 新事实初始信任分
min_trust_threshold: 0.3 # 检索时过滤阈值
temporal_decay_half_life: 0 # 时间衰减(0=关闭)
hrr_dim: 1024 # 向量维度
总结
Holographic 给 Hermes 带来的不只是"记住更多东西",而是一套有结构、可推理、能自我进化的知识管理系统:
- HRR 向量让语义相似的记忆可以被找到,即使关键词不同
- 三路混合检索平衡了精确性和语义召回
- trust score让记忆质量随使用自动提升
- 实体关联支持"关于 KEN 的所有事实"这类结构化查询
- 纯本地 SQLite,隐私安全,无外部依赖
这个架构的设计哲学值得借鉴:不是用 RAG + 向量数据库的重型方案,而是用 SQLite + FTS5 + 简洁的 HRR 代数,在极低复杂度下实现了相当强大的功能。
本文基于 Hermes Agent v0.11.0 实测,Holographic 插件版本 0.1.0。