AI 代理的长期记忆能力一直是制约其实用化的关键瓶颈。传统对话系统依赖有限的上下文窗口,每次重启后用户需重新交代背景信息,这种 "金鱼式记忆" 严重阻碍了代理在复杂任务中的连续工作能力。Hermes Agent 通过构建多级内存架构与向量存储集成机制,实现了真正的跨会话持久化记忆。
双文件持久化与冻结快照机制
Hermes Agent 的核心持久化层由两个 Markdown 文件构成:MEMORY.md 存储环境事实与项目信息,USER.md 记录用户偏好与沟通风格。这两个文件分别限制在 2,200 字符(约 800 tokens)和 1,375 字符(约 500 tokens),存储于 ~/.hermes/memories/ 目录下。
系统采用冻结快照模式(frozen snapshot pattern)将内存内容注入系统提示词:在会话启动时一次性读取磁盘文件并渲染为固定内存块,此后即使代理通过 memory 工具增删条目,变更仅持久化到磁盘而不会立即反映在系统提示词中。这种设计刻意保留 LLM 的前缀缓存(prefix cache)以优化推理性能,代价是内存更新存在会话级延迟。代理通过 add、replace、remove 三种操作管理内存,其中替换和删除使用子字符串匹配而非完整文本比对,降低了操作复杂度。
六级存储后端与选型策略
Nous Research 为内存系统提供了六种存储后端,覆盖从开发测试到生产部署的全场景需求:
| 后端 | 文本搜索 | 向量搜索 | 适用场景 |
|---|---|---|---|
| ETS | Jaro 距离 | 不支持 | 开发测试、临时代理 |
| SQLite | FTS5 BM25 | 余弦相似度 | 单节点持久化、中等数据量 |
| DuckDB | ILIKE / FTS | list_cosine_similarity | 分析型负载、大规模数据 |
| Muninn | Tantivy BM25 | 不支持 | 生产级文本检索 |
| Zvec | 不支持 | HNSW/IVF | 纯语义搜索场景 |
| Hybrid | Tantivy BM25 | HNSW/IVF | 生产级混合检索 |
SQLite 后端采用 FTS5 实现 BM25 评分,支持 Porter 词干提取与 Unicode 分词,向量搜索通过 JSON 编码的嵌入向量在 Elixir 层计算余弦相似度。DuckDB 则利用原生 DOUBLE[] 数组列存储嵌入,通过 list_cosine_similarity 函数直接在数据库层完成向量运算。对于需要同时支持关键词精确匹配与语义模糊检索的生产环境,Hybrid 后端协调 Muninn(Tantivy)处理文本搜索、Zvec(HNSW/IVF)处理向量搜索,通过共享 ETS 表作为数据真相源保证一致性。
混合检索与 RRF 融合机制
当文本搜索与向量搜索同时可用时,系统并行执行两种检索并通过倒数排序融合(Reciprocal Rank Fusion, RRF)合并结果。RRF 公式为 score(d) = Σ(1 / (k + rank(d))),默认 k=60,将两种检索的排序位置转换为统一分数后累加,既保留关键词匹配的精确性,又融入语义理解的泛化能力。
检索完成后,系统对候选条目施加时序衰减与复合评分。时序衰减公式为 decayed_score = score * exp(-lambda * hours_since_last_access),默认 lambda=0.001,标记为 evergreen: true 的条目豁免衰减。复合评分综合三个信号:composite = 0.5*relevance + 0.3*importance + 0.2*recency,开发者可通过 scoring_weights 参数调整权重,例如在需要优先召回关键知识时提升 importance 权重至 0.5。
容量管理与工程参数
内存容量上限是架构设计的关键约束。当添加操作超出字符限制时,系统返回错误并附带当前条目列表,代理需主动执行合并或删除操作。建议当内存使用率超过 80% 时即触发整理流程,将分散的同类条目(如多条项目配置)合并为单一信息密集的条目。
嵌入维度匹配是向量检索的前置条件。OpenAI text-embedding-3-small 输出 1536 维,Ollama nomic-embed-text 为 768 维,Bumblebee 本地模型为 1024 维。使用 Hybrid 或 Zvec 后端时必须在初始化时声明 embedding_dimension 以匹配所选嵌入提供器。
跨代理共享内存通过作用域字段(agent_id、user_id、session_id、namespace)实现隔离与共享的灵活控制。默认搜索作用域 :agent 同时过滤 agent_id 与 user_id,确保多租户场景下数据边界清晰。
Hermes Agent 的持久化内存架构通过分层设计平衡了性能与功能:轻量级 Markdown 文件提供低延迟的上下文注入,可插拔存储后端适应不同规模与检索需求,混合搜索与智能评分确保相关记忆的有效召回。这种架构为构建真正 "记得住" 的 AI 代理提供了可复用的工程范式。
资料来源
- Hermes Agent Persistent Memory Documentation: https://hermes-agent.nousresearch.com/docs/user-guide/features/memory
- Nous Memory System Technical Guide: https://nous.hexdocs.pm/memory.html
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。