新钛云服已累计为您分享881篇技术干货
理解并自定义 Hermes Agent 你需要知道的一切。
Hermes Agent 在两个月内突破了 100,000 GitHub Star。众多开发者都在悄然构建个人 AI 智能体,它们能学习你的工作流、记住上下文,并 24/7 全天候运行。
Hermes Agent 采用了根本不同的架构理念,这使其比 OpenClaw 更具实用价值。它内置了一套学习循环(Learning Loop),能够:
跨会话记忆
自动生成可复用的技能(Skills)
在后台自动修剪冗余技能
通过名为 GEPA 的进化引擎进行离线验证
没有其他的开源智能体能同时实现以上所有功能。即使是 OpenClaw 也不行。
本指南将详细解释这套学习循环如何运作、每个记忆层的职责,以及如何从零开始配置所有功能。
最终,你将拥有三个完全隔离的智能体在你的机器上运行:一个程序员(使用你的 Claude Code)、一个深度研究员和一个设计师。每个智能体都有自己的个性、记忆、技能库和 Telegram 机器人。
看看这个效果:
整个配置过程只需几分钟,且所有操作都可以在你自己的硬件上完全复现。
Hermes 是什么?
它在架构上有什么独特之处?
一句话介绍:一个越用越强的智能体。
之所以能实现,是因为通常独立的能力被整合到了同一个框架中:运行时技能学习、持久的多层记忆,以及可选的权重训练管线。没有其他的开源智能体同时具备这三项。
开源生态中最接近的对比是 OpenClaw。两者都是持久化且支持消息通讯的智能体,但它们在架构选择上截然相反。
Kilo 博客的一段精辟总结精准概括了这一点:
"Hermes 是将一个网关包裹在一个学习型智能体周围。而 OpenClaw 是将一个智能体包裹在消息网关周围。"
它是如何构建的?
要让学习循环的概念有意义,首先需要理解 Hermes 的基础架构。
所有功能都通过 run_agent.py 脚本中的单一 AIAgent 类流转。CLI、消息网关、批量运行器、IDE 集成——它们都是同一个核心智能体的入口点。
这就是为什么它的跨平台方案能够真正落地的原因。
核心循环是ReAct 风格且同步的。构建系统提示词 → 检查是否需要压缩 → 发起可中断的 API 调用 → 执行任何工具调用 → 循环再次执行。
几个关键细节:
命令可以在六个不同位置执行:本地终端、Docker、SSH、Modal、Daytona 或 Singularity。代码相同,只需更改配置。你可以将执行环境从你的笔记本迁移到云端 GPU 服务器,无需修改其他代码。
兼容几乎任何模型:一个翻译层将任何提供商的请求路由为三种 API 格式之一。这就是为什么你可以用一条命令在 Claude、GPT、Gemini 和本地 Ollama 之间自由切换而不会出错。
硬限 90 轮对话:每个任务最多 90 轮对话。如果没有这个限制,陷入循环的智能体(不断重试失败的 API、反复读取同一个文件)会悄无声息地烧光你的额度。子智能体共享同一预算,因此失控的委托链也无法绕过限制。
记忆之前:身份层(SOUL.md)
在讨论记忆和自进化技能之前,有一层位于它们之上的基础:身份(Identity)。
记忆是智能体知道什么,技能是它如何做事。但两者都没有告诉它"当它出现时,它是谁"。没有身份层,每个智能体感觉都像是戴着不同帽子的同一个智能体。
Hermes 通过一个文件解决了这个问题:SOUL.md。
它位于 ~/.hermes/SOUL.md,占据系统提示词的第 1 号位置,在所有其他内容加载之前。它定义智能体的个性、语气、沟通风格和硬性限制。
SOUL.md 是人工编写且静态的。你只需写一次,之后偶尔微调,它在每个项目和每个会话中保持一致。如果文件缺失,Hermes 会回退到内置的默认身份。
为什么这对于自进化至关重要?因为后续的一切(智能体编写的记忆、它创建的技能、它整合知识的方式)都是通过这一身份的透镜完成的。
SOUL.md 是固定的框架,记忆和技能是框架内动态运作的部件。
记忆系统
Hermes 没有单一的"记忆"。它有三层,每层针对不同的目的设计。
第 1 层:两个微小的 Markdown 文件
核心是两个存储在磁盘上的文件:
MEMORY.md(最大 2,200 字符):保存智能体关于你的环境、项目规范、工具怪癖和已学教训的笔记。
USER.md(最大 1,375 字符):保存你的画像——姓名、沟通偏好、技能水平和需要避免的事项。
两者都在会话开始时作为冻结快照注入系统提示词。如果智能体在会话中间编写了新记忆条目,该更改会立即持久化到磁盘,但不会在下次会话开始前出现在系统提示词中。
当记忆填满(达到 ~80% 容量,在系统提示词头部显示为百分比)时,智能体必须进行合并(Consolidation)。
它会将相关条目合并为更紧凑、信息密度更高的版本,确保只有有用的信息得以保留。
第 2 层:全文会话搜索
所有对话(CLI 和消息通讯)都存储在 SQLite 数据库中并支持全文搜索。智能体可以搜索过去数周的对话记录。
权衡很明显:第 1 层始终在上下文中但容量极小。第 2 层容量无限,但需要主动搜索加上 LLM 摘要。
关键事实存放在记忆中,其他所有内容按需提供搜索。
第 3 层:外部记忆提供者(8 个插件)
对于更深层的持久化记忆,Hermes 支持 8 个插件,它们与内置记忆并行运行(从不替换内置记忆)。同一时间只能有一个外部提供者处于活动状态。
当任何外部提供者激活时,Hermes 会在每次对话前自动预取相关记忆,在每次回复后同步对话轮次,并在会话结束时提取记忆。
自进化技能
记忆处理事实,技能处理流程。
技能是带有 YAML 前置元数据的 Markdown 文件,充当智能体的程序记忆(Procedural Memory)。
一个技能的结构如下:
---- Pod 保持 Running 状态且 5 分钟内无重启为了保持 Token 成本低位,技能使用渐进式披露(Progressive Disclosure):
Level 0→ 智能体仅看到名称和描述(整个技能目录约 3k Token)
Level 1→ 实际需要使用某个技能时,才加载完整内容
Level 2→ 可以深入技能内的特定参考文件
自改进循环
这是核心差异点。智能体使用 skill_manage 工具自主创建自己的技能。触发创建的条件包括:
完成了一个复杂任务(5+ 工具调用)
遇到错误或死胡同并找到了可行路径
用户纠正了它的方法
发现了一个非平凡的工作流
循环运作方式如下:智能体遇到问题 → 通过试错解决 → 将成功的方法保存为 SKILL.md 文件 → 下次遇到类似问题时,加载技能并遵循经过验证的流程,而非从零开始重新发现。
该工具支持六种操作:create(创建)、patch(目标修复,推荐因为它节省 Token)、edit(全文重写)、delete(删除)、write_file(写入文件)和 remove_file(移除文件)。
技能的垃圾回收(Curator)
如果没有维护,智能体创建的技能会堆积如山。你最终会有几十个狭窄、重叠的操作手册,浪费 Token 并污染目录。
Curator是一个后台维护系统,负责处理这个问题。
它基于不活跃度检查(而非定时守护进程)。如果距离上次运行已过去 7 天且智能体已空闲 2+ 小时,一个后台分叉的智能体会启动,拥有独立的提示词缓存,绝不触碰活跃对话。
它分两个阶段运行:
自动过渡(确定性,无需 LLM): 30 天未使用的技能标记为过时。90 天未使用的技能被归档。
LLM 审查(最多 8 次迭代):一个分叉智能体检查所有智能体创建的技能,并逐技能决定是保留、修补、合并还是归档。
两个重要约束:
Curator从不触碰捆绑技能或 Hub 安装的技能。只处理智能体原创的技能。
它从不自动删除。最坏结果是归档到 ~/.hermes/skills/.archive/,可通过一条命令恢复。
每次 Curator 运行前,Hermes 会对整个技能目录创建一个 tar.gz 快照。回滚只需一条命令,且回滚本身也是可逆的。
你还可以用 hermes curator pin 固定关键技能,保护它们不被归档或删除。修补和编辑仍然会执行,这样智能体可以改进固定的技能而无需你取消固定。
GEPA:通过执行轨迹离线进化技能
智能体内学习循环(技能创建 + Curator)有一个已知弱点:
智能体倾向于自我表扬。即使它表现不佳,它也几乎总是认为自己做得很好。社区反馈已证实这一点。
同一套自动生成技能的系统也可以覆盖手动自定义,生成更差的版本。
GEPA(Genetic-Pareto Prompt Evolution,遗传-帕累托提示进化)解决了这个问题。
它不内置于 Hermes 运行时。它位于一个配套仓库(NousResearch/hermes-agent-self-evolution)中,作为离线优化管线运行。
核心思想是:不问智能体"你做得好吗?",而是 GEPA 读取执行轨迹来理解失败原因,然后通过进化搜索提出针对性改进。
管线流程:
读取 Hermes 仓库中的当前技能
生成评估数据集(通过 Claude Opus 合成测试用例、从 SQLite 获取真实会话历史,或人工策划的黄金数据集)
运行 GEPA 优化器:读取执行轨迹 → 理解失败点 → 生成候选变体
使用 LLM 作为评判者评分(基于标准量表,而非简单的通过/失败)
应用约束门控:测试套件必须 100% 通过、技能保持 <15KB、保持缓存兼容性、语义目的不漂移
最佳变体作为 PR 提交到 Hermes 仓库。从不直接提交代码。
无需 GPU。所有操作通过 API 调用完成。成本:每次优化运行约 $2-10。
这可以在初期跳过,但当你遇到瓶颈且不想花费时间和金钱进行微调(RL/GRPO)时,它非常有效。
更多细节请参阅该仓库 → NousResearch/hermes-agent-self-evolution
从零开始在本地运营
环境要求:Linux、macOS 或 WSL2。Python 3.11+(安装器自带)。8GB RAM 用于 API 模式足够。
source ~/.bashrc # 或 ~/.zshrc运行设置向导,引导你完成提供商、API 密钥、模型和工具的选择:
hermes setup然后在终端开始对话:
hermes如果你想用手机跟智能体聊天而非终端,将其指向 Telegram 机器人。
从 @BotFather 获取机器人令牌(运行 /newbot)
从 @userinfobot 获取你的 Telegram 用户 ID
这将给你一个可用的智能体:
~/.hermes/里面有什么?
安装后,你的主目录会获得一个新文件夹。
了解其布局很有价值,因为你对 Hermes 做的所有操作都会触及以下路径之一:
└── logs/ # agent.log, gateway.log, errors.log几个文件值得深入了解:
config.yaml:所有非机密配置的权威来源。模型选择、终端后端、工具启用、MCP 服务器等都住在这里。使用 hermes config edit 编辑,或用 hermes config set 逐个设置。
.env:保存你的机密。API 密钥、机器人令牌、密码。Hermes 会自动将看起来像机密的路由到这里。
SOUL.md:系统提示词 插槽,在所有其他内容之前。身份层,前文已覆盖。
skills/:整个学习循环居住的地方。智能体创建的每个技能以及你安装的都落在这里。
state.db:支持会话搜索的 SQLite 数据库。
添加新技能
Hermes 维护着自己官方的 Skills Hub,包含 **687 个技能**,横跨 18 个类别。具体构成:
87 个内置技能,随智能体自带
79 个可选技能,可按需启用
16 个来自 Anthropic(frontend-design、pdf、pptx、docx、mcp-builder 等)
505 个来自 LobeHub(更广泛的社区贡献)
你也可以将任何 GitHub 仓库添加为自定义源:
hermes skills install yourname/your-skills-repo/这就是你在团队间共享技能或维护自己的私有收藏的方式。
从 1 个到 10 个智能体
一个智能体就很好。多个专用智能体才是 Hermes 真正有趣的地方。
Hermes 为此提供了一流的功能,称为 **Profiles(配置文件)**。每个配置文件是一个完全隔离的 Hermes 实例,拥有自己的配置、记忆、技能、会话和 SOUL.md。默认情况下它们互不共享。
我们将设置三个:一个设计师、一个程序员和一个研究员。
hermes profile list--clone 会复制默认配置文件的配置和 .env 作为起点。
为了让每个智能体拥有自己的 Telegram 机器人,每个配置文件需要 BotFather 创建一个新的机器人。Telegram 每个令牌只允许一个连接,共享会导致问题。
用 BotFather 运行三次 /newbot 并保存三个令牌。然后为每个配置文件运行一次网关向导:
hermes -p researcher gateway setup设置与普通智能体完全相同,你可以在 BotFather 中创建新机器人并将其连接到各自的智能体。
通过 SOUL.md 赋予每个智能体个性:
设计师 ~/.hermes/profiles/designer/SOUL.md
当插图弊大于利时,要敢于说"不"。程序员 ~/.hermes/profiles/programmer/SOUL.md
说"完成"之前先运行测试。研究员 ~/.hermes/profiles/researcher/SOUL.md
从不将有争议的声明表述为既定事实。从不捏造引用。让程序员的执行路由到 Claude Code
如果程序员不是自己写代码,而是将执行委托给 Claude Code CLI,同时由 Hermes 协调,那会变得更有趣。
Claude Code 负责文件编辑、命令执行和 git 管理。Hermes 读取结果并决定下一步。
这也让我们能够在不单独购买 API key 的情况下,在 Claude Max 订阅上运行。Claude Code 会自动使用 Max 凭证。
启动一个会话并发送这条激活提示词:
请相应地配置自己。程序员会自动安装 autonomous-ai-agents/claude-code 技能,验证 Claude 是否在 PATH 中,并开始用它执行代码。从下一条消息开始,所有与编码相关的操作(读取文件、编写代码、运行测试、提交、推送)都会在底层路由到 Claude Code。
两个值得注意的点:
1. 激活前确保 claude 在你的 PATH 中。which claude 应该打印一个真实的二进制路径。
2. Claude Code 有 print 模式(一次性、快速、无 TUI)和 interactive 模式(完整 tmux 会话)。程序员会根据任务选择。你无需操心。
定制设计师:教它你的视觉风格
当设计师能生成你风格的图片,而非通用的 AI 输出时,它才真正有用。方法是将参考设计喂给它,让它学习,然后要求它创建一个生成同风格图片的技能。
这是将自改进循环用作设置机制。你无需手写技能,而是向智能体展示优秀范例,让它自己编码模式。
与设计师启动一个会话,粘贴你的参考图片(CLI 中拖拽,或在 Telegram 中附件)。然后发送这条提示词:
使用 skill_manage 创建它。在说完成之前,先用示例提示词测试生成的脚本。设计师会研究参考图片,编写 SKILL.md,生成 Python 脚本,保存到 ~/.hermes/profiles/designer/skills/my-design-style/,并验证脚本运行正常。
如果你已经运行了 hermes setup 并选择了 OpenRouter 作为提供商,密钥已经通过 --clone 存在于设计师配置文件的 .env 中。如果没有,添加一次:
hermes -p designer config set OPENROUTER_API_KEY从此以后,向设计师请求新插图会触发该技能。它会根据你的风格指纹编写提示词,通过 OpenRouter 调用 Nano Banana,并保存输出。
同样的模式适用于任何风格特定的输出。喂入参考内容,要求智能体构建一个复现模式的技能。通讯简报引言、X 帖子、代码审查评论——任何需要一致性的场景都适用。
使用定时任务调度工作
研究员的 SOUL.md 说它负责每日 Telegram 摘要。这意味着一个按自己时间表运行的任务,无需你每次记得去问。这就是 Hermes cron 的用途。
Hermes 内置了一个调度器。网关守护进程每 60 秒tick一次,在隔离的智能体会话中运行到期的任务,并将输出投递到你指定的消息平台。
任务在重启后依然存在。它们住在 ~/.hermes/cron/jobs.json,输出进入 ~/.hermes/cron/output/。
你不需要编写 cron 表达式。你用英语描述需求,Hermes 会将其转换。
要为研究员的每日摘要接线,打开一个与研究员的会话并发送这条提示词:
将此设为 recurring cron 任务。研究员会使用其 cronjob 工具创建任务,投递目标默认为当前聊天(此处为 Telegram),然后调度器接管。验证是否创建成功:
hermes -p researcher cron list你应该能看到任务及其下一次计划的运行时间。
其他有用的模式
cron 语法很灵活。几个值得了解的变体:
一次性延迟→ /cron add 30m "提醒我检查构建" 30 分钟后运行一次。
循环间隔→ /cron add "every 2h" "检查服务器状态" 每两小时运行一次。
标准 cron 表达式→ /cron add "0 9 * * 1-5" "..." 精确控制。此处为工作日上午 9 点。
技能附加→ /cron add "every 1h" "总结新 feed 项" --skill blogwatcher` 运行提示词前加载技能。
你也可以链式连接任务。一个 cron 的输出通过 `context_from` 标志成为下一个 cron 的输入。适用于多阶段自动化,让研究步骤喂养写作步骤。
总 结
SOUL.md设定身份
运行时循环捕获经验
Curator保持技能库整洁
GEPA确保库中的内容真正可用
上述就是本文完整的内容。现在大家可以根据本文的步骤,尝试一下。
如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。
热门跟贴