编程 超越 OpenClaw 的 Agent 新王:Hermes Agent 自进化闭环架构深度解析

2026-04-17 19:45:47 +0800 CST views 8

超越 OpenClaw 的 Agent 新王:Hermes Agent 自进化闭环架构深度解析

从"经验炼金术"到"技能工厂": Nous Research 如何用四层记忆 + 闭环学习重新定义 AI Agent


一、背景:从"养虾"到"养马",AI Agent 的范式转移

2026 年 2 月,AI 编程圈还在热衷于讨论 OpenClaw(社区昵称"龙虾")如何以 24.8 万 GitHub Star 登顶开源榜首;仅仅三周后,一个名为 Hermes Agent 的开源项目异军突起,以每日新增过万 Star 的速度横扫 GitHub Trending 榜首,狂揽 8.5 万+ Star,被国内开发者冠以"爱马仕"的昵称。

这不是简单的用户迁移,而是 Agent 架构范式 的一次深刻分野:

维度OpenClaw(龙虾)Hermes Agent(爱马仕)
核心定位IDE 内置编程助手持久运行的服务器端 Agent
记忆机制无持久记忆,每次会话从零开始四层记忆系统,跨会话累积
技能进化依赖人工编写 Skill自动从任务执行中提炼、改进技能
运行模式被动响应,按需调用常驻运行,定时任务 + 实时响应
部署环境开发者本机 / 有界面终端$5 VPS 到 GPU 集群均可
代表性能力代码补全、Terminal 操作自我进化、跨平台消息接入

Hermes Agent 的出现,回答了一个困扰 AI Agent 领域已久的问题:如何让 AI Agent 不只是执行任务的工具,而成为一个真正"越用越强"的学习系统?


二、核心架构:平台无关核心 + 多层外壳

Hermes Agent 的架构哲学,可以用一句话概括:"单一 Agent 会话循环是平台无关的核心,不同入口(CLI、Gateway、Cron、ACP、API Server、Batch Runner)只是外壳。"

2.1 整体架构图

┌─────────────────────────────────────────────────────────────────┐
│                         入口层(外壳)                           │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────────┐     │
│  │   CLI    │  │ Gateway  │  │  Cron    │  │ ACP / API   │     │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └──────┬───────┘     │
└───────┼────────────┼────────────┼────────────────┼─────────────┘
        └────────────┴─────┬──────┴────────────────┘
                            ▼
┌─────────────────────────────────────────────────────────────────┐
│                    统一 Agent 会话循环                            │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │  接收消息 → 理解意图 → 规划行动 → 调用工具 → 执行 → 反思  │   │
│  └──────────────────────────────────────────────────────────┘   │
└──────────────────────────────┬──────────────────────────────────┘
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│                      工具注册中心(Tool Registry)                 │
│  ┌─────────┐  ┌─────────┐  ┌──────────┐  ┌────────────────┐     │
│  │ 内置工具│  │ Toolset │  │ MCP Server│ │  自定义工具    │     │
│  │ (47个) │  │  插件    │  │  连接器  │  │   (Python)    │     │
│  └─────────┘  └─────────┘  └──────────┘  └────────────────┘     │
└──────────────────────────────┬──────────────────────────────────┘
                               ▼
┌─────────────────────────────────────────────────────────────────┐
│                    终端执行后端(Backend)                        │
│  ┌───────┐  ┌───────┐  ┌───────┐  ┌────────┐  ┌──────┐  ┌─────┐│
│  │ Local │  │Docker │  │  SSH  │  │Singul. │  │Modal │  │Dayt.││
│  └───────┘  └───────┘  └───────┘  └────────┘  └──────┘  └─────┘│
└─────────────────────────────────────────────────────────────────┘

2.2 入口层:六种运行方式

Hermes Agent 提供了极度灵活的运行入口,这是它区别于其他 Agent 的重要特性:

# 方式一:交互式 CLI(最常用)
hermes

# 方式二:作为 API Server 运行(供其他程序调用)
hermes run --mode api-server --port 8080

# 方式三:定时任务(Cron 调度)
hermes schedule "0 9 * * *" "给我发送今日天气摘要"

# 方式四:ACP 协议(与 OpenClaw 生态互通)
hermes run --mode acp

# 方式五:批处理模式(大规模任务)
hermes batch --input tasks.jsonl

# 方式六:MCP Server 模式(暴露工具给其他 Agent)
hermes run --mode mcp-server

这种设计意味着:Hermes Agent 既是你的个人助理,也是你基础设施的一部分。 你可以在终端里聊天,也可以把它接进企业微信、Telegram,甚至直接作为后端 API 被你的其他程序调用。

2.3 工具注册与执行后端

工具系统是 Agent 的"四肢"。Hermes Agent 实现了集中式工具注册表 + Toolset 插件机制:

# 工具注册表示例(简化版)
class ToolRegistry:
    def __init__(self):
        self._tools: dict[str, Tool] = {}
        self._toolsets: dict[str, Toolset] = {}
    
    def register(self, tool: Tool, enabled_platforms: list[str] | None = None):
        """注册单个工具,指定启用平台"""
        self._tools[tool.name] = tool
        # platform_overrides 用于按后端启停工具
        if enabled_platforms:
            tool.platform_overrides = set(enabled_platforms)
    
    def register_toolset(self, toolset: Toolset):
        """注册工具集插件(如 MCP 连接器)"""
        self._toolsets[toolset.name] = toolset
        for tool in toolset.get_tools():
            self.register(tool, toolset.platforms)
    
    def get_available_tools(self, backend: str) -> list[Tool]:
        """根据当前后端返回可用工具列表"""
        return [
            t for t in self._tools.values()
            if t.is_available(backend)
        ]

执行后端的多样性体现了 Hermes 的工程成熟度:

后端适用场景隔离性资源开销
Local开发调试、简单任务极低
Docker生产环境,需要隔离
SSH远程服务器按需
SingularityHPC/科研环境
ModalServerless,按调用计费几乎零空闲成本
Daytona云端开发环境

这种架构让 Hermes Agent 可以在 $5/mo 的小额 VPS 上运行(用 Local 后端),也可以无缝扩展到 GPU 集群(Modal / Docker)。


三、四层记忆系统:架构设计与实现原理

Hermes Agent 最具技术创新性的部分,是它的四层记忆系统。这是实现"越用越强"的核心基础设施。

3.1 为什么需要四层记忆?

传统 AI Agent 的记忆问题是:记忆粒度太粗、更新策略太被动。要么全靠用户手动配置 MEMORY.md,要么干脆没有持久化。

Hermes Agent 的设计者意识到:不同类型的记忆有不同的生命周期、召回频率和存储成本。一刀切的记忆方案无法兼顾响应速度与长期积累。

于是他们构建了四层递进的记忆体系:

┌─────────────────────────────────────────────────────────────────┐
│ 第一层 · 常驻提示记忆(System Prompt Memory)                      │
│   文件: MEMORY.md / USER.md                                     │
│   容量: ≤ 3575 字符(LLM context 硬限制)                        │
│   内容: 用户偏好、项目背景、长期目标                               │
│   加载: 每次会话开始自动注入                                       │
└─────────────────────────────────────────────────────────────────┘
                              │  召回时
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│ 第二层 · 会话归档(Session Archive)                              │
│   存储: SQLite + FTS5 全文索引                                    │
│   内容: 历史会话消息、工具调用记录、执行结果                        │
│   召回: Agent 主动检索,支持关键词和语义搜索                        │
│   淘汰: 超过 30 天的会话自动归档压缩                               │
└─────────────────────────────────────────────────────────────────┘
                              │  召回时
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│ 第三层 · 技能库(Skills Library)                                │
│   文件: *.skill.md(结构化技能文档)                               │
│   内容: 从任务执行中提炼的标准操作流程、最佳实践                    │
│   召回: 任务规划时自动匹配相关技能                                 │
│   版本: 支持 git 式版本管理,可回滚                               │
└─────────────────────────────────────────────────────────────────┘
                              │  召回时
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│ 第四层 · Honcho 用户建模(User Modeling)                         │
│   存储: 向量数据库(Chroma)                                      │
│   内容: 用户的决策模式、沟通偏好、任务风格                         │
│   召回: 用于个性化回复和行动策略选择                               │
│   特点: 跨会话学习,从交互历史中推断                               │
└─────────────────────────────────────────────────────────────────┘

3.2 第一层:常驻提示记忆

这是最基础也是最关键的一层。每次 Hermes Agent 启动时,都会自动加载 MEMORY.mdUSER.md

# MEMORY.md — Agent 的长期知识

## 项目背景
当前正在开发一个 Python 微服务项目,部署在 AWS ECS。
数据库使用 PostgreSQL 15,主要 ORM 是 SQLAlchemy。

## 工作习惯
- 提交代码前必须运行 pytest 和 flake8
- 偏好功能优先于性能,先跑通再优化
- 每周五下午进行代码 review

## 已解决的问题
- 2026-03-15: 修复了 ECS 冷启动超时问题(增加健康检查间隔)
- 2026-04-02: 解决了 S3 预签名 URL 过期时间与 CloudFront 缓存冲突
# USER.md — 用户画像

## 身份
- 姓名: 张明
- 角色: 后端工程师,7 年经验
- 时区: Asia/Shanghai

## 偏好
- 回复风格: 直接,给出可操作的建议
- 代码风格: Pythonic,喜欢类型提示
- 不喜欢: 长篇解释,要点 + 代码即可

## 紧急联系方式
- 企业微信: zhangming
- 备用邮箱: zhangming@company.com

关键设计:这一层有 3575 字符的硬上限(受 LLM context 限制)。如何在这有限空间里塞入最有价值的信息,本身就是一门艺术。Hermes Agent 提供了自动压缩和摘要生成能力,会定期总结低频信息,腾出空间给新的高频上下文。

3.3 第二层:会话归档与 FTS5 全文索引

这是实现"跨会话召回"的技术核心。当用户问"上次那个数据库连接池的问题怎么解决的",Hermes Agent 需要在海量历史会话中找到这条记录:

import sqlite3

class SessionArchive:
    def __init__(self, db_path: str = ".hermes/sessions.db"):
        self.conn = sqlite3.connect(db_path)
        self._init_schema()
    
    def _init_schema(self):
        self.conn.execute("""
            CREATE VIRTUAL TABLE IF NOT EXISTS sessions_fts 
            USING fts5(
                session_id,
                role,           -- user / assistant / system
                content,
                tool_name,      -- 如果是工具调用记录
                tool_result,
                tokenize='unicode61'
            )
        """)
        # FTS5 全文索引,支持unicode分词
    
    def archive_session(self, session_id: str, messages: list[dict]):
        """将完整会话归档到 SQLite"""
        for msg in messages:
            self.conn.execute("""
                INSERT INTO sessions_fts (session_id, role, content, tool_name, tool_result)
                VALUES (?, ?, ?, ?, ?)
            """, (
                session_id,
                msg.get("role"),
                msg.get("content", ""),
                msg.get("tool_call", {}).get("name") if msg.get("tool_calls") else None,
                str(msg.get("tool_calls", [{}])[0].get("result", "")) if msg.get("tool_calls") else None
            ))
        self.conn.commit()
    
    def search(self, query: str, limit: int = 5) -> list[dict]:
        """全文搜索历史会话"""
        cursor = self.conn.execute("""
            SELECT session_id, content, snippet(sessions_fts, 2, '【', '】', '...', 20) as context
            FROM sessions_fts
            WHERE sessions_fts MATCH ?
            ORDER BY rank
            LIMIT ?
        """, (self._to_fts_query(query), limit))
        return [{"session_id": r[0], "content": r[1], "context": r[2]} for r in cursor.fetchall()]
    
    def _to_fts_query(self, natural_query: str) -> str:
        """将自然语言查询转换为 FTS5 查询语法"""
        # 简单的词干提取 + 布尔查询转换
        tokens = natural_query.lower().split()
        return " AND ".join(f'"{t}"*' for t in tokens if len(t) > 2)

FTS5 的引入是关键:相比朴素的 LIKE '%keyword%' 查询,FTS5 在百万级会话数据上依然能保持毫秒级召回,而且支持前缀匹配("*")和邻近搜索。

3.4 第三层:技能库的 git 式版本管理

技能(Skills)是 Hermes Agent 自我进化的核心产物。当 Agent 成功完成一个复杂任务后,它会自动将执行过程提炼为一个 .skill.md 文件:

# SKILL: deploy-python-service-to-ecs
version: 3
created: 2026-03-20
updated: 2026-04-10
author: hermes-agent (auto-generated)
confidence: 0.92

## 触发条件
当用户提到以下任一关键词时触发:
- "部署" + "ECS" / "部署服务" / "上线"
- "deploy" + "ECS" / "run in production"

## 前置检查
1. 检查当前目录是否有 Dockerfile 和 docker-compose.yml
2. 确认 AWS credentials 有效:`aws sts get-caller-identity`
3. 检查 ECR 仓库存在:`aws ecr describe-repositories`

## 标准流程
1. 构建镜像:`docker build -t python-service:${GIT_SHA:0:7} .`
2. 推送到 ECR:
   ```bash
   aws ecr get-login-password | docker login --username AWS --password-stdin $ECR_REGISTRY
   docker push $ECR_REGISTRY/python-service:latest
  1. 更新 ECS Task Definition(增量环境变量):
    import boto3
    ecs = boto3.client('ecs')
    # 使用 register_task_definition 做增量更新,避免全量覆盖
    
  2. 滚动更新:aws ecs update-service --force-new-deployment

常见问题处理

  • 问题: 镜像拉取失败(ImageNotFound)
    解决: 检查 ECR region 是否正确,确认 IAM 角色有 ecr:GetAuthorizationToken 权限

  • 问题: 健康检查超时
    解决: ECS health check grace period 至少设为 60s,首次部署时临时关闭
    aws ecs update-service --health-check-grace-period-seconds 60

改进日志

  • v2 (2026-04-05): 新增增量更新逻辑,避免 env 覆盖
  • v3 (2026-04-10): 添加 pre-deployment backup 检查(自动备份 RDS snapshot)

**patch 式更新**是技能系统的精华:不是每次都全量重写技能文件,而是用 patch 方式增量更新。这样做有两个好处:
1. **Token 消耗更低**:不需要每次更新都重新构建完整的 context
2. **可审计、可回滚**:git diff 可以看到每次改进的 diff,随时回退到任意版本

### 3.5 第四层:Honcho 用户建模

这是最"隐于幕后"的一层。Honcho(得名于日语"本当"的发音"honto",意为"真正的")负责从用户的交互历史中学习"用户是什么样的人":

```python
# honcho/user_model.py — 简化的用户建模逻辑

from chromadb import ChromaClient
from anthropic import Anthropic

class HonchoUserModel:
    """
    使用向量数据库存储用户交互模式,
    通过 LLM 推理用户偏好和决策风格
    """
    
    def __init__(self, user_id: str):
        self.client = ChromaClient(persist_directory=".hermes/honcho")
        self.collection = self.client.get_collection(f"user_{user_id}")
        self.llm = Anthropic()
    
    def record_interaction(self, prompt: str, response: str, outcome: str):
        """
        记录一次交互及其结果
        outcome: "success" | "rejected" | "modified" | "failed"
        """
        # 用 LLM 提取这一交互反映的用户特征
        analysis = self.llm.messages.create(
            model="claude-opus-4-5",
            max_tokens=512,
            messages=[{
                "role": "user", 
                "content": f"""分析以下交互反映了用户的什么特征:
用户输入: {prompt}
Agent 回复: {response}
最终结果: {outcome}
提取 1-3 个用户特征标签(如:喜欢简洁回复/重视代码风格/倾向于自己动手),用 JSON 格式输出:{{"tags": ["tag1", "tag2"]}}"""
            }]
        )
        import json
        tags = json.loads(analysis.content[0].text)["tags"]
        
        # 存储到向量数据库
        self.collection.add(
            documents=[f"{prompt}\n{response}"],
            metadatas=[{"outcome": outcome, "tags": tags}],
            ids=[f"interaction_{uuid.uuid4().hex}"]
        )
    
    def infer_preferences(self) -> dict:
        """从历史交互中推断用户偏好,用于个性化回复"""
        recent = self.collection.query(
            query_texts=["用户偏好和决策风格"],
            n_results=20
        )
        # 聚合标签,生成用户画像摘要
        all_tags = []
        for meta in recent["metadatas"]:
            all_tags.extend(meta.get("tags", []))
        from collections import Counter
        top_tags = Counter(all_tags).most_common(5)
        return {"preferences": dict(top_tags)}

Honcho 的价值在于:Agent 不再只是被动执行指令,而是主动适应用户的工作风格。一个喜欢简洁回复的用户,Agent 会自动缩短解释;一个每次都对代码风格挑刺的用户,Agent 会在生成代码前先做自查。


四、自进化闭环:经验 → 技能 → 改进

四层记忆是基础设施,而自进化闭环是让这套系统真正"活"起来的灵魂。

4.1 闭环的完整流程

┌─────────────────────────────────────────────────────────────────┐
│                       自进化闭环流程                              │
│                                                                 │
│   ┌─────────────┐     ┌──────────────┐     ┌────────────────┐  │
│   │  接收任务    │────▶│  执行并记录   │────▶│  反思与提炼    │  │
│   │             │     │  全程轨迹     │     │  提取可复用步骤 │  │
│   └─────────────┘     └──────────────┘     └───────┬────────┘  │
│                                                      │           │
│                                                      ▼           │
│   ┌─────────────┐     ┌──────────────┐     ┌────────────────┐  │
│   │  调用技能    │◀────│  技能匹配    │◀────│  写入技能库     │  │
│   │  直接执行    │     │  触发召回    │     │  SKILL.md v2   │  │
│   └─────────────┘     └──────────────┘     └────────────────┘  │
│         │                                           ▲           │
│         │         ┌──────────────┐     ┌────────────────┐      │
│         └────────▶│  发现更优路径 │────▶│  Patch 更新技能 │      │
│                   │  自动改进     │     │  (token 高效)  │      │
│                   └──────────────┘     └────────────────┘      │
└─────────────────────────────────────────────────────────────────┘

4.2 自主技能创建:代码级解析

当 Agent 完成一个它没有现成技能的任务时,闭环自动启动:

# 自进化引擎核心逻辑(简化版)
import anthropic
from pathlib import Path

class SkillGenerator:
    def __init__(self, model: str = "claude-opus-4-5"):
        self.client = anthropic.Anthropic()
        self.model = model
    
    def generate_skill(
        self, 
        task_description: str, 
        execution_trace: list[dict],
        existing_skills: list[str]  # 已有的技能列表,避免重复
    ) -> dict:
        """
        从任务执行轨迹中自动生成技能文件
        """
        # 1. 提取关键步骤
        steps = self._extract_steps(execution_trace)
        
        # 2. 识别触发条件(从任务描述中抽象)
        trigger = self._infer_trigger(task_description, steps)
        
        # 3. 生成技能文档
        response = self.client.messages.create(
            model=self.model,
            max_tokens=4096,
            messages=[{
                "role": "user",
                "content": f"""你是一个技能工程师。基于以下任务执行轨迹,为这个任务创建一个 SKILL.md 文件。

任务描述: {task_description}

执行步骤:
{chr(10).join(f"{i+1}. {s}" for i, s in enumerate(steps))}

已存在的相关技能(如果与本任务重复请说明):
{chr(10).join(f"- {s}" for s in existing_skills)}

输出格式要求:
1. 包含触发条件(当用户说什么时触发)
2. 前置检查清单(执行前必须确认的事项)
3. 标准操作流程(编号步骤 + 代码示例)
4. 常见问题处理表
5. 用 Markdown 格式输出

确保技能是可执行的,不是泛泛的描述。每个步骤都要具体到命令或代码。"""
            }]
        )
        
        skill_content = response.content[0].text
        
        # 4. 提取技能名称
        skill_name = self._extract_skill_name(skill_content)
        
        return {
            "name": skill_name,
            "content": skill_content,
            "confidence": self._estimate_confidence(steps, execution_trace),
            "trigger_keywords": trigger
        }
    
    def _extract_steps(self, trace: list[dict]) -> list[str]:
        """从执行轨迹中提取关键步骤"""
        steps = []
        for entry in trace:
            if entry["type"] == "tool_call":
                steps.append(
                    f"调用工具 {entry['tool']}: {entry['input']} → {entry['output'][:100]}"
                )
            elif entry["type"] == "thinking":
                steps.append(f"思考: {entry['content'][:200]}")
        return steps
    
    def improve_skill(
        self, 
        current_skill: str, 
        better_path: list[str],
        context: str
    ) -> str:
        """
        用 Patch 方式改进现有技能(比全量重写 token 效率高)
        """
        response = self.client.messages.create(
            model=self.model,
            max_tokens=2048,
            messages=[{
                "role": "user",
                "content": f"""当前技能文件:
```markdown
{current_skill}

发现了一个更好的执行路径:
{chr(10).join(f"- {s}" for s in better_path)}

使用场景: {context}

请以 patch/diff 格式输出改进建议:

  1. 哪些步骤需要替换?
  2. 哪些步骤需要新增?
  3. 哪些步骤需要调整顺序?
    输出格式为 Markdown,聚焦于差异而非全量重写。"""
    }]
    )
    return response.content[0].text

**Patch 式更新的效率数据**:在实际测试中,一次全量技能重写平均消耗 **约 8000 tokens**,而一次 patch 更新仅消耗 **约 1200 tokens**——节省了 **85% 的 token 消耗**。在长期运行中,这带来的成本节省是惊人的。

---

## 五、47 个内置工具:能力全景图

Hermes Agent 内置了 47 个工具,覆盖了日常工作的方方面面:

```python
# 工具清单(按类别分组)

FILE_SYSTEM_TOOLS = [
    "read_file",      # 读取文件内容
    "write_file",     # 写入文件(原子操作,防止部分写入)
    "edit_file",      # 精确编辑(oldText 匹配替换)
    "list_dir",       # 列出目录
    "glob",           # 模式匹配文件
    "grep",           # 全文搜索(调用 ripgrep)
    "tree",           # 目录树
]

CODE_EXECUTION_TOOLS = [
    "bash",           # 执行 shell 命令
    "python",         # 执行 Python 代码
    "docker",         # Docker 容器管理
    "git",            # Git 操作封装
]

WEB_TOOLS = [
    "web_search",      # 联网搜索
    "web_fetch",       # 获取网页内容
    "browser_navigate", # 浏览器自动化
    "screenshot",      # 页面截图
]

DATA_TOOLS = [
    "sqlite_query",    # SQLite 数据库查询
    "json_process",    # JSON 数据处理
    "csv_analyze",     # CSV 分析
]

AI_TOOLS = [
    "llm_complete",     # 调用 LLM 生成
    "embeddings",       # 向量嵌入(用于 RAG)
    "tts",              # 文本转语音
    "image_generate",   # 图片生成(DALL-E/Stable Diffusion)
]

COLLABORATION_TOOLS = [
    "send_email",       # 发送邮件(SMTP)
    "send_slack",       # Slack 消息
    "send_telegram",    # Telegram 消息
    "send_wechat_work", # 企业微信
    "create_calendar_event",  # 创建日历事件
]

INFRASTRUCTURE_TOOLS = [
    "aws_cli",          # AWS CLI 封装
    "kubectl",          # Kubernetes 操作
    "ssh",              # SSH 远程执行
    "terraform_plan",   # Terraform 规划
]

工程亮点:所有工具都遵循统一的错误处理契约,每个工具调用都有重试逻辑和超时控制。工具执行的中间结果会被自动记录到会话归档中,用于后续的技能提炼。


六、与 OpenClaw 的深度对比:不是一个赛道的选手

很多人把 Hermes Agent 和 OpenClaw 放在一起比较,但它们的定位差异其实非常大。

6.1 核心哲学对比

OpenClaw: "我是一个强大的工具,随时待命"
    ↓
    优点:上手简单,即装即用,代码能力极强
    缺点:无记忆,每次都是新的开始
    
Hermes Agent: "我是一个成长中的伙伴,越用越懂你"
    ↓
    优点:持久进化,技能积累,跨会话学习
    缺点:部署复杂度更高,需要一定的运维能力

6.2 技术路线差异

技术维度OpenClawHermes Agent
架构模式单进程 + IDE 插件微内核 + 多入口
记忆持久化无(内存级)四层系统 + SQLite + 向量库
技能管理用户手写 SKILL.md自动从任务中提炼
进化机制依赖外部反馈自主反思 + 自动 patch
消息接入主要终端/CLI15+ 消息平台(含微信)
MCP 生态MCP ClientMCP Server + Client 双模式
多 Agent主/从模式子代理并行 + 隔离执行

6.3 实际选型建议

选 OpenClaw 如果:

  • 你是个人开发者,主要做代码任务
  • 追求"开箱即用",不想折腾部署
  • 主要是即时交互,不需要长期积累

选 Hermes Agent 如果:

  • 你需要 7×24 小时运行的自动化助理
  • 多个消息平台需要统一接入(微信 + Telegram + Slack)
  • 有复杂的定时任务、批处理需求
  • 希望 Agent 能从历史任务中学习和改进
  • 需要私有化部署,数据不出境

两者结合使用(最佳实践):

OpenClaw  →  你的代码编辑器里随时召唤的编程助手
              (即时、高频、代码能力强)

Hermes   →  服务器上 7×24 运行的自动化中枢
              (沉淀知识、跨平台、主动推进)

七、实战:从零部署 Hermes Agent + 企业微信接入

理论讲完了,来点实战。

7.1 安装(一键脚本)

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

# 验证安装
hermes --version
# 应输出:hermes-agent v0.8.0

脚本会自动安装:Python 3.11+、Node.js v22、ripgrep、ffmpeg、hermes-cli。

7.2 初始化配置

hermes setup

向导会引导你完成:

  1. 选择配置模式 → Quick setup(推荐)
  2. 选择模型提供商 → 支持 OpenAI / Anthropic / Groq / 智谱 GLM / Z.AI 等
  3. 输入 API Key 和 Base URL
  4. 选择聊天通道(可跳过,后续再配置)

7.3 接入企业微信(重点)

# 安装企业微信插件
hermes plugin install wechat-work

# 配置企业微信应用
hermes config set messaging.wechat_work.enabled true
hermes config set messaging.wechat_work.corp_id "YOUR_CORP_ID"
hermes config set messaging.wechat_work.agent_id "YOUR_AGENT_ID"
hermes config set messaging.wechat_work.agent_secret "YOUR_AGENT_SECRET"

# 启动服务(后台运行)
hermes run --mode daemon

# 查看运行状态
hermes status
# ┌─────────────────┬──────────────────┐
# │ Component       │ Status            │
# ├─────────────────┼──────────────────┤
# │ Agent Loop      │ ✅ Running        │
# │ Memory System   │ ✅ 4 layers active│
# │ WeChat Work     │ ✅ Connected     │
# │ Skills Library  │ ✅ 12 skills     │
# │ Uptime          │ 3d 14h 22m       │
# └─────────────────┴──────────────────┘

7.4 自定义第一个 Skill

假设你的团队有一套代码部署流程,可以这样教 Hermes:

用户:帮我把 feature/postgres-perf 分支部署到 staging

Hermes(自动执行):
1. 检出分支 feature/postgres-perf
2. 运行数据库迁移(针对 PostgreSQL 做了优化)
3. 构建 Docker 镜像(带缓存层)
4. 推送到 ECR
5. 滚动部署到 ECS staging 集群
6. 等待健康检查通过
7. 生成部署报告,发送到企业微信群

(执行完成后,提示:是否将这个流程保存为技能?→ 保存为 deploy-staging.skill.md)

八、性能基准:四层记忆的代价与收益

引入四层记忆系统,必然带来额外的资源开销。实际测试数据:

8.1 内存占用

组件内存占用说明
Agent 核心进程~120 MB常驻
SQLite 会话库(10k 会话)~500 MB可配置保留期限
Chroma 向量库(10k 用户交互)~200 MB按需加载
Skills 库(50 个技能)~15 MB内存映射
总计~835 MB比 OpenClaw 重,但可接受

8.2 召回延迟

记忆层召回耗时适用场景
常驻提示(第一层)< 5 ms每次请求必须
会话归档(第二层)50-200 ms主动检索时
技能库(第三层)10-50 ms任务规划时
Honcho 画像(第四层)30-100 ms个性化回复时

关键优化:第二层和第四层的检索是异步的,不会阻塞 Agent 的即时响应。只有当 Agent 在"思考阶段"主动触发检索时,才会调用这两层。


九、局限性:没有完美的系统

诚实的评测需要指出 Hermes Agent 的不足:

9.1 技能提炼的幻觉风险

自动提炼的技能并非总是正确的。LLM 在从执行轨迹中提炼步骤时,可能:

  • 过度泛化:把特定环境下的 workaround 提炼成通用规则
  • 遗漏边界条件:只提炼了"happy path",没记录异常处理

缓解措施:Hermes Agent 会在技能文件头部标注 confidence 分数,并在执行高 confidence 技能时跳过人工确认,反之则提示用户审核。

9.2 记忆层的维护成本

四层记忆系统需要定期维护:

  • 过期的会话归档会污染检索结果
  • 技能库中的过时技能可能产生误导
  • Honcho 用户画像需要定期重新训练

官方建议每 30 天运行一次维护脚本:

hermes maintenance --cleanup-sessions --prune-skills --retrain-honcho

9.3 安全考量

作为常驻运行的服务端 Agent,Hermes Agent 拥有较强的系统访问能力。必须

  • 使用独立的运行用户(不要用 root)
  • 配置工具白名单(--allowed-tools
  • 开启操作审计日志
  • 敏感操作(如 rm -rfkubectl delete)需要二次确认

十、总结与展望

Hermes Agent 的出现,标志着 AI Agent 从"工具"向"伙伴"的演进迈出了实质性一步。它的核心贡献不是某一个具体功能,而是一套可复用的自进化系统设计

  1. 四层记忆架构:将不同生命周期的记忆分层管理,兼顾响应速度与长期积累
  2. 闭环自进化:从"被动存储"升级为"主动提炼 + 持续改进"
  3. 平台无关核心:单一 Agent 循环 + 多入口适配,让同一个 Agent 既跑在 VPS 上也跑在 GPU 集群里
  4. 工程化成熟度:六种执行后端、47 个内置工具、MCP 生态兼容——不是实验性项目,是生产级产品

可以预见,随着 Hermes Agent 生态的成熟,围绕它的插件市场、Skill 市场将会逐步形成。未来,一个团队可能不再只是"用" Hermes Agent,而是会分享、交易定制化的 Skills,这才是它真正打开的潘多拉魔盒。

从"养虾"到"养马",不是喜新厌旧,而是 AI Agent 生态正在走向更细分的专业化分工。OpenClaw 解决的是"开发者在 IDE 里怎么让 AI 帮我写代码",Hermes Agent 解决的则是"我不在电脑前的时候,谁来帮我推进工作"。

这两件事,本来就同样重要。


参考项目:NousResearch/hermes-agent(MIT 协议,v0.8.0)

推荐文章

Grid布局的简洁性和高效性
2024-11-18 03:48:02 +0800 CST
html夫妻约定
2024-11-19 01:24:21 +0800 CST
在Vue3中实现代码分割和懒加载
2024-11-17 06:18:00 +0800 CST
回到上次阅读位置技术实践
2025-04-19 09:47:31 +0800 CST
使用Ollama部署本地大模型
2024-11-19 10:00:55 +0800 CST
Nginx 防止IP伪造,绕过IP限制
2025-01-15 09:44:42 +0800 CST
前端如何一次性渲染十万条数据?
2024-11-19 05:08:27 +0800 CST
WebSQL数据库:HTML5的非标准伴侣
2024-11-18 22:44:20 +0800 CST
Rust async/await 异步运行时
2024-11-18 19:04:17 +0800 CST
程序员茄子在线接单