编程 Hermes Agent 深度解析:自进化 AI Agent 的三层记忆架构与 Skills 闭环实战

2026-05-28 14:37:01 +0800 CST views 17

Hermes Agent 深度解析:自进化 AI Agent 的三层记忆架构与 Skills 闭环实战

2026 年 2 月,Nous Research 开源了 Hermes Agent。不到 6 周,GitHub Star 突破 4.7 万,最高单日新增 6400+ Star,多次登顶 GitHub Trending 总榜。它凭什么?


一、背景:为什么现有 Agent 框架不够用?

2025–2026 年,AI Agent 框架层出不穷。LangChain、AutoGen、CrewAI……它们有一个共同痛点:没有持久记忆,不会自我进化

每次会话都是一张白纸。你昨天教过它的东西,今天重启就忘了。你让它学会了一个复杂任务的解决方法,下次遇到同类任务,它还是从零开始。

这不是"智能体",这是"有幻觉的脚本"。

Hermes Agent 的核心设计哲学就是解决这个问题:让 AI Agent 像人一样积累经验、记住过去、越用越聪明


二、核心架构:三层记忆 + Skills 闭环

2.1 三层记忆架构

Hermes Agent 的记忆系统借鉴了 CPU 缓存的分层设计思想,将记忆分为三个层次:

L1:核心记忆(MEMORY.md)—— "热记忆"

  • 容量:约 2200 字符(~800 tokens)
  • 加载时机:每次会话启动时注入系统提示词
  • 存储内容:环境事实、项目约定、重要经验教训
  • 典型数据:
    • "本项目使用 React 18 + TypeScript,测试框架是 Vitest"
    • "用户反馈不喜欢大段文字,希望用列表呈现"
    • "上次部署失败时,根源是 node_modules 缓存问题,需先 rm -rf node_modules && npm install"

关键设计:MEMORY.md 每次会话开始时被冻结为快照,注入 system prompt。这保证了核心上下文不丢失,同时避免了每次请求都携带全量历史造成的 token 浪费。

L2:用户画像(USER.md)—— "温记忆"

  • 容量:约 1375 字符(~500 tokens)
  • 存储内容:用户姓名、角色、技术栈偏好、沟通风格
  • 典型数据:
    • "张明,后端架构师,沟通风格偏向简洁,擅长 Go 语言"
    • "喜欢代码示例优先于理论解释"
    • "对性能优化话题特别感兴趣"

L3:会话记忆(SQLite + FTS5)—— "冷记忆"

  • 存储方式:SQLite 数据库,FTS5 全文索引
  • 容量:理论上无上限,受磁盘空间限制
  • 检索方式:毫秒级 FTS5 全文搜索
  • 存储内容:完整的历史会话记录、任务执行轨迹、技能文件

FTS5 全文索引的优势

-- Hermes Agent 内部使用类似这样的 FTS5 查询
SELECT * FROM memory_fts 
WHERE memory_fts MATCH 'React useEffect 清理函数' 
ORDER BY rank 
LIMIT 5;

相比直接把历史记录全部塞进 context window,这种分层设计节省了 80–90% 的 token 消耗。


2.2 Skills 闭环:从"执行"到"经验"到"技能"

这是 Hermes Agent 最具创新性的部分。完整流程如下:

任务执行
  ↓
工具调用轨迹记录(每完成 15 次工具调用或完成一个复杂任务)
  ↓
自动触发自评估(LLM 复盘执行过程)
  ↓
提取成功模式 → 生成 SKILL.md(Markdown 格式的可复用技能文件)
  ↓
写入 ~/.hermes/skills/ 目录
  ↓
下次遇到同类任务 → 自动检索并加载相关 Skill
  ↓
执行后继续评估 → 优化已有 Skill(合并、去重、更新)

Skill 文件示例

# Skill: Debug Node.js Memory Leak

## Trigger
User mentions: "memory leak", "out of memory", "heap growing", "RSS increasing"

## Steps
1. Run `node --inspect app.js` and open chrome://inspect
2. Take heap snapshot at startup (baseline)
3. Exercise the suspicious endpoint/function in a loop (100+ iterations)
4. Take second heap snapshot
4. Look for objects retaining size that shouldn't be there
5. Common culprits:
   - Event listeners not removed (use once() instead of on())
   - Closures capturing large objects
   - Global variable accumulation
   - setInterval not cleared

## Code
```javascript
// Force garbage collection (requires --expose-gc)
global.gc();
const usage = process.memoryUsage();
console.log(`Heap used: ${usage.heapUsed / 1024 / 1024} MB`);

Gotchas

  • V8's GC is lazy; memory may not be freed immediately
  • Use --max-old-space-size=4096 to raise the limit during debugging

#### 实际效果(来自社区测试数据)

> 连续运行 3 个月后,65% 的新任务可以直接调用已有 Skill,无需从零规划。

---

## 三、架构深探:一次请求的完整生命周期

### 3.1 Agent Loop 伪代码

```python
async def agent_loop(user_message: str, session_id: str):
    # 1. 加载记忆
    memory = load_memory_md()          # L1: MEMORY.md (~800 tokens)
    user_profile = load_user_md()      # L2: USER.md (~500 tokens)
    relevant_history = fts5_search(user_message)  # L3: SQLite FTS5
    
    # 2. 检索相关 Skills
    relevant_skills = skill_indexer.search(user_message)
    
    # 3. 组装系统提示词(动态组装,不是静态文件)
    system_prompt = build_system_prompt(
        memory, user_profile, relevant_history, relevant_skills
    )
    
    # 4. 进入 ReAct 循环
    messages = [{"role": "user", "content": user_message}]
    tool_call_count = 0
    
    while not done:
        response = llm_call(system_prompt, messages)
        
        if has_tool_calls(response):
            tool_results = execute_tools(response.tool_calls)
            messages.append(response)
            messages.append(tool_results)
            tool_call_count += len(response.tool_calls)
        else:
            final_answer = response.content
            done = True
        
        # 5. 触发自评估(每 15 次工具调用)
        if tool_call_count >= 15 and tool_call_count % 15 == 0:
            trigger_background_review(session_id)
    
    # 6. 任务完成后,触发 Skill 提炼
    schedule_skill_extraction(session_id)
    return final_answer

3.2 工具调用注册表模式

Hermes Agent 内置 40+ 种工具,采用注册表模式统一管理:

TOOL_REGISTRY = {
    "bash": execute_shell_command,
    "read_file": read_file_content,
    "write_file": write_file_content,
    "search_web": duckduckgo_search,
    "read_url": web_fetch,
    "list_files": glob_list,
    "edit_file": file_edit_tool,
    "run_python": execute_python_code,
    # ... 40+ tools
}

每个工具都有:

  • JSON Schema 定义的输入参数规范
  • 超时控制(默认 120s,可配置)
  • 沙箱隔离(可选 Docker/Daytona)
  • 结果截断(防止超大输出撑爆 context)

四、代码实战:从零部署到编写第一个自定义 Skill

4.1 一键安装

# Linux / macOS / WSL2
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# 安装完成后重新加载 shell
source ~/.bashrc  # 或 ~/.zshrc

安装脚本会自动:

  1. 检测操作系统和架构
  2. 安装 Python 3.10+(如需要)
  3. 创建 ~/.hermes/ 目录结构
  4. 安装 Hermes Agent 的 Python 依赖
  5. 配置 systemd / launchd 服务(可选)

4.2 配置大模型

# 交互式配置(推荐)
hermes configure

# 或手动设置环境变量
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export KIMI_API_KEY="..."

# 选择默认模型
hermes model set anthropic/claude-sonnet-4

高级:一个 API Key 接入 600+ 模型

Hermes Agent 支持通过 openrouter 作为 provider,一个 API Key 接入 OpenRouter 平台上的 600+ 模型:

hermes provider add openrouter --api-key "sk-or-v1-..."
hermes model set openrouter/anthropic/claude-sonnet-4
hermes model set openrouter/google/gemini-2.5-pro
# 可以随时切换,无需重新配置 Key

4.3 编写第一个自定义 Skill

~/.hermes/skills/ 下创建 my_skill.md

# Skill: Optimize Docker Image Size

## Trigger
User mentions: "docker image too large", "reduce image size", "docker slim", "multi-stage build"

## Steps
1. Check current image size: `docker images | grep <image_name>`
2. Use multi-stage build:
   - Stage 1 (build): full dependencies, build artifacts
   - Stage 2 (runtime): only production dependencies, copy artifacts from Stage 1
3. Use distroless or alpine as base image
4. Combine RUN commands to reduce layers: `RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/*`
5. Add `.dockerignore` to exclude node_modules, .git, etc.

## Code Example
```dockerfile
# Multi-stage build example
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
CMD ["node", "dist/index.js"]

Expected Result

  • Image size reduction: typically 60–80%
  • Security: fewer packages = smaller attack surface

Gotchas

  • Don't use COPY --from=builder /app/node_modules ./node_modules if you have native dependencies built for a different architecture
  • Alpine uses musl libc; some native modules may need rebuild

保存后,Hermes Agent 会自动索引这个 Skill。下次你说"我的 Docker 镜像太大了,帮我优化",它会自动加载这个 Skill 并照此执行。

---

## 五、多平台网关:一个 Agent 管所有

Hermes Agent 的 **Gateway 架构** 允许同一个 Agent 实例同时接入多个消息平台:

                ┌─────────────────────────────────┐
                │    Hermes Agent Gateway         │
                │    (ws://127.0.0.1:19000)     │
                └──────┬──────────────────────────┘
                       │
     ┌─────────────────┼─────────────────────────┐
     │                 │                         │
Telegram          Discord                   Slack
WhatsApp          Signal                    Email
WeChat            CLI (本地终端)            Web UI

配置示例(`~/.hermes/config.yaml`):

```yaml
gateway:
  host: 127.0.0.1
  port: 19000

platforms:
  telegram:
    enabled: true
    token: "123456:ABC-DEF..."
  discord:
    enabled: true
    token: "your-discord-bot-token"
  slack:
    enabled: false
  wechat:
    enabled: false  # 需要额外配置,见官方文档

关键优势:无论在哪个平台给 Agent 发消息,它都记得你——因为记忆是统一存储在本地 SQLite 里的,跟平台无关。


六、并行子智能体:Delegate Task 深度实战

Hermes Agent 支持通过 delegate_task 工具拉起子智能体处理专项任务:

# 主 Agent 收到任务:
# "分析我这个仓库的代码质量,检查安全漏洞,生成架构图"

# 主 Agent 规划后,并行拉起 3 个子 Agent:
subtasks = [
    {"task": "分析代码质量,输出报告", "model": "claude-sonnet-4"},
    {"task": "运行安全扫描(semgrep + npm audit),输出漏洞列表", "model": "gpt-4o"},
    {"task": "分析目录结构,生成 Mermaid 架构图", "model": "gemini-2.5-pro"}
]

# 并行执行(真正的并行,不是串行等待)
results = parallel_execute(subtasks)

# 主 Agent 汇总三个子任务的结果,输出最终报告

子智能体的隔离性

  • 每个子 Agent 有独立的会话 context
  • 可选的 Docker 沙箱隔离(防止恶意代码影响主系统)
  • 子 Agent 完成后自动销毁,不污染主 Agent 的记忆

七、与 OpenClaw 的对比:两匹马的赛跑

维度Hermes AgentOpenClaw
记忆系统三层(MEMORY.md + USER.md + SQLite/FTS5)主要依赖 MEMORY.md,跨会话记忆较弱
自进化自动生成和优化 Skills支持 Skills 但需要手动配置
部署门槛一行命令安装需要 Node.js 环境,配置稍复杂
消息平台12+ 平台(含微信)10+ 平台
沙箱后端7 种(含 Modal/Daytona Serverless)主要依赖本地/SSH
Token 消耗分层记忆节省 80–90%相对较多
社区增长6 周 4.7 万 Star2 天 10 万 Star(更快)
定位"越用越聪明的数字员工""私人 AI 助手,多渠道整合"

结论:两者定位略有不同。OpenClaw 更强在"多渠道整合 + 快速部署",Hermes Agent 更强在"记忆持久化 + 自进化学习"。


八、生产级部署:Docker + systemd + Nginx 完整方案

8.1 Docker 部署(推荐生产环境)

# Dockerfile
FROM python:3.12-slim

RUN apt-get update && apt-get install -y \
    git \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --no-cache-dir hermes-agent

WORKDIR /root/.hermes

# 挂载持久化目录
VOLUME ["/root/.hermes"]

CMD ["hermes", "gateway", "start"]
# 构建并运行
docker build -t hermes-agent:latest .
docker run -d \
  --name hermes-agent \
  -v ~/.hermes:/root/.hermes \
  -p 19000:19000 \
  -e ANTHROPIC_API_KEY \
  hermes-agent:latest

8.2 systemd 服务(服务器持久运行)

# /etc/systemd/system/hermes-agent.service
[Unit]
Description=Hermes Agent Gateway
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/.hermes
ExecStart=/usr/local/bin/hermes gateway start
Restart=always
RestartSec=10
Environment="ANTHROPIC_API_KEY=sk-ant-..."
Environment="LOG_LEVEL=info"

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable hermes-agent
sudo systemctl start hermes-agent
sudo systemctl status hermes-agent

8.3 Nginx 反向代理(暴露到公网)

# /etc/nginx/sites-available/hermes-agent
server {
    listen 443 ssl;
    server_name hermes-api.yourdomain.com;

    ssl_certificate /path/to/fullchain.pem;
    ssl_certificate_key /path/to/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:19000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

九、进阶:GEPA 进化引擎与 Skill 质量自我提升

Hermes Agent 内置了一个叫 GEPA(Guided Evolutionary Prompt Architecture) 的离线验证引擎,它的作用是:

  1. 收集历史任务执行数据
  2. 对每个 Skill 的效果进行量化评估(成功率、token 消耗、用户反馈)
  3. 自动生成优化版本的 Skill
  4. 通过 A/B 测试验证优化效果
  5. 用更优版本替换旧版 Skill
Skill v1.0 (人工编写)
  ↓
使用过程中收集执行数据
  ↓
GEPA 分析:哪些步骤经常失败?哪些可以简化?
  ↓
自动生成 Skill v1.1(优化版)
  ↓
A/B 测试:v1.0 vs v1.1
  ↓
v1.1 成功率更高 → 替换 v1.0
  ↓
循环继续...

这个机制使得 Hermes Agent 的 Skills 质量可以在无人干预的情况下持续提升


十、总结与展望

Hermes Agent 的出现,标志着 AI Agent 从"工具"向"伙伴"的范式转变。

核心收获

  1. 分层记忆架构是解决 Agent 持久化的正确方向——把热/温/冷记忆分开处理,在成本、效率、能力之间找到最佳平衡点。

  2. Skills 闭环让 Agent 具备了"程序性记忆"——不仅会记住事实(知道什么),还会记住怎么做(怎么做),并能把经验传递给未来的自己。

  3. GEPA 进化引擎打开了 Agent 自我改进的大门——未来可能出现完全由 AI 维护的 Skill 生态,人类只需要定义问题,不需要手写解决方案。

未来展望

  • Skill 市场:像 npm 但面向 AI Agent Skills 的生态系统
  • 多 Agent 协同:Hermes Agent 之间可以互相分享 Skills
  • 本地小模型 + 云端大模型混合架构:简单任务用本地 7B 模型(延迟低、零成本),复杂任务路由到 Claude/GPT(能力强)

参考资源


本文基于 Hermes Agent v0.13.0(2026 年 5 月)撰写,代码示例仅供参考,生产环境请参考官方文档。

推荐文章

Linux查看系统配置常用命令
2024-11-17 18:20:42 +0800 CST
如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
Vue3中如何处理路由和导航?
2024-11-18 16:56:14 +0800 CST
如何在Vue3中处理全局状态管理?
2024-11-18 19:25:59 +0800 CST
程序员茄子在线接单