告别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_MODE | fast | 设为 hybrid 可开启基于嵌入的注入(更慢但更准) |
跨设备同步配置
PLUR 的"基于 Git 同步"功能,配置思路和你平时使用 Git 管理代码仓库非常相似。它的核心是让 ~/.plur/ 这个本地目录成为一个 Git 仓库,然后你就可以用标准的 Git 命令或 plur_sync 工具来同步了。
配置步骤:
初始化本地仓库(如果尚未完成):首先,你需要确保 ~/.plur/ 目录本身是一个 Git 仓库。你可以进入该目录,然后执行
git init。关联远程仓库:为了让记忆在多台机器间共享,你需要将本地的 ~/.plur/ 仓库与一个远程 Git 仓库(例如在 GitHub、GitLab 或 Gitee 上创建的私有仓库)关联起来。这一步就是添加远程仓库地址:
git remote add origin <你的远程仓库地址>
- 推送并拉取数据:完成关联后,你就可以通过 Git 或 PLUR 命令来同步了。
- 手动同步:你可以在 ~/.plur/ 目录下,像操作普通 Git 仓库一样,使用
git push和git pull来手动同步记忆数据。 - 通过 PLUR 工具同步:根据官方文档,Hermes Agent 会获得
plur_sync这个内置工具,Agent 可以调用它来执行跨设备同步。具体的用法是,在对话中直接指示 Agent:“请执行 plur_sync 同步我的记忆。” 这样 Agent 就会代你完成同步操作。
核心机制与注意事项:
- 存储原理:PLUR 将所有知识(包括记忆痕迹 engrmas 和时间线 episodes)都以纯文本 YAML 格式存储在 ~/.plur/ 目录下。这使得它天生适合用 Git 进行版本管理和同步。
- 跨设备工作流:要实现多台机器共享,你只需要确保每台机器上的 ~/.plur/ 目录都关联到同一个远程 Git 仓库。在一台设备上通过 plur_learn 或其他方式产生的记忆,通过
git push推送到远程仓库后,在另一台设备上执行git pull或plur_sync即可获得更新。 - 自动化潜力:
plur_sync这个工具的存在意味着,理论上你可以通过设置自动化任务(例如在每天工作结束时),让 Agent 或系统定时执行同步,从而实现记忆的自动云端备份和多端同步。