Hermes Agent 记忆优化:从 76% 爆满到 17% 的扩容与清理实录
背景
Hermes Agent 有两个持久化记忆存储,在每次对话的开头注入到系统提示里,帮 AI 跨会话保持上下文:
| 存储类型 | 默认限制 | 用途 |
|---|---|---|
| Memory(个人笔记) | 2,200 字符 | 环境事实、项目约定、工具技巧 |
| User Profile(用户画像) | 1,375 字符 | 用户偏好、身份信息、沟通风格 |
随着日常使用,记忆条目不可避免地膨胀,很快撞到天花板。
问题发现
有次顺手看了眼 memory 状态 ——12 条记忆,1,672 / 2,200 字符,76%。
更麻烦的是,里面有大量纯配置类信息:Stalwart 邮箱的 SMTP 参数、Firecrawl 配置、火山引擎 API Key 等等。这些东西本来就在 config.yaml 和 .env 里存着,在 memory 里又放了一份,纯属浪费。
弯路:尝试 holographic 插件
最初的想法是借助外部工具。holographic 是一个号称能「扩展 AI 上下文记忆」的 Python 包。于是装了试试:
pip install holographic结果很惨烈。holographic 版本太老(0.0.1),安装时把 Hermes Agent 0.14.0 的核心依赖全部降级:
pydantic2.13.4 → 1.10.26requests2.33.0 → 2.28.2rich14.3.3 → 13.0.1click8.3.2 → 1.8.8cryptography46.0.7 → 39.0.2
Hermes 本身和 firecrawl-py、mcp 等工具全部罢工。立刻 pip uninstall 回滚。
教训:不要往 Hermes 的 venv 里装第三方包,依赖冲突的风险远大于收益。
正解:它本来就是配置项
回滚后换个思路。直接在 Hermes 安装目录里搜:
grep -r "memory_char_limit\|2200" /usr/local/lib/hermes-agent/在 hermes_cli/config.py 找到了默认值:
"memory_char_limit": 2200, # ~800 tokens at 2.75 chars/token又在 agent/agent_init.py 里确认了 config.yaml 可以覆盖它:
memory_char_limit=mem_config.get("memory_char_limit", 2200),也就是说,根本不需要任何插件 ——memory_char_limit 本身就是 config.yaml 的可配置项,只是很少人知道。
扩容
一行命令:
hermes config set memory.memory_char_limit 8000hermes config set memory.user_char_limit 4000| 配置项 | 默认值 | 新值 | 增幅 |
|---|---|---|---|
memory_char_limit | 2,200 | 8,000 | 3.6x |
user_char_limit | 1,375 | 4,000 | 2.9x |
扩容后同样的 1,360 字符只占 17%。但空间多了不等于可以乱塞,关键在于清理。
清理:配置不入记忆
扩容治标,关键还要治本。memory 里不应该存 API Key、端口号、SMTP 参数这类纯配置 —— 它们在 config.yaml / .env 里已经有了。
清理掉三条:
| 删除的条目 | 原来放哪 |
|---|---|
| Stalwart 邮箱配置(SMTP 465 / IMAP 993) | .env 中已有 |
| Firecrawl / Browserless 配置 | config.yaml 中已有 |
| 火山引擎文生图(Key + Prompt 模板) | config.yaml 中已有 |
再看一眼前后对比:
清理前: 12 条 / 1,672 字符 / 76% 🟡扩容前: 8 条 / 1,360 字符 / 61%(旧限制)扩容后: 8 条 / 1,360 字符 / 17%(新限制)🟢什么该放 Memory
这次优化沉淀出一个判断标准:
| 应该存 | 不应该存 |
|---|---|
| 用户行为偏好(「本地执行,别 SSH」) | API Key、密码、端口号 |
| 项目约定(「文档放 /root/archives/」) | 服务安装 / 配置参数 |
| 环境事实(「两台 NUC9 的 IP」) | .env / config.yaml 里能查到的任何值 |
| 工具技巧 / 经验教训 | 版本号、commit SHA |
| 跨会话有用的稳定事实 | 临时任务状态 |
一句话:memory 存的是「事实」和「偏好」,不是「配置」。配置放配置文件。
如果把大量配置类数据塞进 memory,不仅浪费空间,更重要的是 —— 配置改了还得记得同步改 memory,迟早不一致。从根源上分开,才是最省心的做法。
技术要点
- Hermes 的 memory 限制路径:
memory.memory_char_limit和memory.user_char_limit - 修改命令:
hermes config set memory.memory_char_limit 8000 - 修改后
/reset或新会话生效 - 不要往 Hermes 的 venv 装包 —— 依赖冲突恢复麻烦
- Memory 质量比数量重要 —— 定期清理配置类冗余条目