告别Token浪费,让你的AI Agent真正"记住"该记的事。

引言:为什么你的AI总是"健忘"?

在使用Hermes Agent的过程中,你是否遇到过这样的困扰:

明明刚告诉过它你的技术栈,下一轮对话它又问了一遍。对话越深入,它的回答越"飘",似乎忘了最开始的关键约定。你精心维护的MEMORY.md越来越长,但Token消耗也越来越快。

这些问题的本质,在于我们对Agent记忆机制的理解存在偏差。Hermes Agent提供了三层记忆架构——SOUL.md(身份灵魂)、Memory(关键事实)和Session Search(历史对话),但大多数用户只停留在"往里塞内容"的初级阶段。

本文将带你深入理解这套机制,并分享一套从手动管理到智能自动化的完整方案,让你的Agent真正实现"记得住、找得准、花得省"。

第一部分:理解Hermes的三层记忆架构

在优化之前,我们先厘清这三个概念的分工:

特性SOUL.md(身份与灵魂)Memory(持久化记忆)Session Search(会话搜索)
核心用途定义Agent的性格、语气和沟通风格存储稳定的事实:用户偏好、环境配置、项目约定搜索并回顾过去的完整对话记录
作用范围全局生效,跨所有项目分为MEMORY.md(项目事实)和USER.md(用户画像)搜索本地SQLite数据库中的历史会话
工作方式每次会话启动时,作为系统提示词注入会话开始时,作为冻结的快照注入Agent通过session_search工具按需主动调用
一句话总结决定"如何说"记住"关键事实"查找"历史对话"

关键认知:MEMORY.md是有容量限制的(约1300 Token),且只在会话开始时加载一次。它不是无限容量的"笔记本",而是需要精打细算的"便签纸"。

第二部分:手动管理的四个实操技巧

如果你暂时不想引入额外工具,以下四个技巧能让你在现有框架内做到最优。

技巧1:主动编辑记忆文件

MEMORY.md和USER.md是静态文件,你可以随时手动修改:

  • ~/.hermes/MEMORY.md:存放项目和环境事实。例如开始新功能时,加上"当前正在重构 payment 模块"。
  • ~/.hermes/USER.md:存放你的个人偏好。例如"我习惯用 pnpm 而不是 npm"。

原则:发现Agent反复忘记某件事时,直接写进去,一劳永逸。

技巧2:利用命令快捷操作

Hermes提供了两个关键命令,让你在对话中即时管理记忆:

  • /remember [内容]:核心命令。当出现重要信息时,立即执行,内容会自动追加到对应的记忆文件中。
  • /forget:当信息过时时(如"旧API地址"),用此命令将其从上下文中清除。

技巧3:压缩与总结对话

由于MEMORY.md有Token上限,不要把原始对话往里塞。正确做法是:

“请根据我们刚才关于部署的讨论,总结出3个关键决策点和1个待办事项,然后用/remember保存下来。”

这样,50轮对话被浓缩为3行关键事实,既省Token,又保留核心信息。

技巧4:养成"事实校验"的对话习惯

主动让Agent利用session_search工具交叉验证:

“请搜索历史记录,确认我上次是否提到过这个数据库的字符集设置?如果没有,请提醒我用/remember记下来。”

这能把散落在历史里的"隐性知识"转化为"显性记忆"。

第三部分:电报体写作法——省Token的终极技巧

MEMORY.md容量有限,如何用最少的Token承载最多的信息?答案是电报体。

三大压缩原则

原则一:砍掉"主谓宾"里的"主谓"

❌ 废话版(28 Token):我平时写代码的时候比较喜欢使用 TypeScript 而不是 JavaScript,并且我也很习惯用 pnpm 这个包管理器。

✅ 电报版(8 Token):Lang: TypeScript | Pkg: pnpm

❌ 废话版:这个项目的后端 API 接口是运行在 8000 端口的,而前端开发服务器是在 5173 端口。

✅ 电报版:API:8000 | Web:5173

原则二:用"管道符 |“和"缩进"代替自然语言

❌ 废话版:数据库使用的是 PostgreSQL,版本是 15,里面有一个主要的表叫做 users,还有一个叫做 orders。

✅ 电报版:

DB: PostgreSQL 15 Tables: users, orders

原则三:消灭"程度词"和"客套话”

❌ 废话版:我基本上不太喜欢在代码里看到太多的魔法数字,感觉这样可读性会比较差。

✅ 电报版:No magic numbers.

完整压缩案例

原始口语版(约75 Token):

我的项目是一个电商后台,前端用的是 React 18,状态管理用的是 Zustand。后端是 Node.js 的 Express 框架。我习惯用 VS Code 开发,而且特别讨厌在 PR 里看到 console.log 没删掉。部署的话是用 Docker 和阿里云。

压缩后的电报版(约22 Token):

Project: E-commerce Admin Frontend: React 18, Zustand Backend: Node.js (Express) IDE: VS Code Rules: PR no console.log Deploy: Docker + AliCloud

压缩率高达70%!掌握这个方法,1300 Token的容量可以容纳200-300条键值对,完全够一个中型项目的全部约定使用。

第四部分:高阶自动化——让记忆跟随项目进化

手动管理终归有上限。以下是两种自动化路径,让Agent的记忆与你的项目状态同步。

路径一:轻量级自动化(Git Hooks + 定时任务)

利用Git钩子,在代码提交时自动提取关键信息写入MEMORY.md。

脚本示例(update_memory.sh):

#!/bin/bash
LAST_COMMIT=$(git log -1 --pretty=format:"%s - %an")
DATE=$(date +"%Y-%m-%d")

echo "### [$DATE] 最新变更" >> ~/.hermes/MEMORY.md
echo "- $LAST_COMMIT" >> ~/.hermes/MEMORY.md
echo "" >> ~/.hermes/MEMORY.md

将此脚本挂在.git/hooks/post-commit,每次提交代码,Hermes的长期记忆就会自动更新"项目最近在忙什么"。

路径二:MCP协议 + 外部数据库

如果你觉得写文件太死板(且受Token限制),可以通过MCP(Model Context Protocol)将记忆外挂到向量数据库。

架构原理

  • 不再只依赖1300 Token的MEMORY.md
  • 编写一个MCP Server,连接项目数据库(如Jira、Notion或Git仓库)
  • Hermes启动时通过MCP协议按需拉取相关记忆,而非一次性加载

效果对比

特性文件式(MEMORY.md)MCP外挂数据库
容量约1300 Token无限
内容全局静态信息按需动态检索
更新方式脚本追加或手动实时监听(如Webhook)

第五部分:插件与工具生态——开箱即用的增强方案

如果你不想自己写脚本或搭MCP Server,Hermes生态已有成熟插件。

PLUR插件:本地的"智能记忆管家"

核心机制:自动捕捉对话中的"修正"和"洞察",存储为带使用频率权重的"记忆痕迹"(engrams),每轮对话前只智能注入最相关的记忆。

如何省Token:混合检索(BM25+本地嵌入)+ 自动遗忘机制(低频记忆自然衰减)。

关键能力:

  • 记忆可反馈训练(点赞/点踩)
  • 可跨设备Git同步
  • 提炼跨领域的"元记忆"

安装:一条命令即可

pip install plur-hermes

安装后自动加载,与内置MEMORY.md并行工作,互不冲突。

外部记忆提供者(Memory Providers):云端的"百事通"

如果想彻底摆脱Token限制,可将记忆交给云端服务。Hermes官方支持Honcho、Mem0、Tablestore等8个Provider。

  • Honcho:具备辩证推理能力,不仅能记忆事实,还能通过LLM推理形成更深刻的"用户画像"。
  • 阿里云Tablestore:提供hermes-tablestore-memory插件,自动将对话要点同步到云端,并在下一轮对话前自动预取相关语义记忆。

第六部分:推荐工作流与最佳实践

日常维护节奏

  • 启动会话时:检查MEMORY.md,删除过时内容,补充新背景
  • 对话过程中:出现"这个很重要"的感觉时,立刻用/remember存进去
  • 话题结束时:让Agent做一次"记忆总结",把多轮对话压缩成要点再保存
  • 定期清理:每周用/forget清理已完成任务或已过时的配置

核心原则总结

原则说明
少即是多MEMORY.md控制在300-500 Token,只放最核心的3-5条事实
结构化优先使用键值对、管道符、缩进,不用自然语言段落
动态归动态临时信息用/remember,历史用Session Search,静态事实才放MEMORY.md
善用工具PLUR插件或外部Provider可大幅降低维护成本

结语:让记忆成为Agent的"肌肉记忆"

优化Agent的长期记忆,本质上是在做三件事:

  • 减负:用最少Token承载最多信息
  • 提效:让Agent在需要时能准确找到需要的记忆
  • 自动化:让记忆随项目更新,而非手动同步

掌握了从"电报体写作"到"PLUR插件"再到"MCP外挂数据库"这套完整方案,你的Hermes Agent将不再是"健忘的助手",而是真正拥有"肌肉记忆"的AI伙伴。

下一步行动建议

  • 本周:改写你的MEMORY.md为电报体格式
  • 本月:尝试安装PLUR插件,体验智能记忆管理
  • 下季度:评估是否需要引入MCP外部存储方案

本文基于Hermes Agent实战经验整理,所有代码示例均已验证可用。如有疑问,欢迎在社区讨论交流。

附录:PLUR 插件详解

官方地址

PLUR 插件的官方地址是 PyPI 上的 plur-hermes 项目页面:https://pypi.org/project/plur-hermes/。它的源码遵循 Apache-2.0 开源协议。

安装方法

安装过程非常简单,只需一条命令:

pip install plur-hermes

安装后无需额外配置,Hermes Agent 在启动时会自动发现并加载该插件。它和 Hermes 内置的 MEMORY.md 是并行工作的,不会互相替代。

前置要求

  • Hermes Agent v0.5.0 或更高版本
  • Python 3.10+
  • Node.js 18+(插件会在首次使用时通过 npx 自动解析 PLUR CLI,之后会缓存)

使用方式

安装后,PLUR 在后台完全自动运行,你不需要做任何操作,它就会默默工作:

  • 每轮对话前:自动将相关记忆注入 Agent 的上下文中
  • 每轮对话后:自动捕捉对话中的修正和洞察
  • 每轮会话结束后:自动记录会话时间线

除了自动运行,PLUR 还给 Agent 提供了 16 个工具,可以让 Agent 在对话中主动调用。以下是几个最常用的:

工具名用途
plur_learn主动存储一个修正、偏好或模式
plur_recall按主题搜索记忆
plur_inject为某个任务获取相关上下文
plur_list列出所有存储的记忆(engrams)
plur_forget淘汰过时的知识
plur_feedback给某条记忆打分(训练模型,让好的记忆更容易浮现)
plur_sync通过 Git 跨设备同步记忆

工作原理与核心特点

PLUR 把知识存储为 engrams(记忆痕迹)——就是一些小的断言,用得越多就越强化,长期不用就会自然衰减。存储在本地的 ~/.plur/ 目录下,纯 YAML 格式。

它区别于 Hermes 内置记忆的几个核心特点是:

  • 反馈训练:你可以给记忆打分,好的会浮现,差的会淡出
  • 混合检索:BM25 + 本地嵌入模型 + Reciprocal Rank Fusion,检索更精准
  • 自动遗忘:过时的记忆会自动淘汰,不会无限膨胀
  • 跨设备同步:基于 Git 同步,多台机器共享
  • 零云服务:完全本地运行,无 API 调用,可离线工作

可选配置

插件零配置即可用,但如果你想微调,可以通过环境变量:

变量名默认值说明
PLUR_PATH~/.plur存储目录位置
PLUR_INJECT_MODEfast设为 hybrid 可开启基于嵌入的注入(更慢但更准)

跨设备同步配置

PLUR 的"基于 Git 同步"功能,配置思路和你平时使用 Git 管理代码仓库非常相似。它的核心是让 ~/.plur/ 这个本地目录成为一个 Git 仓库,然后你就可以用标准的 Git 命令或 plur_sync 工具来同步了。

配置步骤

  1. 初始化本地仓库(如果尚未完成):首先,你需要确保 ~/.plur/ 目录本身是一个 Git 仓库。你可以进入该目录,然后执行 git init

  2. 关联远程仓库:为了让记忆在多台机器间共享,你需要将本地的 ~/.plur/ 仓库与一个远程 Git 仓库(例如在 GitHub、GitLab 或 Gitee 上创建的私有仓库)关联起来。这一步就是添加远程仓库地址:

git remote add origin <你的远程仓库地址>
  1. 推送并拉取数据:完成关联后,你就可以通过 Git 或 PLUR 命令来同步了。
  • 手动同步:你可以在 ~/.plur/ 目录下,像操作普通 Git 仓库一样,使用 git pushgit pull 来手动同步记忆数据。
  • 通过 PLUR 工具同步:根据官方文档,Hermes Agent 会获得 plur_sync 这个内置工具,Agent 可以调用它来执行跨设备同步。具体的用法是,在对话中直接指示 Agent:“请执行 plur_sync 同步我的记忆。” 这样 Agent 就会代你完成同步操作。

核心机制与注意事项

  • 存储原理:PLUR 将所有知识(包括记忆痕迹 engrmas 和时间线 episodes)都以纯文本 YAML 格式存储在 ~/.plur/ 目录下。这使得它天生适合用 Git 进行版本管理和同步。
  • 跨设备工作流:要实现多台机器共享,你只需要确保每台机器上的 ~/.plur/ 目录都关联到同一个远程 Git 仓库。在一台设备上通过 plur_learn 或其他方式产生的记忆,通过 git push 推送到远程仓库后,在另一台设备上执行 git pullplur_sync 即可获得更新。
  • 自动化潜力plur_sync 这个工具的存在意味着,理论上你可以通过设置自动化任务(例如在每天工作结束时),让 Agent 或系统定时执行同步,从而实现记忆的自动云端备份和多端同步。