OpenClaw 企业定制 私人订制工作流 优化运维 openclaw记忆优化 问题咨询解决 请加微信交流
用过AI助手的人都有这个体验:每次开新对话,都要重新跟它解释你是谁、你的项目是什么、你讨厌什么。Hermes Agent的持久记忆系统解决了这个问题。
它会记住你的偏好、你的项目结构、你的工作习惯。新对话开始时,它自动加载这些记忆,不需要你重复说。这篇讲清楚记忆系统的原理、最佳实践、以及怎么用好它。
记忆系统如何工作
Hermes Agent的持久记忆由两个文件组成:
| 文件 | 用途 | 字符上限 |
|---|---|---|
| MEMORY.md | Agent的个人笔记——环境事实、约定、经验总结 | 2,200字符 |
| USER.md | 用户画像——偏好、沟通风格、期望 | 1,375字符 |
两个文件都存在~/.hermes/memories/目录下。每次开启新会话,记忆内容会被提取出来,注入到系统提示词的最前面。Agent在对话过程中学到新东西,会立即保存到磁盘。
记忆在系统提示词里怎么呈现
每次开新对话,你会看到这样的记忆区块:
══════════════════════════════════════════════
MEMORY (your personal notes) [67% — 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service at ~/code/myapi using Axum + SQLx §
This machine runs Ubuntu 22.04, has Docker and Podman installed §
User prefers concise responses, dislikes verbose explanations
格式包含:
- 记忆库名称(MEMORY或USER PROFILE)
- 使用百分比和字符数,Agent知道容量还剩多少
- 用§分隔的独立条目,可以跨行
一个重要的细节:系统提示词里的记忆快照是在会话开始时捕捉的固定快照,不会中途改变。当你在对话中更新记忆,变更会立即持久化到磁盘,但这次会话里看不到——下个新会话才会生效。工具响应里始终显示最新状态。
Agent怎么管理记忆
Agent通过memory工具自己管理记忆,有三个操作:
- add — 添加新条目
- replace — 替换已有条目
- remove — 删除不再相关的条目
不需要你手动告诉它”记住这个”。它会自动判断并保存。用的越久,它越懂你。
子串匹配
replace和remove使用子串匹配,不需要写完整的旧内容:
memory(
action="replace",
target="memory",
old_text="dark mode",
content="User prefers light mode in VS Code, dark mode in terminal"
)
只要old_text是唯一的子串就能匹配。如果匹配多条,会报错让你更具体。
什么时候Agent会保存记忆
Agent会自动保存,不需要你提醒。它会在这些情况下保存:
保存用户偏好
当你告诉它你的偏好,它会记住。比如你说”我更习惯用TypeScript而不是JavaScript”,它会保存到USER.md。
保存环境事实
当它了解到你机器的环境,会保存到MEMORY.md。比如”这台机器跑的是Debian 12,装了PostgreSQL 16″。
保存纠正
当你纠正它一个错误,它会记住不再犯。比如”Docker命令不需要sudo,用户在docker组里”。
保存约定
当它发现你的项目规范,会记住。比如”项目用tabs缩进,120字符行宽,Google风格文档字符串”。
保存显式请求
你直接说”记住我的API Key每月轮换一次”,它会保存。
不要保存什么
- 明显事实:Python支持f-string嵌套——这个搜一下就知道,不需要记
- 临时数据:日志文件、大型代码块、数据表——太大,放不下
- 会话临时信息:临时文件路径、一次性的调试上下文
- 已经在上下文文件里的信息:SOUL.md和AGENTS.md的内容不需要重复
容量管理
记忆有严格的字符限制,目的是保持系统提示词不会过大:
- MEMORY.md:2,200字符,约8-15条条目
- USER.md:1,375字符,约5-10条条目
容量超过80%时,Agent会主动合并旧条目来腾空间。比如把三条”项目用X”的记录合并成一条综合的项目描述。
如果记忆满了,添加新条目会报错,告诉你当前用了多少、还剩多少。你可以让Agent清理,也可以手动编辑文件。
Session Search和记忆的区别
除了MEMORY.md和USER.md,Agent还能搜索历史对话:
- 持久记忆(Memory):容量有限,但随时可用,在系统提示词里
- 历史搜索(Session Search):容量无限,但需要搜索+LLM总结,不是即时可用
Session Search存储在SQLite数据库(~/.hermes/state.db)里,用FTS5全文搜索。它能找到几周前的对话内容,即使不在活跃记忆里。
hermes sessions list # 浏览过去会话
session_search("上周关于SEO文章的那个讨论") # 搜索历史
安全扫描
记忆条目在被接受之前会经过注入扫描。因为记忆内容会被注入到系统提示词,所以会检查:
- 提示注入攻击模式
- 凭据泄露模式
- SSH后门
- 不可见Unicode字符
匹配到威胁模式的内容会被阻止。这是防止通过记忆系统对AI进行攻击的保护机制。
好记忆条目的写法
好的例子:紧凑、信息密度高
# 好的:多条相关事实打包在一起
User runs macOS 14 Sonoma, uses Homebrew, has Docker Desktop and Podman.
Shell: zsh with oh-my-zsh. Editor: VS Code with Vim keybindings.
# 好的:具体、可操作的约定
Project ~/code/api uses Go 1.22, sqlc for DB queries, chi router.
Run tests with 'make test'. CI via GitHub Actions.
# 好的:有上下文的经验总结
The staging server (10.0.1.50) needs SSH port 2222, not 22.
Key is at ~/.ssh/staging_ed25519.
坏的例子:太模糊或太啰嗦
# 坏的:太模糊
User has a project.
# 坏的:太啰嗦,流水账
On January 5th, 2026, the user asked me to look at their project which is
located at ~/code/api. I discovered it uses Go version 1.22 and...
记忆和Skills的区别
很多人分不清这两个概念:
- 记忆(Memory):记住事实。你的名字、项目结构、你喜欢的沟通方式、你讨厌什么
- Skills:记住方法。怎么写代码、怎么处理某类问题、怎么配置环境
记忆是静态的事实清单,Skills是动态的操作手册。两者配合,AI才能真正”懂你”。
一个真实场景
假设你是做SEO内容站的,用Hermes Agent帮你工作:
- 第一天:你告诉它你的网站URL、WordPress登录方式、你喜欢什么风格的标题
- 它把这些记住——网站地址存在MEMORY里,你的偏好存在USER里
- 第二天:跟它说”帮我写一篇SEO文章”,它知道你的网站是什么、风格是什么
- 你纠正它”标题不要太长”,它记住这个偏好
- 以后每次新对话,它都知道你是谁、你的偏好是什么
这就是记忆系统的价值:不需要每天重复说同样的事情。
常见问题
记忆满了怎么办?
Agent会自动管理。接近容量上限时,它会合并相关条目或删除不再需要的内容。你也可以直接说”清除关于X的记忆”让它删除。
可以手动编辑记忆文件吗?
可以,直接修改~/.hermes/memories/下的文件。但建议让Agent自动管理,手动编辑容易出错。
记忆会泄露给其他人吗?
不会。记忆文件存在你的本地机器上,不会上传到任何服务器。
换了新机器记忆还在吗?
不在。需要备份~/.hermes/memories/目录,或者通过iCloud、Dropbox等工具同步。
为什么改了记忆这次会话看不到?
设计如此。系统提示词里的记忆快照在会话开始时固定,不会中途改变。改完后下个新会话才生效。
总结
记忆系统让Hermes Agent不是每次都从零开始。它知道你是谁、你的项目是怎样的、你讨厌什么。
核心价值:
- 不用每天重复说自己的偏好
- 跨会话保持上下文
- Agent自动管理,不用你操心
- 容量限制保证系统不过于臃肿
- 安全扫描防止恶意注入
配合Skills系统一起用,Hermes Agent就能真正成为你的专属AI助手。








暂无评论内容