Hermes Agent 深度实战:NousResearch 开源的自进化 AI 智能体——从闭环学习架构到生产级部署的全链路解析
一、引言:为什么我们需要一个「会进化」的 AI Agent?
2026 年的 AI Agent 领域,一个尴尬的现实是:绝大多数智能体本质上都是「无状态的 API 封装」——你问它一个问题,它回答;你再问一个,它忘得一干二净。每次会话都从零开始,经验无法沉淀,能力不会增长。这就好比你每天上班都带一个失忆的实习生,不管他昨天做了什么,今天他都得从头学起。
Nous Research 的 Hermes Agent 试图打破这个魔咒。这个 47K+ Star 的开源项目(MIT 许可证),核心卖点只有一句话:它是唯一一个内置闭环学习循环的 AI Agent——从经验中创建技能,在使用中改进技能,主动持久化知识,搜索自己的历史对话,跨会话构建越来越深的用户画像。
这不是又一个封装 LLM API 的工具库。Hermes Agent 是一个「会成长的智能体」——它能记住你的偏好、自动创建技能、跨会话检索记忆、在对话中自我改进,甚至在完成任务后将最佳实践固化为可复用的技能模块。
本文将从架构设计、核心机制、代码实战三个维度,全面拆解 Hermes Agent 的自进化原理,并给出生产级部署的最佳实践。
二、核心概念:闭环学习循环
2.1 GEPA:自进化的引擎
Hermes Agent 的自进化能力源于 GEPA(Generate-Evaluate-Practice-Adapt)闭环系统,四个阶段构成智能体从经验中学习的完整循环:
Generate(生成):当 Agent 完成复杂任务后,系统自动触发技能生成。它分析执行路径、使用的工具、遇到的问题和解决方案,提炼成结构化的技能文件(SKILL.md)。这不是日志记录,而是「元知识提取」——把「怎么做的」抽象成「以后怎么做」。
Evaluate(评估):新技能不会直接投入使用。系统在后续会话中评估其有效性——当类似场景出现时加载技能并观察执行结果,完成率高于不加载则保留,否则标记待改进。
Practice(实践):技能在反复使用中打磨。每次使用执行任务时,Agent 记录偏差——哪些步骤多余、哪些缺失、哪些参数不够精确。
Adapt(适应):基于偏差数据,系统自动修改技能文件——调整步骤顺序、补充遗漏、删除冗余。修改后进入下一轮评估,形成持续进化的闭环。
2.2 四层记忆架构
Hermes Agent 的记忆分为四个层级,层层递进:
第一层:当前会话上下文。等同于 LLM 的上下文窗口,会话结束即消失,但归档到第三层。
第二层:持久化记忆文件。MEMORY.md(Agent 笔记,最多 2200 字符)和 USER.md(用户画像,最多 1375 字符),存储在 ~/.hermes/memories/,每次会话开始注入系统提示词。Agent 通过 memory 工具自主管理——添加、替换、删除条目。
第三层:会话归档数据库。SQLite + FTS5 全文检索,Agent 通过 session_search 搜索历史对话,实现跨会话知识回溯。
第四层:用户画像。通过 Honcho 辩证式用户建模系统构建深层理解,从对话中的隐式信号推断思维模式、决策习惯和认知偏好。
设计哲学:有限但精确。严格的字符上限迫使 Agent 像人类一样,只记住真正重要的事。空间满时自主执行「记忆整合」——合并冗余、删除过时、提炼抽象。
2.3 技能系统:程序性记忆
技能以 SKILL.md 文件存储在 ~/.hermes/skills/,遵循 agentskills.io 开放标准:
---
name: my-skill
description: Brief description of what this skill does
version: 1.0.0
platforms: [macos, linux]
metadata:
hermes:
tags: [python, automation]
category: devops
fallback_for_toolsets: [web]
requires_toolsets: [terminal]
---
# Skill Title
## When to Use
Trigger conditions for this skill.
## Procedure
1. Step one
2. Step two
## Pitfalls
- Known failure modes and fixes
## Verification
How to confirm it worked.
渐进式披露,极度节省 Token:
- Level 0:
skills_list()→{name, description, category},约 3K Token - Level 1:
skill_view(name)→ 完整内容 + 元数据 - Level 2:
skill_view(name, path)→ 特定引用文件
条件激活机制:技能声明 fallback_for_toolsets 和 requires_toolsets,根据可用工具集自动显隐。例如 DuckDuckGo 搜索设置 fallback_for_toolsets: [web],只有付费 Web 搜索不可用时才自动出现。
三、架构分析:事件驱动的模块化设计
3.1 系统全景
┌──────────────────────────────────────────────────────────────┐
│ Entry Points │
│ CLI (cli.py) Gateway (gateway/run.py) ACP (acp_adapter/) │
│ Batch Runner API Server Python Library │
└──────┬──────────────┬───────────────────────┬────────────────┘
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────┐
│ AIAgent (run_agent.py) │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ Prompt │ │ Provider │ │ Tool │ │
│ │ Builder │ │ Resolution │ │ Dispatch │ │
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
│ ┌─────┴──────┐ ┌─────┴──────┐ ┌─────┴──────┐ │
│ │Compression │ │ 3 API Modes│ │ Registry │ │
│ │ & Caching │ │chat/codex/ │ │ 61 tools │ │
│ │ │ │ anthropic │ │ 52 toolsets│ │
│ └────────────┘ └────────────┘ └────────────┘ │
└──────┴──────────────────┴──────────────────┴─────────────────┘
▼ ▼
┌──────────────┐ ┌───────────────────┐
│ Session │ │ Tool Backends │
│ Storage │ │ Terminal (7) │
│ (SQLite+FTS5)│ │ Browser (5) │
└──────────────┘ │ Web (4) MCP (dyn) │
└───────────────────┘
3.2 核心模块
AIAgent(run_agent.py,~13,700 行) 是核心状态机:接收输入 → 构建提示词 → 调用 LLM → 处理工具调用 → 压缩上下文 → 持久化状态。
Prompt Builder 按优先级注入:系统角色 → 记忆快照 → 技能索引 → 上下文文件 → 工具定义。冻结快照模式保留 LLM 前缀缓存,避免每次工具调用后重新编码。
Tool Dispatch 支持 OpenAI Chat Completions、Codex Responses 和 Anthropic Messages 三种格式,根据模型自动切换。
3.3 七种终端后端
| 后端 | 适用场景 |
|---|---|
| local | 开发、可信任务 |
| docker | 安全隔离、可复现 |
| ssh | 保护 Agent 自身代码 |
| singularity | HPC 集群、无 root |
| modal | 云端 Serverless、按需付费 |
| daytona | 持久远程开发环境 |
| vercel_sandbox | 快照文件系统持久化 |
Docker 后端启动持久容器,所有操作通过 docker exec 路由——像沙箱 VM 而非一次性容器。SSH 后端将终端操作路由到远程机器,确保 Agent 无法修改自身代码。
3.4 消息网关
Gateway(~12,200 行)支持 20 个平台:Telegram、Discord、Slack、WhatsApp、Signal、Matrix、钉钉、飞书、企业微信等。单进程事件循环处理并发,包括入站消息转换、DM 配对授权、会话管理、出站交付和跨会话镜像。
四、代码实战:从零到生产部署
4.1 安装与配置
# 一键安装(Linux/macOS/WSL2/Android Termux)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc
hermes setup # 完整配置向导
4.2 多模型热切换
/model openrouter:anthropic/claude-sonnet-4
/model nous:hermes-3
/model openai:gpt-4o
/model nvidia:nemotron
/model xiaomi:mimo
/model zai:glm-4
/model minimax:abab-7
配置文件 ~/.hermes/config.yaml:
provider: openrouter
model: anthropic/claude-sonnet-4
providers:
openrouter:
api_key: ${OPENROUTER_API_KEY}
base_url: https://openrouter.ai/api/v1
openai:
api_key: ${OPENAI_API_KEY}
4.3 自定义技能开发
mkdir -p ~/.hermes/skills/github-pr-workflow
创建 SKILL.md:
---
name: github-pr-workflow
description: Automate GitHub PR creation with conventional commits
version: 1.0.0
metadata:
hermes:
tags: [github, devops]
category: development
requires_toolsets: [terminal]
---
# GitHub PR Workflow
## When to Use
User asks to create a pull request or push a feature branch.
## Procedure
1. Run `git status` and `git diff --stat`
2. Generate conventional commit message (feat/fix/refactor/docs)
3. Stage and commit
4. Create feature branch if needed
5. Push: `git push -u origin <branch>`
6. Create PR via `gh pr create`
7. Output PR URL
## Pitfalls
- Check merge strategy (squash/rebase)
- Check .github/PULL_REQUEST_TEMPLATE.md
- Never force push to shared branches
## Verification
PR URL accessible, CI passing/pending, reviewers correct
在 CLI 中:/skills 查看已加载技能,/github-pr-workflow 激活技能。
4.4 技能自进化
首次使用 PR 技能时,如果团队的 PR 模板要求 JIRA ticket 编号而技能中没有,Hermes 会:
- 记录偏差:识别出缺少 JIRA ticket 处理步骤
- 自适应修改:更新 SKILL.md,加入 "Ask user for JIRA ticket number"
- 下次改进:执行时主动询问 JIRA 编号
完全自动,无需手动编辑。
4.5 记忆管理
你: 记住,我的项目用 pnpm 而不是 npm
Hermes: [自动调用 memory 工具写入 USER.md]
记忆格式:
══════════════════════════════════════════════
MEMORY (your personal notes) [67% — 1,474/2,200 chars]
══════════════════════════════════════════════
User's project is a Rust web service using Axum + SQLx
§
This machine runs Ubuntu 22.04, Docker and Podman installed
§
User prefers concise responses, dislikes verbose explanations
4.6 定时任务
你: 每天早上9点检查服务器状态发到 Telegram
Hermes: [自动创建 cron job]
# CLI 创建
/cron add "every 9am" "Check server status and report"
# 技能背书的 Cron Job
hermes cron create "every 1h" "Summarize feeds" \
--skill blogwatcher --skill maps --name "Local brief"
# 指定工作目录
hermes cron create "every 1d at 09:00" \
"Audit open PRs, summarize CI health" \
--workdir /home/me/projects/acme
安全防护:Cron 执行的会话不能递归创建新 Cron Job,防止失控。
4.7 子代理委派
你: 同时做三件事:1) 搜索最新 Rust 框架 2) 检查服务器磁盘空间 3) 总结昨天会议记录
Hermes: [生成三个子代理并行执行,汇总结果]
子代理运行在独立上下文,不占用主会话 Token,完成后压缩摘要回传。
五、生产级部署与性能优化
5.1 最低成本方案:$5 VPS
最低硬件:1 核 CPU、2GB 内存、20GB SSD、Python 3.11+。
hermes gateway setup
hermes gateway start
配置 systemd 守护:
[Unit]
Description=Hermes Agent Gateway
After=network.target
[Service]
Type=simple
User=hermes
ExecStart=/home/hermes/.local/bin/hermes gateway start --foreground
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
5.2 Serverless 方案
Daytona 和 Modal 后端提供 Serverless 持久化——空闲时休眠,收到消息按需唤醒,空闲成本近乎为零:
# Modal
uv pip install modal && modal setup
hermes config set terminal.backend modal
# Daytona
hermes config set terminal.backend daytona
5.3 安全加固
生产环境核心原则:永远不让 Agent 直接操作宿主机。
推荐架构:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Hermes │───▶│ SSH 跳板 │───▶│ Docker │
│ (Gateway) │ │ (隔离层) │ │ (执行区) │
└──────────┘ └──────────┘ └──────────┘
配置:
terminal:
backend: ssh
# ~/.hermes/.env
TERMINAL_SSH_HOST=sandbox.example.com
TERMINAL_SSH_USER=hermes-sandbox
TERMINAL_SSH_KEY=~/.ssh/hermes_sandbox
5.4 上下文压缩三层防线
- 提示词缓存:冻结快照 + Anthropic 前缀缓存
- 有损摘要:上下文超阈值时自动压缩早期对话
- 手动压缩:
/compress手动触发,/usage查看使用情况
5.5 MCP 集成
连接任意 MCP 服务器,获得无限扩展能力:
hermes config set mcp.servers.fs.command "npx"
hermes config set mcp.servers.fs.args '["-y", "@modelcontextprotocol/server-filesystem", "/data"]'
MCP 工具通过 mcp-<server> 动态工具集自动注册,无需手动配置工具定义。
5.6 从 OpenClaw 迁移
Hermes 提供了一键迁移工具:
hermes claw migrate
自动转换 OpenClaw 的配置文件、记忆数据、技能文件和定时任务到 Hermes 格式。
六、总结与展望
Hermes Agent 代表了 AI Agent 领域的一个重要演进方向:从工具到伙伴。传统的 Agent 是「工具型」的——你给它指令,它执行,关系到此为止。Hermes Agent 是「伙伴型」的——它了解你、记住你、在学习中适应你,随着时间推移变得越来越有用。
这种转变的核心不是某个单一技术,而是三个设计理念的融合:
闭环学习:GEPA 系统让 Agent 从经验中自动提取可复用知识,并通过实践不断打磨,实现了真正的「越用越好」。
有限记忆:严格的记忆容量上限迫使 Agent 进行信息筛选和抽象,这反而比无限记忆更有效——因为无限记忆意味着无限噪音,而有限记忆意味着必须提炼出真正重要的信息。
渐进式架构:从 Level 0 技能索引到 Level 2 详细引用,从本地终端到云端 Serverless,从 CLI 到 20 个消息平台——Hermes 的每个模块都支持「按需深入」,不强迫用户为不需要的功能付出开销。
展望未来,Hermes Agent 有几个值得关注的演进方向:
多 Agent 协作:目前的子代理委派是单向的(主 → 子),未来可能支持 Agent 间的双向协作,形成真正的「团队」。
技能市场:agentskills.io 开放标准为技能共享奠定了基础,未来可能形成类似 npm 的技能生态系统。
RL 驱动的策略优化:Hermes 内置了 Atropos RL 环境和批处理轨迹生成,暗示 Nous Research 可能在用用户交互数据训练下一代工具调用模型。
对于开发者而言,Hermes Agent 值得深入研究的不仅是它的功能,更是它的设计哲学——如何让 AI Agent 不只是一个执行者,而是一个真正的协作者。这个问题的答案,可能定义了 AI Agent 的下一个十年。
项目地址:https://github.com/NousResearch/hermes-agent
官方文档:https://hermes-agent.nousresearch.com/docs/
技能标准:https://agentskills.io
Nous Research:https://nousresearch.com