写在开头:为什么我要写这篇
假设你已经装好了 Hermes Agent、能正常对话、也跑通过一两个简单工具——也就是 那篇三阶段通关路线图 里说的「中级水平」。
然后你很可能会撞上一道墙:
“为什么它总是忘事?”
“为什么我让它保存技能,它保存的版本根本不能用?”
“多开几个子 Agent,钱包就开始报警。”
“装成服务了,结果定时任务半夜才跑,还跑错时区。”
我这两周基本把这些坑全踩了一遍。这篇文章的目的就是把我趟出来的经验整理成一份进阶指北,不再讲安装,直接进入五个真正决定你 Agent 好不好用的核心模块:
- 记忆系统
- Skill 自进化
- 多 Agent 协作
- 生产化部署
- MCP 扩展与调试
读完这篇,如果你照着配一遍,大概率能把 Hermes Agent 从「偶尔惊艳的玩具」升级成「可以托付的同事」。
一、记忆系统:先把「它怎么记东西」这件事搞清楚
1. 整体架构,其实不是两层而是三层
很多入门教程会告诉你 Hermes 有”内置 + 外部”两层记忆,这个说法偏简化。更准确的描述是三层:
- 内置记忆(始终激活):
MEMORY.md和USER.md - 外部 Memory Provider(可选叠加):Mem0、Holographic、Honcho、Supermemory 等
- 运行时上下文(会话级):当前对话的 context window
关键认知:外部 Provider 不是”替代”内置记忆,而是”叠加”。两边同时在工作,内置的始终会被注入到 System Prompt 头部。
2. 为什么它「记不住」?因为是冻结快照
这是我踩的第一个大坑。
MEMORY.md 和 USER.md 每次会话开始时会作为冻结快照注入到上下文里。”冻结”这个词很关键——会话中途 Agent 写入的新记忆,不会立刻改变当前这轮对话的上下文。要等到下次会话重启,新内容才会作为快照再次被读入。
为什么要这么设计?两个原因:
- 省钱:如果每轮对话都实时更新 System Prompt 头部,KV Cache 前缀就会失效,推理成本飙升;
- 防污染:Agent 思考过程中的碎碎念、临时试错、中间结果其实不值得长期保留,必须过一道筛子。
这个筛子叫 Agent-curated memory(策展式记忆)。Agent 会自己判断什么值得写、什么不值得。
3. 怎么让它真的记住你说的话
实战里,以下场景 Agent 更倾向于保留:
- 你明确说了偏好:”我喜欢用 Python 3.11,不要 3.12”
- 环境事实:”这台机器装的是 PostgreSQL 16 + SQLx”
- 你纠正了它:”不要用 sudo,我在 docker 组里”
- 完成了一个重要里程碑
- 你直接命令它:”记住这件事”
最有效的一招:直接下指令。
1 | 记住我的偏好:所有代码统一使用 Python 3.11,不要用 3.12 或 3.13。 |
关于记忆系统的机制我另外写过一篇 Hermes Agent 记忆系统剖析,想看更底层原理的可以跳过去。
4. 记忆文件的字数是有硬限制的
这里有两个数字必须记住:
| 文件 | 硬限制 | 建议日常保持 | 相当于 |
|---|---|---|---|
MEMORY.md |
2,200 字符 | ~1,800 字符 | 约 1,200 汉字 |
USER.md |
1,375 字符 | ~1,100 字符 | 约 700 汉字 |
留 20% 左右的余量给 Agent 自动追加就够了。我的经验是:不要塞满。塞满之后 Agent 要么频繁触发整理、要么直接截断丢信息。
高密度、少条目、不重复,永远比”什么都往里塞”好用。
5. 四个文件别搞混:MEMORY / USER / SOUL / AGENTS
这是另一个坑——文件是四个,各管一摊:
| 文件 | 位置 | 谁维护 | 内容 |
|---|---|---|---|
MEMORY.md |
~/.hermes/memories/ |
Agent 为主 | 工作笔记、环境事实、技巧 |
USER.md |
~/.hermes/memories/ |
Agent 为主 | 用户画像、偏好、沟通风格 |
SOUL.md |
~/.hermes/ |
你手写 | 人格、行为准则、固定规则 |
AGENTS.md |
项目根目录 | 你手写 | 项目级规范与约束 |
铁律:不要把”固定规则”写进 MEMORY.md。那东西会被 Agent 整理、压缩、替换。想让一条规则永远生效,写进 SOUL.md。
AGENTS.md 是项目级的,跟着代码仓库走。一个参考样板:
1 | # 项目规范:MyAPI Service |
6. nudge_interval 怎么调
nudge 是 Hermes 决定”是否做一次记忆反思”的节奏参数。数值越小越频繁,token 消耗越高。
打开 ~/.hermes/config.yaml:
1 | memory: |
这里的”轮”是一次完整的”用户输入 + Agent 回复”,不是 Agent 内部的 tool call 次数。别算错。
我的推荐起点:
- 小模型 / 小上下文窗口:3–5(上下文紧,重要信息早点固化)
- 主流模型 / 常规上下文:5–10(成本与质量的平衡点)
- 大上下文模型(128k+):10–15(反正窗口大,等它攒够了再总结)
默认值在很多安装里是 10,但版本迁移后不一定,以你本机 config.yaml 实际值为准。
7. 长任务中怎么防止它忘事
方法一:手动 Checkpoint。长任务跑到一半主动说一句:
1 | 当前进度:数据清洗和特征工程已完成,下一步训练模型。请把这个进度写入记忆。 |
方法二:外部任务状态文件。超长任务建议让 Agent 维护一个专门的 TASK_STATUS.md 在项目里:
1 | 请在项目目录下创建 TASK_STATUS.md,记录当前任务的完整状态。 |
这招对跨日、跨周的项目尤其好用。
8. 外部 Memory Provider 怎么选
从 v0.7.0 起 Hermes 就支持可插拔的外部 Memory Provider。目前活跃的有:Mem0、Holographic、Honcho、OpenViking、Hindsight、RetainDB、ByteRover、Supermemory。
两个我实际用过还不错的推荐:
Mem0(托管、省心)
1 | pip install mem0ai |
自动提取、自动同步,适合懒人。
Holographic(本地、隐私)
1 | hermes config set memory.provider holographic |
数据不出本机,适合不想把记忆上传第三方的场景。
9. 记忆与技能的联动
当你发现 MEMORY.md 里反复出现类似”部署前要先 A、再 B、最后 C”这种工作流条目,这就是一个 Skill 化的信号:
1 | 我注意到你记住了我们的部署流程。把它创建为 Skill,命名 deploy-workflow, |
记忆是零散事实,Skill 是结构化 SOP。两者的联动,是 Hermes 真正”越用越强”的底层逻辑。
二、Skill 自进化:把”知道怎么做”变成”标准化 SOP”
1. Skill 到底是什么
先澄清一个常见误解:Skill 不是可执行代码。它是一份结构化的操作知识,包含:
- 触发条件:什么时候该用
- 操作步骤:具体怎么执行
- 注意事项:踩过的坑
- 验证方法:怎么确认成功
Skill 存在 ~/.hermes/skills/(或当前 Profile 的 HERMES_HOME/skills/)。它更接近 Agent 的”程序性记忆”——“我会做 X 这类事”,而不是”我记得 X 这件事”。
详细机制可以看 Hermes Agent Skills 深度解析,我这里只讲实战。
2. Skill 什么时候会被自动创建
四种典型触发场景:
- 完成了一个相对复杂的多步任务
- 先走错路后找到了正确路径
- 你纠正了它的做法,得出了更好的流程
- 出现了一个非平凡的可复用工作流
关键词是”非平凡“。如果只是”打开文件并读取”这种一步的事,它不会创建 Skill。
主动引导最可靠:
1 | 刚才这个数据处理流程很有价值,把它保存为 Skill,命名 data-pipeline, |
3. 怎么判断一个 Skill 写得好不好
四个标准,缺一个就大概率会在用的时候翻车:
- 触发条件清晰:Agent 能准确判断什么时候该用
- 步骤可执行:每一步都是具体操作,而不是”考虑一下要不要 xxx”
- 有验证方法:执行完能判断成功没成功
- 有注意事项:记录了踩过的坑和边界条件
我的建议:让 Agent 做定点修改,不要让它整篇重写。重写很容易把之前积累的关键细节丢了。
1 | 更新 stock-daily-report 这个 Skill,在注意事项里补充一条: |
4. 技能退化和重复问题
用久了会出现两个典型问题:
- 描述越来越模糊、触发条件越来越宽
- 几个 Skill 干的是同一件事,只是写法不同
处理方法是定期做技能审计:
1 | 审查你所有的 Skills,找出: |
“先报告再执行”这个模式我强烈推荐——尤其是批量操作 Skill 的时候,Agent 一旦走偏,成本很难收回。
5. Self-optimization 是个能力方向,不是固定开关
Hermes 从 v0.8.0 到 v0.9.0 在 tool-use 优化和失败模式修复上持续增强,体感上 Agent 对”上次这里卡住过”的修复越来越自然。
但具体怎么开、配置键叫什么,在不同版本变化比较快。我的建议:把 Self-optimization 当成方向来理解,配置项以你本机当前版本为准,不要照搬别人的旧 config。
三、多 Agent 协作:分身不是越多越好
1. 子 Agent 的并发要克制
先说结论:2–3 个起步,不要一上来开五个十个。
理由有三:
- 在线 API 几乎都有 Rate Limit,并发高了就 429;
- 子任务上下文传递不完整时,并发越多失败越多;
- 成本是线性甚至超线性增长的。
我的实际经验:2 个稳过、3 个够用、超过 3 个得看 API 配额和任务质量再决定。
2. 子 Agent 的上下文必须传完整
这是我撞过最狠的一堵墙。子 Agent 不是从主 Agent 的脑子里复制意识过去,而是从一个新会话开始。
所以你必须把它需要的一切塞进 context:
1 | delegate_task( |
不要假设子 Agent 知道”这个错误”、”刚才那个文件”、”我们上一步的思路”。它都不知道。
更完整的拆分策略和失败模式,看我之前那篇 Hermes Agent 子 Agent 模式详解。
3. Profiles:一台机器跑多个独立 Hermes
Profile 是完整隔离的 Hermes 环境,每个 Profile 有独立的 config、memory、session、skill,底层是通过不同的 HERMES_HOME 实现目录级隔离。
三种创建方式:
1 | # 全新空白 |
切换 Profile 之后,对应的 HERMES_HOME 会指向 ~/.hermes/profiles/<name>/。只有默认 Profile 还在 ~/.hermes/ 根目录下。
运行多个 Agent 很简单——开两个终端:
1 | # 终端一:编码助手 |
4. 跨 Profile 共享技能
如果你希望几个 Profile 共享一批核心 Skill,可以给它们指定共享目录:
1 | skills: |
具体字段名在不同版本可能不一样,建议以你本机 config.yaml 默认模板为准。
5. 主 Agent 协调的关键是「角色分工」
在 SOUL.md 或 AGENTS.md 里明确写死每个角色的边界:
1 | ## 多 Agent 协作规范 |
让每个 Agent 只做自己该做的事。角色边界越模糊,协作越容易乱。
6. 避免资源冲突
Bot Token 冲突:两个 Profile 共用同一个 Telegram Token,Gateway 会打架。各自用独立 Token。
端口冲突:本地跑多实例时,指定不同端口:
1 | # Profile A |
四、生产化部署:让它 7×24 稳定运行
1. Gateway 的三种常驻方式
方式一:Systemd(Linux 生产首选)
1 | hermes gateway install |
如果你用了命名 Profile,服务名可能会带 Profile 后缀,以实际安装输出为准。
方式二:Docker Compose(多 Profile 部署推荐)
1 | version: "3.8" |
强烈提醒:不要让两个容器挂载同一个数据目录,共享状态文件会打架。
方式三:tmux/screen:只适合开发调试,生产别用。
2. Cron 定时任务:时区是头号大坑
先说我踩过的一个真实案例:一个”每天早上 8:30 出日报”的 Cron,真实触发时间是深夜 0:30。
原因很简单——海外云服务器默认时区是 UTC,Hermes 的 Cron 严格按系统时区走。配定时任务之前必须做一件事:
1 | # 查当前时区 |
时区对了之后再配任务:
1 | hermes cron add "30 8 * * 1-5" "生成今日 A 股市场日报并发送到 Telegram" |
创建完务必手动跑一次验证:
1 | hermes cron list |
更多 Cron 玩法见 Hermes Agent Cron 定时任务实战。
3. Heartbeat:防止静默失败
长期运行的服务最怕”它死了但没人知道”。开 Heartbeat:
1 | echo "GATEWAY_HEARTBEAT=true" >> ~/.hermes/.env |
配合外部监控(比如 Healthchecks.io)可以做到服务宕机时直接推送告警。
4. 日志与调试
日志路径跟着当前 Profile 走,默认在 ~/.hermes/logs/。
1 | tail -f ~/.hermes/logs/hermes.log |
5. Tirith:安全扫描模块
Tirith 是 Hermes 的预执行安全扫描层。三档模式:
1 | approvals: |
我的建议:生产环境从 manual 起步。低风险命令被频繁拦截再考虑换 smart 或加白名单。
更系统的权限模型见 Hermes Agent 安全与权限配置。
6. Telegram / Discord 上线前的白名单
必做:配置允许访问的用户范围。
1 | echo "TELEGRAM_BOT_TOKEN=your-token" >> ~/.hermes/.env |
没有白名单的 Bot = 公开 API = 分分钟被陌生人跑爆你的 Token 余额。这个坑我见过至少三个人踩过。
7. 生产部署 Checklist
上线前对着跑一遍:
-
hermes doctor没报错 - API Key 在
.env里,不在config.yaml -
GATEWAY_HEARTBEAT=true已开启 - 用户白名单已配置(Telegram / Discord / 飞书等)
-
approvals.mode按环境敏感度选择 - Systemd 或容器
restart: unless-stopped已配置 - 时区已核对:
timedatectl输出符合预期 - 首条 Cron 任务已手动
hermes cron run验证过
五、MCP 与高级调试
1. MCP 接本地文件系统
MCP(Model Context Protocol)是 Agent 调用外部工具的标准协议。接上之后,Hermes 能直接操作文件、数据库、自定义 API,不再完全依赖终端命令。
最经典的入门案例是接本地文件系统:
1 | npm install -g @modelcontextprotocol/server-filesystem |
在 $HERMES_HOME/mcp.json 里配置:
1 | { |
只暴露你真正希望 Agent 能动的目录。不要图省事直接给 /。
2. 我常用的调试命令集
这五条基本能覆盖 90% 的故障排查场景:
1 | hermes doctor # 全面健康检查,优先运行 |
遇到问题的流程我一般是:doctor → 看日志 → 按组件独立 status → 必要时 debug share 找社区。
六、七个最常问的问题
Q1:告诉它一件事,下次还是不记得?
A:会话太短导致没触发记忆整理,或者它没把这事判断为”值得长期保留”。明确下指令”请写入你的长期记忆”最直接。
Q2:Cron 没按时触发?
A:按这个顺序查:① hermes cron list 任务状态;② Gateway 是否在跑;③ timedatectl 时区对不对;④ hermes cron run 任务名 手动验证逻辑。
Q3:Tirith 总拦我正常命令?
A:三选一——临时切宽松模式 / 把 approvals.mode 从 manual 调成 smart / 把高频命令加进 allowlist(版本支持的话)。
Q4:多个 Profile 能共享一个 Telegram Bot 吗?
A:别。多 Gateway 共用 Token 会冲突,各自一个 Token 更稳。
Q5:日志太大怎么办?
A:先看当前版本有没有内置轮转。没有的话手动清理,清理前确认重要问题已留档。
Q6:子 Agent 并发烧钱怎么控?
A:① 并发从 2–3 起步;② 子任务上下文写清楚,减少试错;③ 给子 Agent 单独指定更便宜的模型和更小的轮次上限;④ 配 Credential Pool 做多 Key 轮转,既缓解 429 也省心。
Q7:子 Agent 总说不知道任务背景?
A:因为它真不知道——它不继承主会话历史。必须在 context 字段里把文件路径、报错信息、项目结构、依赖版本全写出来。
七、配置速查(v0.9.0 参考)
以下示例默认按默认 Profile 编写。用命名 Profile 时把
~/.hermes换成你当前的HERMES_HOME。
config.yaml 参考
1 | agent: |
.env 参考
1 | # 核心 API Key |
不同版本字段名会有微调,以本机 config.yaml 默认模板为准,不要照抄别人三个月前的配置。
写在结尾
这五块东西是我真正把 Hermes Agent 从”能跑”推到”好用”的关键差异点。如果你只打算记住一句话,那我建议你记住这个:
不要把 Agent 当成黑箱,要把它当成一个需要你花时间磨合的新同事。
记忆要引导、Skill 要审计、子 Agent 要分工、生产上线要做 Checklist,和带新人的流程几乎一模一样。
剩下的就是耐心。1 天装好、1 周熟练、1 个月融入工作流,是相对合理的节奏。
延伸阅读:OpenClaw 社区资源
AI Agent 工程化落地这件事,姊妹站 OpenClaw 中文社区 从另一条路径也做了大量整理:
- 10 大 AI 服务商 API Key 配置指南(包含 Credential Pool 多 Key 轮转方案)
- 主流 AI 模型 9 维横向评测
- Token 费用计算器(实时汇率)
- 多平台部署方案大全
- 200+ 实战 Prompt 模板库