编程 Hermes Agent 深度实战:NousResearch 开源的自进化 AI 智能体——从闭环学习架构到生产级部署的全链路解析

2026-05-08 07:10:58 +0800 CST views 9

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 0skills_list(){name, description, category},约 3K Token
  • Level 1skill_view(name) → 完整内容 + 元数据
  • Level 2skill_view(name, path) → 特定引用文件

条件激活机制:技能声明 fallback_for_toolsetsrequires_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 自身代码
singularityHPC 集群、无 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 会:

  1. 记录偏差:识别出缺少 JIRA ticket 处理步骤
  2. 自适应修改:更新 SKILL.md,加入 "Ask user for JIRA ticket number"
  3. 下次改进:执行时主动询问 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 上下文压缩三层防线

  1. 提示词缓存:冻结快照 + Anthropic 前缀缓存
  2. 有损摘要:上下文超阈值时自动压缩早期对话
  3. 手动压缩/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 是「伙伴型」的——它了解你、记住你、在学习中适应你,随着时间推移变得越来越有用。

这种转变的核心不是某个单一技术,而是三个设计理念的融合:

  1. 闭环学习:GEPA 系统让 Agent 从经验中自动提取可复用知识,并通过实践不断打磨,实现了真正的「越用越好」。

  2. 有限记忆:严格的记忆容量上限迫使 Agent 进行信息筛选和抽象,这反而比无限记忆更有效——因为无限记忆意味着无限噪音,而有限记忆意味着必须提炼出真正重要的信息。

  3. 渐进式架构:从 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

推荐文章

联系我们
2024-11-19 02:17:12 +0800 CST
什么是Vue实例(Vue Instance)?
2024-11-19 06:04:20 +0800 CST
JavaScript设计模式:观察者模式
2024-11-19 05:37:50 +0800 CST
ElasticSearch 结构
2024-11-18 10:05:24 +0800 CST
Hypothesis是一个强大的Python测试库
2024-11-19 04:31:30 +0800 CST
三种高效获取图标资源的平台
2024-11-18 18:18:19 +0800 CST
五个有趣且实用的Python实例
2024-11-19 07:32:35 +0800 CST
赚点点任务系统
2024-11-19 02:17:29 +0800 CST
Python设计模式之工厂模式详解
2024-11-19 09:36:23 +0800 CST
CSS 特效与资源推荐
2024-11-19 00:43:31 +0800 CST
markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
PHP 的生成器,用过的都说好!
2024-11-18 04:43:02 +0800 CST
程序员茄子在线接单