Hermes Agent 大师课

@akshay_pachaar
英语2个月前 · 2026年5月13日
2.7M
4.2K
470
65
15.7K

TL;DR

本大师课涵盖了 Hermes Agent 的架构,包括其三层记忆系统、通过 GEPA 实现的自进化技能,以及如何部署用于编程和研究的专业化 Agent。

你需要了解并自定义 Hermes Agent 的一切。自我进化的技能、三层记忆、GEPA 优化,以及从 1 个 Agent 扩展到 10 个全天候为你工作的 Agent。

Hermes Agent 在两个月内获得了超过 90,000 个 GitHub Star。开发者们正在悄悄构建能够学习他们工作流程、记住上下文并全天候运行的个人 AI Agent。

Akshay 🚀 - inline image

你使用过的每个 AI Agent 都有同样的问题:一旦会话结束,它就会忘记一切。

你的编码偏好、你纠正过三次的项目约定、它昨天花了 10 10 分钟才搞定的修复——全部消失。下一次会话,你又要从头开始。

Nous Research 的 Hermes Agent 采用了一种根本不同的方法。它自带一个学习循环,能够:

  • 跨会话记忆
  • 编写自己的可复用技能
  • 在后台修剪技能
  • 并通过一个名为 GEPA 的进化引擎离线验证它们

没有其他开源 Agent 能同时结合这三者,结合这三者。就连 OpenClaw 也不行。

本指南将介绍这个学习循环的工作原理、每个记忆层的作用,以及如何从头配置一切。

最后,你将拥有三个完全隔离的 Agent 在你的机器上运行:一个程序员(使用你的 Claude Code)、一个深度研究员和一个设计师,每个都有自己独立的个性、记忆、技能和 Telegram 机器人。

看看这个:

Akshay 🚀 - inline image

整个设置只需几分钟,这里的一切都可以在你自己的硬件上复现。

注意:本指南中的所有插图均由 Pixel 设计,Pixel 是你将在最后学会构建的 Hermes Agent 之一。阅读时请留意它们。

让我们开始吧!

如何阅读本文

分为两部分:先理论,后实践。

时间有限?直接跳到“启动与运行”。命令可以独立使用。

但理论部分值得一读。了解技能如何自我进化、记忆如何组合、以及 GEPA 何时发挥作用,是区分你将不再把 Hermes 当作一个带笔记的聊天机器人,而是当作一个能持续积累的工具。

接下来是什么:

  • Hermes Agent 到底是什么。核心介绍,以及与 OpenClaw 的对比。
  • 它是如何构建的。一张图看懂架构。
  • 记忆之前:Agent 是谁?SOUL.md,身份层。
  • 记忆系统。三层,三种层级,三种速度。
  • 自我进化的技能。Agent 自创的操作手册加上 Curator。
  • GEPA。离线技能优化。
  • 启动与运行。安装、Telegram、第一个 Agent。
  • 运行多个 Agent。配置文件、三种角色、定时摘要。
  • 根据你的需求自定义 Agent。

Hermes 是什么,以及它在架构上有什么不同

一句话概括来说:一个用得越久就越好的 Agent。

真正实现这一点,是因为三个通常独立的能力被整合在一个框架内:运行时技能学习、持久多层记忆,以及一个可选的权重训练管道。没有其他开源 Agent 同时具备这三者。

在开源生态中最接近的对比是 OpenClaw。两者都是持久化的、适合消息交互的,但它们做出了相反的架构选择。

Kilo 博客的一个清晰概括道:“Hermes 围绕一个学习型 Agent 封装了一个网关。OpenClaw 围绕一个消息网关封装了一个 Agent。”

Akshay 🚀 - inline image

它是如何构建的

在理解学习循环之前,你需要对 Hermes 的结构有一个基本认识。

所有内容都通过 run_agent.py 脚本中的单个 AIAgent 类流动。CLI、消息网关、批量运行器、IDE 集成:它们都是进入同一个核心 Agent 的入口点。

这就是平台无关性真正奏效的原因。

核心循环是 ReAct 风格且同步的。构建系统提示,检查是否需要压缩,进行可中断的 API 调用,执行任何工具调用,然后再次循环。

一些以后会用到的重要细节:

  • Agent 可以在六个不同的地方运行命令。本地终端、Docker、SSH、Modal、Daytona 或 Singularity。相同的代码,只需更改配置。将执行从你的笔记本电脑移动到云 GPU 服务器,而无需改动其他任何东西。
  • 它几乎可以与任何模型配合使用。一个转换层将任何提供者路由到三种 API 格式之一。这就是为什么你可以用一个命令从 Claude 切换到 GPT、Gemini 或本地 Ollama,而不会出问题。
  • Agent 每个任务有 90 轮次的硬上限。如果没有这个限制,陷入循环的 Agent(重试失败的 API、重复读取同一个文件)会悄无声息地烧掉你的积分。子 Agent 共享同一个预算,因此失控的委托链也无法绕过。

这些脚手架足够了。现在进入有趣的部分。

记忆之前:Agent 是谁?

在我们讨论记忆和自我进化技能之前,有一个层位于两者之上:身份。

记忆是 Agent 知道的东西。技能是它做事的方式。但两者都不能告诉你在它出现时它是谁。没有身份层,每个 Agent 都像是同一个 Agent 戴着不同的帽子。

Hermes 用一个文件解决了这个问题:SOUL.md。

它位于 ~/.hermes/SOUL.md,在系统提示中占据 1 号位置,在所有其他内容加载之前。它定义了 Agent 的个性、语气、沟通风格和硬性限制。

SOUL.md 是手动编写且静态的。你写一次,随着时间的推移进行调整,它在每个项目和每个会话中保持一致。如果文件丢失,Hermes 会回退到内置的默认身份。

为什么这对自我改进的故事很重要?因为接下来的一切(Agent 写入的记忆、创建的技能、它整合知识的方式)都是通过这个身份的视角发生的。

SOUL.md 是固定的框架。记忆和技能是其中的活动部件。

记忆系统:三种层级,三种速度

Hermes 没有单一的“记忆”。它有三个层,每个层针对不同的目的而设计。

Akshay 🚀 - inline image

第一层:两个很小的 Markdown 文件。

核心是两个存储在磁盘上的文件:

  • MEMORY.md(最大 2200 字符)保存 Agent 关于你的环境、项目约定、工具怪癖和经验教训的笔记。
  • USER.md(最大 1375 字符)保存你的个人资料:姓名、沟通偏好、技能水平以及要避免的事情。

两者在会话开始时作为冻结的快照注入系统提示。如果 Agent 在会话中途写入新的记忆条目,该更改会立即持久化到磁盘,但直到下一次会话才会出现在系统提示中。

当记忆填满时(约 80% 容量,在系统提示标题中显示为百分比),Agent 必须进行整合。

它将相关条目合并成更密集、信息更丰富的版本,更丰富的版本,以便只有有用的信息存活下来。

第二层:全文会话搜索。

每次对话(CLI 和消息)都存储在 SQLite 中,并支持全文搜索。Agent 可以从中搜索数周前的对话。

权衡很明显:第一层始终在上下文中但很小。第二层容量无限,但需要主动搜索加上 LLM 摘要。

关键事实存在于记忆中。其他所有内容可按需搜索。

第三层:外部记忆提供者(8 个插件)。

对于更深入的持久记忆,Hermes 配备了 8 个可插拔的提供者,它们与内置记忆一起运行(从不替换)。一次只能激活一个。

当任何外部提供者激活时,Hermes 会在每轮之前自动预取相关记忆,在每次响应后同步对话轮次,并在会话结束时提取记忆。

Akshay 🚀 - inline image

自我进化的技能:Agent 编写自己的操作手册

记忆处理事实。技能处理流程。

技能是带有 YAML 前置元数据的 Markdown 文件,充当 Agent 的程序性记忆:不是它知道什么,而是它如何做事。

以下是技能的结构:

为了降低 Token 成本,技能使用渐进式披露:

Akshay 🚀 - inline image
  • 级别 0:Agent 只看到名称 + 描述(完整目录约 3k Token)
  • 级别 1:当它实际需要某个技能时,才加载完整的技能内容
  • 级别 2:它可以深入技能内的特定参考文件

自我改进循环。

这是核心差异化因素。Agent 使用 skill_manage 工具自主创建自己的技能。技能创建在以下情况下触发:

  • Agent 完成一个复杂任务(5 次以上工具调用)
  • 它遇到错误或死胡同并找到可行路径
  • 用户纠正它的方法
  • 它发现一个非平凡的工作流程

因此循环是这样工作的:Agent 遇到问题 → 通过试错解决 → 将成功的方法保存为 SKILL.md 文件 → 下次遇到类似问题时,它加载技能并遵循经过验证的流程,而不是从头重新发现方法。

该工具支持六个操作:create、patch(针对性修复,首选,因为节省 Token)、edit(完全重写)、delete、write_file 和 remove_file。

Akshay 🚀 - inline image

Curator:技能的垃圾回收。

没有维护,Agent 创建的技能会堆积起来。你最终会得到几十个狭窄、重叠的操作手册,浪费 Token 并污染目录。

Curator 是一个后台维护系统,负责处理这个问题。它基于不活动检查运行(不是 cron 守护进程):如果自上次运行以来已经过了 7 天,并且 Agent 已经空闲了 2 小时以上,则 Agent 的一个后台分支会启动,拥有自己的提示缓存,永远不会触及活动对话。

它分两个阶段运行:

  1. 自动转换(确定性,无需 LLM):30 天未使用的技能变为陈旧。90 天未使用的技能被归档。
  2. LLM 审查(最多 8 次迭代):一个分支 Agent 调查所有 Agent 创建的技能,并决定每个技能是保留、修补、合并还是归档。

两个重要约束:

  • Curator 从不触及捆绑或从中心安装的技能。只处理 Agent 编写的技能。
  • 它从不自动删除。最坏的情况是归档到 ~/.hermes/skills/.archive/,可以用一个命令恢复。

在每次 Curator 运行之前,Hermes 会对整个技能目录进行 tar.gz 快照。回滚只需一个命令,并且回滚本身是可逆的。

你还可以使用 hermes curator pin <skill> 固定关键技能,以保护它们不被归档或删除。修补和编辑仍然可以执行,因此 Agent 可以改进固定技能,而无需你先取消固定。

Akshay 🚀 - inline image

GEPA:使用执行轨迹离线进化技能

这里变得有趣了。

Agent 内的学习循环(技能创建 + Curator)有一个已知的弱点:

  • Agent 倾向于自我表扬。它几乎总是认为自己表现良好,即使事实并非如此。社区反馈已经证实了这一点。
  • 自动生成技能的系统也可能用更差的版本覆盖手动自定义。

这就是 GEPA 的用武之地。

GEPA(遗传-帕累托提示进化)并未内置于 Hermes 运行时中。它位于一个配套仓库(NousResearch/hermes-agent-self-evolution)中,作为一个离线优化管道运行。已作为 ICLR 2026 Oral 论文 发表,MIT 许可。

核心思想:不是问 Agent“你做得好吗?”,GEPA 读取执行轨迹以理解为什么失败,然后通过进化搜索提出有针对性的改进。

管道:

  1. 从 Hermes 仓库读取当前技能
  2. 生成评估数据集(通过 Claude Opus 的合成测试用例、来自 SQLite 的真实会话历史或手工策划的黄金集)
  3. 运行 GEPA 优化器:读取执行轨迹 → 理解失败点 → 生成候选变体
  4. 使用 LLM 作为评判者进行评分(使用评分标准,而非二元通过/失败)
  5. 应用约束门:完整测试套件必须 100% 通过,技能保持在 15KB 以下,缓存兼容性得到保留,语义目的不发生漂移
  6. 最佳变体作为针对 Hermes 仓库的 PR 输出。从不直接提交。

无需 GPU。所有操作都通过 API 调用完成。成本:每次优化运行约 $2-10。

这可以在开始时跳过,但当你遇到瓶颈并且不想花费时间和金钱进行微调(RL/GRPO)时,它非常有效。

更多详情请见该仓库 →

Akshay 🚀 - inline image

我最近写了一篇关于 GEPA 的文章。

在转向全面微调或基于 RL 的微调之前,它是一个很好的替代方案。

Akshay 🚀 - inline image

好了,总结一下:

SOUL.md 设定身份。运行时循环捕获经验。Curator 保持库整洁。GEPA 确保库中的内容确实有效。

以上就是完整的理论。现在让我们在你的机器上运行它。

启动与运行

Linux、macOS 或 WSL2。Python 3.11+ 随安装程序一起提供。8GB RAM 对于基于 API 的使用来说足够了。

一行安装:

运行设置向导。它会引导你完成提供者、API 密钥、模型和工具的选择:

在终端中开始聊天:

将其连接到 Telegram:

如果你想从手机而不是终端与 Agent 对话,请将其指向一个 Telegram 机器人。

@BotFather 获取机器人令牌(运行 /newbot),然后从 @userinfobot 获取你的 Telegram 用户 ID。

就这样。你有了一个可以工作的 Agent:

~/.hermes/ 中的内容

安装后,你的主目录会立即获得一个新文件夹。

了解这个布局是值得的,因为你使用 Hermes 所做的一切都会触及这些路径之一。

有几个文件值得仔细看看。

  • config.yaml 是所有非秘密信息的真相来源。模型选择、终端后端、工具启用、MCP 服务器都在这里。使用 hermes config edit 编辑,或使用 hermes config set <key> <value> 逐个设置值。
  • .env 保存你的秘密。API 密钥、机器人令牌、密码。Hermes 会自动将看起来像秘密的值路由到这里。
  • SOUL.md 是系统提示中的 1 号位置,在所有其他内容之前。身份层,前面已经介绍过。
  • skills/ 是整个学习循环所在的地方。Agent 创建的每个技能,以及你安装的所有内容,都放在这里。
  • state.db 是支持会话搜索的 SQLite 数据库。WAL 模式安全,FTS5 索引。这就是“我们三周前讨论了什么?”真正起作用的原因。

你不会手动编辑其中的大部分内容。但了解布局会让其他一切变得清晰。

添加新技能

Hermes 维护着自己的官方 技能中心,包含 18 个类别的 687 个技能。细分如下:

  • 87 个随 Agent 一起提供的内置技能
  • 79 个可按需启用的可选技能
  • 16 个来自 Anthropic(前端设计、pdf、pptx、docx、mcp-builder 等)
  • 505 个来自 LobeHub(更广泛的社区贡献)
Akshay 🚀 - inline image

你还可以将任何 GitHub 仓库添加为自定义 tap:

这就是你如何在团队中共享技能或维护自己的私有集合的方法。

从 1 个 Agent 扩展到 10 个 Agent

一个 Agent 很好。多个专门的 Agent 才是 Hermes 真正有趣的地方。

Hermes 有一个名为 profiles 的一流功能。每个 profile 都是一个完全隔离的 Hermes 实例,拥有自己的配置、记忆、技能、会话和 SOUL.md。默认情况下它们不共享任何东西。

我们将设置三个:一个设计师、一个程序员和一个研究员。

创建一个团队

--clone 会复制你默认 profile 的 config 和 .env 作为起点。

为每个 Agent 分配自己的 Telegram 机器人

每个 profile 需要自己的 BotFather 机器人。Telegram 只允许每个令牌一个连接,因此共享会出问题。

使用 BotFather 运行 /newbot 三次,保存三个令牌。然后为每个 profile 运行一次网关向导:

设置与常规 Agent 完全相同,你可以再次在 Bot Father 中创建新机器人并将它们连接到各自的 Agent。

通过 SOUL.md 为每个 Agent 赋予个性

这是 Agent 之间真正变得不同的地方。编辑每个 profile 的 SOUL.md。

设计师位于 ~/.hermes/profiles/designer/SOUL.md:

看看这些例子:

Akshay 🚀 - inline image

程序员位于 ~/.hermes/profiles/programmer/SOUL.md:

研究员位于 ~/.hermes/profiles/researcher/SOUL.md:

自定义程序员:通过 Claude Code 路由执行

如果程序员不仅自己编写代码,而是将执行委托给 Claude Code CLI,它会更有趣。Hermes 进行编排。Claude Code 执行文件编辑、运行命令、管理 git。Hermes 读取结果并决定下一步。

这也是我在我的 Claude Max 订阅之上运行它的方式。无需单独的 API 密钥。Claude Code 自动使用 Max 凭据。

启动一个会话并发送这个激活提示:

我已经有一个 Claude Max 订阅。你是我的员工工程师,帮助我处理日常编码任务,在底层你使用 Claude Code 进行所有执行。请相应地进行设置。

程序员会自动安装 autonomous-ai-agents/claude-code 技能,验证 claude 在 PATH 上,并开始将其用于代码执行。从下一条消息开始,任何与编码相关的事情(读取文件、编写代码、运行测试、提交、推送)都会在底层通过 Claude Code 进行。

有两件事值得了解:

  • 在激活之前,请确保 claude 在你的 PATH 上。which claude 应该打印出一个真实的二进制路径。
  • Claude Code 既有打印模式(一次性、快速、无 TUI)也有交互模式(完整的 tmux 会话)。程序员根据任务选择。你不需要考虑它。

自定义设计师:教它你的视觉风格

当设计师能够生成你风格的图像,而不是通用的 AI 输出时,它才真正变得有用。模式:给它参考设计,让它研究,要求它创建一个技能,以相同的风格生成新图像。

这是将自我改进循环用作设置机制。你不是手动编写技能,而是向 Agent 展示好的例子,并要求它自己编码模式。

启动一个与设计师的会话并粘贴你的参考图像(在 CLI 在 CLI 中拖放,或在 Telegram 中附加)。然后发送这个提示:

设计师会研究参考,编写 SKILL.md,生成 Python 脚本,将其保存在 ~/.hermes/profiles/designer/skills/my-design-style/ 下,并验证脚本运行。

如果你已经运行了 hermes setup 并选择了 OpenRouter 作为提供者,由于 --clone,密钥已经在设计师 profile 的 .env 中。如果没有,添加一次:

从那时起,要求设计师制作新插图会触发该技能。它编写一个由你的风格特征提示的提示,通过 OpenRouter 调用 Nano Banana,并保存输出。

同样的模式适用于任何风格特定的输出。提供参考内容,要求 Agent 构建一个能复现该模式的技能。新闻简报开头、X 线程、代码审查评论,任何需要一致性的地方。

调度工作:用通俗英语写 Cron

研究员的 SOUL.md 说它负责每日 Telegram 摘要。这意味着一个按自己的计划运行的任务,不需要你记得去问。这就是 Hermes cron 的用途。

Hermes 自带一个内置调度器。网关守护进程每 60 秒滴答一次,在隔离的 Agent 会话中运行任何到期的作业,并将输出传递给你指定的任何消息平台。作业在重启后仍然存在。它们位于 ~/.hermes/cron/jobs.json,输出到 ~/.hermes/cron/output/。

Akshay 🚀 - inline image

有趣的部分:你不写 cron 表达式。你用英语描述你想要什么,Hermes 会转换它。

连接研究员的每日摘要

打开一个与研究员会话并发送这个提示:

研究员使用其 cronjob 工具创建作业,交付目标默认为当前聊天(本例中为 Telegram),调度器接管。验证它是否已创建:

你应该看到该作业及其下一次计划运行时间。明天早上 8 点,你的 Telegram 会收到摘要。无需进一步操作。

其他有用的模式

cron 语法很灵活。几个值得知道的变体:

  • 一次性延迟。/cron add 30m "Remind me to check the build" 在 30 分钟后运行一次。
  • 重复间隔。/cron add "every 2h" "Check server status" 每两小时运行一次。
  • 标准 cron 表达式。/cron add "0 9 \ \ 1-5" "..." 用于精确控制。本例中为工作日早上 9 9 点。
  • 技能附加。/cron add "every 1h" "Summarize new feed items" --skill blogwatcher 在运行提示之前加载一个技能。

你还可以链式作业。一个 cron 的输出通过 context_from 标志成为下一个 cron 的输入。对于多阶段自动化很有用,你希望研究步骤为写作步骤提供输入。

就是这样。

感谢阅读。请在评论中告诉我你希望我接下来介绍什么。

如果你更喜欢通过视频学习,我将在几天内在 YouTube 和 X 上发布完整的 Hermes Agent 演练。

敬请期待!

干杯! :)

存到 YouMind

使用 YouMind 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind

更多可拆解样本

近期爆款文章

探索更多爆款文章