1. 项目概述

Hermes Agent 是 Nous Research 开源的一款自进化 AI 智能体框架。

  • 仓库:https://github.com/NousResearch/hermes-agent

  • 语言:Python ≥ 3.11(93.1%),少量 TypeScript

  • 许可证:MIT

  • 最新版:v0.9.0(2026-04-13)

  • 前身:OpenClaw(安装向导自动检测并迁移旧配置)

Hermes Agent 的核心理念只有一句话:AI 智能体应该像人类一样,从每次经历中学习并积累技能,而不是每次对话都从零开始。


2. 解决什么问题

2.1 传统 AI 助手的三大痛点

痛点

具体表现

无记忆

每次新对话重新开始,上次解决过的问题下次还要重解

无成长

使用一年和使用一天没有区别,没有技能积累

强绑定

绑定特定模型/平台,迁移成本极高

2.2 Hermes Agent 的解决思路

ounter(lineounter(lineounter(line传统 Agent:任务 → 执行 → 结束(遗忘)                              ↓Hermes Agent:任务 → 执行 → 自动创建 Skill → 下次复用 → 定期优化 → 越来越强

Hermes 通过三个机制解决上述问题:

  1. 程序性记忆(Skill):将解决问题的过程固化为可复用的 SKILL.md 文档

  2. 情节性记忆(SQLite):用带 FTS5 全文检索的 SQLite 记录所有历史对话

  3. 定时自我优化(Cron):内置调度器定期"唤醒"agent 复习和改进既有技能

2.3 其他设计目标

  • 零锁定:支持 20+ 模型提供商,hermes model 一键切换,无需改代码

  • 多端统一:一个后端进程同时服务 CLI、Telegram、Discord、Slack、WhatsApp 等 16+ 平台

  • 廉价部署:支持 $5 VPS、本地机器、GPU 集群,idle 时近乎零成本


3. 整体架构设计

3.1 分层架构

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line┌─────────────────────────────────────────────────────┐│                    入口层 Entry Points                ││         CLI        │    Gateway    │   ACP Adapter   ││      (cli.py)      │  (18 平台适配) │  (IDE 集成)    │└───────────────────────────┬─────────────────────────┘                             ↓┌─────────────────────────────────────────────────────┐│              核心引擎 AIAgent (run_agent.py)          ││   对话循环  │  Provider 路由  │  上下文压缩           ││   Session 持久化  │  Prompt 缓存  │  Iteration 管理   │└──────────┬────────────────────────┬─────────────────┘           ↓                        ↓┌──────────────────┐    ┌───────────────────────────┐│  Tool Registry   │    │      Skills System        ││  47 个内置工具   │    │   ~/.hermes/skills/       ││  19 个工具集     │    │   渐进式加载 (3 级)        │└──────────┬───────┘    └───────────────────────────┘           ↓┌─────────────────────────────────────────────────────┐│              Provider 层(20+ 模型提供商)             ││   Anthropic │ OpenAI │ OpenRouter │ Ollama │ GLM    ││   HuggingFace │ Kimi │ MiniMax │ Google AI │ ...    │└──────────────────────────┬──────────────────────────┘                            ↓┌─────────────────────────────────────────────────────┐│              执行环境层(6 种后端)                    ││   Local │ Docker │ SSH │ Daytona │ Singularity │ Modal│└─────────────────────────────────────────────────────┘

3.2 数据流向

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line用户输入   │   ▼[入口适配器] ──→ 统一 Message 格式 ──→ [AIAgent 核心]                                              │                    ┌─────────────────────────┤                    ▼                         ▼             [构建 Prompt]              [查询 Skills]             系统提示 +                 FTS5 全文搜索             历史对话 +                 渐进式加载             可用工具列表                    │                    ▼             [调用 LLM API](流式输出)                    │             ┌──────┴──────┐             ▼             ▼       [有工具调用]    [直接响应]             │             │             ▼             ▼       [工具执行]      返回给用户       并发/串行             │             ▼       [结果追加历史]             │             ▼       [检查 token 阈值]       超限 → 上下文压缩             │             ▼       [循环直到无工具调用]             │             ▼       [自动创建/更新 Skill]

4. 核心模块详解

4.1 文件结构

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linehermes-agent/├── run_agent.py          # 核心引擎,AIAgent 类(约 11,000 行)├── cli.py                # 交互式 CLI(Rich + prompt_toolkit)├── model_tools.py        # 工具编排与自动发现├── hermes_state.py       # SQLite + FTS5 历史存储├── toolsets.py           # 19 个工具集定义├── tools/│   └── registry.py       # 工具注册中心├── gateway/              # 18 个平台适配器├── skills/               # 内置技能包├── cron/                 # 定时任务调度器├── batch_runner.py       # RL 训练轨迹生成└── hermes_cli/    ├── commands.py       # 统一命令注册表    └── config.py         # 配置管理

4.2 核心引擎:run_agent.py

AIAgent 是整个框架的心脏,负责管理完整的 Agent 对话循环:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineclass AIAgent:    async def run(self, user_message: str):        while api_call_count < max_iterations:            # 1. 构建 prompt(系统提示 + 历史 + skills + memory)            messages = self._build_messages()
            # 2. 调用 LLM(流式)            response = await self.provider.complete(messages, tools=self.tools)
            # 3. 有工具调用则分发执行            if response.tool_calls:                results = await self._dispatch_tools(response.tool_calls)                # 检测是否可并行执行(_PARALLEL_SAFE_TOOLS)                # 文件操作路径重叠 → 自动串行回退
            # 4. 工具结果追加历史            self.history.append(results)
            # 5. Token 超阈值 → 触发上下文压缩            if self._token_usage > self.compression_threshold:                await self._compress_context()
            # 6. 无工具调用 → 终结响应            else:                return response.content
        # 7. 任务完成 → 自动创建 Skill        await self._maybe_create_skill()

关键设计细节:

  • Prompt 缓存:利用 Anthropic prefix caching,节省最高 75% 输入 token 费用。一旦建立缓存,对话中途禁止修改系统提示或工具集(会破坏缓存命中)

  • Iteration Budget:默认每个 session 90 轮 LLM 调用,非计费操作(如读本地文件)可"退款"到预算池

  • 子 Agent:可 spawn 隔离子 agent 处理并行工作流,父子各有独立的 iteration budget

4.3 工具注册中心:tools/registry.py

采用装饰器 + 自动发现模式:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linefrom tools.registry import registry
@registry.register(    name="web_search",    description="Search the web for information",    schema={        "type": "object",        "properties": {            "query": {"type": "string", "description": "Search query"}        },        "required": ["query"]    })async def handle_web_search(query: str) -> str:    result = await exa_client.search(query)    return json.dumps(result)

注册中心在启动时自动扫描 tools/ 目录,收集所有 schema,并按工具集分组提供给 LLM。

4.4 历史存储:hermes_state.py

使用 SQLite + FTS5 全文检索,无需向量数据库:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line-- 主表CREATE TABLE sessions (    id TEXT PRIMARY KEY,    created_at TIMESTAMP,    summary TEXT);
CREATE TABLE messages (    id TEXT PRIMARY KEY,    session_id TEXT,    role TEXT,    content TEXT,    created_at TIMESTAMP,    FOREIGN KEY (session_id) REFERENCES sessions(id));
-- FTS5 全文索引(轻量替代向量检索)CREATE VIRTUAL TABLE messages_fts USING fts5(    content,    content=messages,    content_rowid=rowid);

检索时先用 FTS5 找相关段落,再用 LLM 总结压缩,最终注入当前 prompt。


5. Skills 自进化系统

这是 Hermes Agent 最核心的差异化特性

5.1 Skill 是什么

Skill 是一种结构化知识文档,格式为 SKILL.md(YAML frontmatter + Markdown 正文),保存在 ~/.hermes/skills/ 目录下。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line---name: review-mrversion: 1.2.0description: Review a GitLab MR before deploymentplatforms: [linux, macos]requires_tools: [execute_code, web_search]metadata:  hermes:    tags: [devops, gitlab, review]---
# Deploy Review MR
## 使用场景当需要审查 GitLab MR 时,尤其是涉及数据库变更或 Apollo 配置修改。
## 前置条件- 已配置 GITLAB_TOKEN 环境变量- 已安装 jq
## 执行步骤
### 1. 获取 MR Diff```bashcurl -s "https://gitlab.com/api/v4/projects/{PROJECT_ID}/merge_requests/{MR_ID}/diffs" \  -H "PRIVATE-TOKEN: $GITLAB_TOKEN"```
### 2. 检查高危变更重点检查:- `db/migrate/` 目录下的迁移文件- `config/apollo/` 下的配置变更- `Gemfile.lock` 依赖变化
### 3. 生成审查报告...
## 已知陷阱(从失败中学到的)- Apollo 配置变更必须与后端代码同步部署,顺序错误会导致服务中断- 大表 migration 在高峰期不要执行

5.2 Skill 完整 Schema

SKILL.md 的 frontmatter 支持以下所有字段:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line---name: skill-name                     # 必填,最长 64 字符,全局唯一description: 描述                    # 必填,最长 1024 字符version: 1.0.0                       # 可选license: MIT                         # 可选(agentskills.io 兼容)platforms: [macos, linux]            # 可选,省略则全平台
# 环境变量声明(新版)required_environment_variables:  - name: API_KEY    prompt: "Enter your API key"    help: "https://example.com/keys"    optional: false
# 安装配置setup:  help: "https://example.com/setup"  collect_secrets:    - env_var: API_KEY      prompt: "Enter API key"      secret: true
# 元数据(工具集依赖、关联技能等)metadata:  hermes:    tags: [fine-tuning, llm]    related_skills: [peft, lora]    requires_toolsets: [browser]         # 需要特定工具集才显示    fallback_for_toolsets: [browser]     # 工具集不可用时自动激活    requires_tools: [browser_navigate]    fallback_for_tools: [browser_navigate]    config:      - key: wiki.path        description: "Path to wiki"        default: "~/wiki"        prompt: "Wiki directory"---

5.3 渐进式加载(节省 Token)

Skills 采用三级渐进式加载,避免一次性注入所有知识造成 token 浪费:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineLevel 0(总是加载):技能名称 + 描述列表                    约 3,000 tokens,帮助 LLM 知道"有哪些技能"
Level 1(按需加载):完整技能内容                    当 LLM 判断当前任务需要某个 Skill 时才加载
Level 2(按需加载):技能引用的外部文档                    当 Skill 内容引用了额外资料时才加载

5.4 自动创建 Skill 的完整机制(源码级解析)

这是整个自进化系统最核心的部分,下面从源码视角完整还原实现。

5.4.1 触发时机:不是任务完成,而是计数器驱动

很多人以为 Skill 是在"任务完成后"自动创建的,实际上触发机制更为精细——是基于工具调用迭代次数计数器_iters_since_skill)。

ounter(lineounter(lineounter(lineounter(lineounter(line# run_agent.py 第 8189-8193 行# 每次 LLM 发起一次 API 调用,计数器 +1if (self._skill_nudge_interval > 0        and "skill_manage" in self.valid_tool_names):    self._iters_since_skill += 1
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# run_agent.py 第 10741-10745 行# 达到阈值时,设置 review 标志,并重置计数器_should_review_skills = Falseif (self._skill_nudge_interval > 0        and self._iters_since_skill >= self._skill_nudge_interval        and "skill_manage" in self.valid_tool_names):    _should_review_skills = True    self._iters_since_skill = 0

默认阈值是 10 次工具调用迭代,可通过配置文件调整:

ounter(lineounter(lineounter(line# config.yamlskills:  creation_nudge_interval: 10   # 每 10 次迭代触发一次 Skill 审查

计数器重置时机:当 LLM 在对话中主动调用了 skill_manage 工具(说明它已经在处理 Skill),计数器归零,避免重复触发:

ounter(lineounter(lineif function_name == "skill_manage":    self._iters_since_skill = 0

为什么是计数器而不是任务完成事件? 因为"任务完成"在 Agent 架构中难以精确定义,而工具调用次数是衡量"对话复杂度"的可靠代理指标——简单的问答不会触发(迭代少),只有真正经历了多步执行的任务才会触发。

5.4.2 执行时机:response 发出后,后台静默运行

Skill review 不阻塞主对话。触发条件满足时,是在当前 response 已经发送给用户之后,异步启动一个后台线程:

ounter(lineounter(lineounter(lineounter(line用户消息 → LLM 执行 N 次工具调用(N≥10)→ 生成最终 response → 发送给用户                                                                    ↓                                                        [后台静默] 启动 review thread                                                        用户完全感知不到
5.4.3 后台 review agent 的实现

Hermes 的做法很聪明:fork 出一个全新的 AIAgent 实例来做 review,而不是在主 agent 上追加逻辑。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# run_agent.py 第 2195 行def _spawn_background_review(    self,    messages_snapshot: List[Dict],   # 完整对话历史的快照    review_skills: bool = False,) -> None:    """后台线程:永不修改主对话历史,永不产生用户可见输出。"""    prompt = self._SKILL_REVIEW_PROMPT
    def _run_review():        review_agent = AIAgent(            model=self.model,            max_iterations=8,    # 最多 8 轮迭代(够用但有上限)            quiet_mode=True,     # 完全静默        )        # 禁用递归触发,防止 review agent 再次触发 review        review_agent._skill_nudge_interval = 0        review_agent._memory_nudge_interval = 0
        review_agent.run_conversation(            user_message=prompt,            conversation_history=messages_snapshot,  # 注入完整对话历史        )
    t = threading.Thread(target=_run_review, daemon=True, name="bg-review")    t.start()

关键设计

  • messages_snapshot 是主对话历史的深拷贝快照,review agent 读它但不修改它

  • quiet_mode=True 确保 review agent 的所有输出对用户不可见

  • max_iterations=8 给 LLM 足够空间决策并写入 Skill,但设置上限防止失控

  • daemon=True 确保主进程退出时 review thread 自动终止

5.4.4 LLM 如何判断"值不值得创建 Skill"

review agent 启动后,把完整对话历史 + 下面这段 prompt 发给 LLM:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# run_agent.py 第 2171-2180 行_SKILL_REVIEW_PROMPT = (    "Review the conversation above and consider saving or updating a skill "    "if appropriate.\n\n"    "Focus on: was a non-trivial approach used to complete a task that required "    "trial and error, or changing course due to experiential findings along the "    "way, or did the user expect or desire a different method or outcome?\n\n"    "If a relevant skill already exists, update it with what you learned. "    "Otherwise, create a new skill if the approach is reusable.\n"    "If nothing is worth saving, just say 'Nothing to save.' and stop.")

LLM 的判断标准(完全由语言模型自主决策,无硬编码规则):

判断维度

说明

试错过程

任务是否经历了反复尝试、多次调整方向?

实验性发现

是否在执行中发现了预期外的情况,并据此改变策略?

用户纠偏

用户是否对方法或结果表达了不满,促使 agent 改变方式?

可复用性

这个方法下次遇到类似问题时还能用吗?

退出条件:如果 LLM 认为这次对话不值得保存,它直接回复 "Nothing to save." 并停止调用任何工具。这是 Skill 创建的自然过滤器——简单的问答、一次性任务不会产生噪音 Skill。

5.4.5 系统 Prompt 中的预埋指令

除了事后的 review 机制,Hermes 还在系统 Prompt 中预埋了指令,让主 agent 在对话中途也可以主动创建 Skill

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# run_agent.py 第 3183 行SKILLS_GUIDANCE = (    "After completing a complex task (5+ tool calls), fixing a tricky error, "    "or discovering a non-trivial workflow, save the approach as a skill with "    "skill_manage so you can reuse it next time.\n"    "When using a skill and finding it outdated, incomplete, or wrong, "    "patch it immediately with skill_manage(action='patch') — don't wait to be asked. "    "Skills that aren't maintained become liabilities.")

同时,skill_manage 工具的 schema 描述中也明确了创建时机:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineCreate when:  - complex task succeeded (5+ tool calls)  - errors overcome  - user-corrected approach worked  - non-trivial workflow discovered  - user asks you to remember a procedure
Update when:  - instructions stale/wrong  - OS-specific failures discovered  - missing steps or pitfalls found during use
Skip for: simple one-offs
5.4.6 新建 vs. 更新的判断

没有硬编码的去重逻辑(如哈希比对),完全依赖 LLM 语义判断:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(linereview agent 拿到对话历史    ↓调用 skills_list() 工具,列出现有所有 Skills    ↓LLM 语义比较:这次学到的东西,和哪个现有 Skill 最相关?    ↓┌───────────────────────────────────┐│ 有相关 Skill?                     ││ ├─ 是 → skill_manage(action='patch', name='xxx', ...)  更新│ └─ 否 → skill_manage(action='create', name='yyy', ...) 新建└───────────────────────────────────┘

这种设计的优缺点:

  • 优点:灵活,能理解语义相近的合并需求,不会因为名字不同就创建重复 Skill

  • 缺点:依赖 LLM 判断,可能因模型能力差异产生不一致的结果

5.4.7 完整时序图
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line主对话线程                              后台 review 线程────────────────────────────────────   ──────────────────────────────用户: "帮我部署这个服务"  ↓[iter 1] LLM 调用 execute_code         _iters_since_skill = 1[iter 2] LLM 调用 web_search           _iters_since_skill = 2[iter 3] LLM 调用 execute_code         _iters_since_skill = 3...(中间经历了几次失败和调整)[iter 10] LLM 生成最终 response        _iters_since_skill = 10 → 触发!  ↓response 发送给用户 ✓                  spawn bg-review thread  ↓                                      ↓主线程继续等待                          review_agent.run_conversation(下一条用户消息                            messages_snapshot,                                          prompt=_SKILL_REVIEW_PROMPT                                        )                                          ↓                                        LLM 分析对话历史...                                        "用户部署过程中遇到了端口冲突,                                         需要先检查占用,这是可复用的"                                          ↓                                        skill_manage(                                          action='create',                                          name='service-deploy-linux',                                          content='...'                                        )                                          ↓                                        写入 ~/.hermes/skills/                                        service-deploy-linux/SKILL.md ✓

5.5 自进化闭环总览

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line                   ┌──────────────────┐                   │  用户完成复杂任务  │                   │  (≥10 次工具调用) │                   └────────┬─────────┘                            ↓               [后台 review agent 启动]               LLM 审查完整对话历史                            ↓              ┌─────────────┴─────────────┐              ▼                           ▼       值得保存                      不值得保存              ↓                           ↓   新建或更新 SKILL.md              "Nothing to save."   写入 ~/.hermes/skills/            静默退出              ↓   ┌──────────┼──────────┐   ▼          ▼          ▼下次同类    使用中发现    Cron 定时任务直接    Skill 过时    任务可加载复用        → 立即 patch  指定 Skill

5.6 技能来源

来源

描述

自动生成

对话中后台 review agent 自动创建

主动触发

主 agent 在对话中途主动调用 skill_manage

官方内置

仓库内预置,涵盖 DevOps、MLOps、研究等

agentskills.io

开放标准社区目录(Hermes 发起)

GitHub 直装 hermes skill install github:user/repo
ClawHub / LobeHub

第三方技能市场

5.7 自进化研究项目

Nous Research 还有姊妹项目 hermes-agent-self-evolution,将 Skill 自进化推向更深层:

  • DSPy:自动优化 prompt 文本

  • GEPA(遗传进化 Prompt 算法):对 Skill 内容、系统提示、工具描述进行"变异 + 选择 + 保留",类似生物进化,最终存活的是效果最好的版本


6. 工具系统

6.1 47 个内置工具,19 个工具集

工具集

包含工具

web

搜索、抓取、截图、浏览器自动化(含反检测)

code

多语言代码执行、调试

files

读写、目录操作、diff

media

图像生成(fal.ai)、语音合成(edge-tts)

memory

Skill 管理、历史检索

system

进程管理、环境变量

mcp

MCP 协议外部工具接入

...

...

6.2 并行执行优化

工具注册时可声明是否并发安全:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line_PARALLEL_SAFE_TOOLS = {    "web_search", "web_fetch", "image_generate",    "text_to_speech", "read_file"  # 只读操作安全并行}
# 文件写操作会检测路径重叠,重叠则自动串行_FILE_WRITE_TOOLS = {"write_file", "edit_file", "delete_file"}

7. 多平台 Gateway

7.1 支持的 16+ 平台

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line即时通讯:Telegram | Discord | Slack | WhatsApp | Signal                  | Matrix | WeChat | WeCom电子邮件:Email (SMTP/IMAP)苹果生态:iMessage (via BlueBubbles)Web 接口:REST API | WebSocketIDE 集成:ACP Protocol(Cursor 等)命令行:CLI(主入口)

7.2 Telegram 高级特性

  • 私聊 Topics:按项目隔离对话,不同 Topic 可绑定不同 Skill 集

  • DNS-over-HTTPS 回落:在 api.telegram.org 被封锁的网络环境下自动切换

7.3 统一路由设计

所有平台适配器最终将消息转化为统一格式,路由到同一个 AIAgent 核心,Session 按平台+用户 ID 隔离:

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# gateway/base.pyclass BaseGateway:    async def on_message(self, platform: str, user_id: str, text: str):        session_key = f"{platform}:{user_id}"        agent = self.session_pool.get_or_create(session_key)        response = await agent.run(text)        await self.send_response(response)

8. 模型无关性设计

8.1 支持的 20+ 提供商

类别

提供商

云端旗舰

Anthropic (Claude), OpenAI (GPT), Google AI Studio (Gemini)

聚合路由

OpenRouter(200+ 模型), Nous Portal

中国模型

GLM (z.ai), Kimi/Moonshot, MiniMax

本地推理

Ollama, HuggingFace (本地)

自定义

任意 OpenAI 兼容 endpoint

8.2 切换模型零代码改动

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 交互式切换hermes model
# 直接指定HERMES_MODEL=claude-opus-4-6 hermesHERMES_MODEL=ollama/llama3 hermes

8.3 Prompt 缓存策略(成本优化)

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineAnthropic prefix cache 原理:┌────────────────────────────────────────┐│ 系统提示 (不变)                         │ ← 缓存│ 工具定义 (不变)                         │ ← 缓存│ Skills Level 0 (不变)                  │ ← 缓存├────────────────────────────────────────┤│ 对话历史 (增长)                         │ ← 不缓存│ 用户最新消息                            │ ← 不缓存└────────────────────────────────────────┘
节省:最高 75% 输入 token 费用限制:对话中途不能修改缓存部分(否则缓存失效,成本骤增)

9. 案例演示

案例一:首次处理部署审查,自动学习

场景:用户第一次让 Hermes 审查一个 GitLab MR。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line用户:帮我审查一下 MR !1234,项目 ID 是 5678
Hermes:好的,我来帮你审查。[调用 web_search 工具查找 GitLab API 文档][调用 execute_code 工具获取 MR diff][分析变更:发现 db/migrate/ 下有新迁移文件][调用 web_search 查询 Rails migration 最佳实践]
审查结果:⚠️ 发现 db/migrate/20260415_add_index_users.rb  - 该迁移在 users 表上添加索引,生产环境有 500万 行  - 建议使用 add_index :users, :email, algorithm: :concurrently  - 直接添加会锁表约 30 秒,高峰期风险极高
✅ 代码逻辑无问题✅ 测试覆盖完整
建议:修改迁移使用 concurrent 模式后再合并。
---[后台自动执行]已创建新 Skill:~/.hermes/skills/gitlab-mr-review.md  - 记录了 GitLab API 调用方式  - 记录了数据库迁移审查要点  - 记录了本次发现的"大表加索引"陷阱

案例二:第二次同类任务,直接复用 Skill

场景:一周后,用户再次请求 MR 审查。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line用户:帮我审查 MR !2345,项目 5678
[Hermes 内部:FTS5 搜索历史,发现"MR 审查"相关记忆][加载 Skills Level 0:发现 gitlab-mr-review.md,usage_count=1][加载 Skills Level 1:读取完整 Skill 内容]
Hermes:好的,我根据上次的经验来审查。[直接调用 execute_code,使用 Skill 中记录的 API 格式][检查重点:迁移文件 + Apollo 配置(Skill 中的检查清单)]
⏱ 完成时间:比上次快 40%(无需重新查文档)

案例三:Cron 自动进化 Skill

场景:Hermes 的 Cron 调度器在凌晨触发优化任务。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line[Cron 触发,凌晨 3:00]
Nudge:你在过去两周使用了 gitlab-mr-review Skill 7 次,       其中有 2 次需要额外查询 Apollo 配置相关信息。       请复习并改进这个 Skill。
[Hermes 自动执行][读取 Skill 当前内容][读取 7 次使用的对话历史][发现:Apollo 配置变更是高频检查项,但 Skill v1.0 中没有覆盖]
[自动更新 Skill 至 v1.1]  新增:Apollo 配置变更检查章节  新增:配置与代码部署顺序的注意事项  更新:usage_count = 7
[完成,无需用户干预]

案例四:多平台统一体验

场景:用户在不同场景下使用同一个 Hermes 实例。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line早上 9:00 [Telegram]  用户:把昨天那个性能优化报告发给我一份  Hermes:[FTS5 搜索昨天的 session,找到报告内容]          [通过 Telegram 发送 PDF]
中午 12:00 [CLI]  $ hermes "继续昨天的性能优化工作"  Hermes:[加载昨天的 session 摘要]          好的,昨天我们分析了数据库查询慢的问题,          已定位到 N+1 查询在 UserService.list(),          接下来要...
晚上 7:00 [Discord]  用户:@hermes 帮我看看这段 Python 代码  Hermes:[全新 Discord session,但有 Skill:debug-python]          [直接应用已有的调试经验]

案例五:子 Agent 并行工作流

场景:处理需要并发调查的复杂分析任务。

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# 主 Agent 自动 spawn 子 Agent"""用户:帮我分析竞品 A、B、C 三家公司的技术架构差异
Hermes(主 Agent):我来并行分析这三家公司。  [spawn sub_agent_1] → 分析公司 A 的技术博客和 GitHub  [spawn sub_agent_2] → 分析公司 B 的技术博客和 GitHub    [spawn sub_agent_3] → 分析公司 C 的技术博客和 GitHub  [等待三个子 Agent 完成]  [汇总结果,生成对比报告]
完成!这比串行处理节省了约 65% 的时间。"""

10. 与主流框架对比

维度

Hermes Agent

LangChain

AutoGen

OpenAI Swarm

记忆系统

SQLite + FTS5 + Skill

插件化(需额外配置)

基础历史

无内置记忆

自进化 内置

(Cron + 自动创建 Skill)

多平台 16+ 平台内置

(Telegram, Discord...)

需自建

需自建

模型支持 20+ 提供商

,一键切换

多,但切换需改代码

OpenAI 为主

OpenAI 专属

向量数据库 不需要

(FTS5)

通常需要

通常需要

不需要

部署复杂度

(单进程,SQLite)

高(多依赖)

低但功能少

RL 训练支持 内置

 batch_runner

与 MCP 关系

Client + Server 双模式

Client

Client

核心差异:Hermes Agent 不是工具编排器,而是有记忆、会学习的自主 Agent 系统。


11. 总结与展望

11.1 架构设计的务实之道

Hermes Agent 的架构展示了一种**"务实 > 完美"**的工程哲学:

常见"理想"方案

Hermes 的务实选择

理由

向量数据库(Pinecone 等)

SQLite + FTS5

零依赖,够用,可离线

复杂知识图谱

YAML Skill 文档

人类可读,LLM 易理解

多服务微架构

单进程

部署简单,idle 零成本

专有 AI 框架

标准 OpenAI SDK

兼容所有提供商

11.2 版本演进速度

Hermes Agent 在 2026 年 3-4 月迭代极为迅速:

版本

日期

关键新特性

v0.5.0

3/28

HuggingFace、Telegram Topics、Modal、移除 litellm(供应链安全)

v0.6.0

3/30

多 Profile、MCP Server 模式、Docker 完整支持

v0.7.0

4/3

可插拔 memory provider、凭证池轮转、反检测浏览器

v0.8.0

4/8

后台任务通知、实时模型切换、Google AI Studio

v0.9.0

4/13

Android Termux、iMessage/WeChat/WeCom、Web Dashboard、Fast Mode

11.3 Hermes 的核心价值主张

ounter(lineounter(lineounter(line传统 AI Agent 是"工具"——你告诉它做什么,它做完就忘。Hermes Agent 是"同事"——它记得你们一起解决过什么,                         并且会在你睡觉的时候自己复习。

对于需要长期、反复处理同类任务的场景(DevOps、内容创作、研究分析、客户服务等),Hermes Agent 的自进化特性能够带来随时间不断累积的复合收益——这是目前大多数 Agent 框架所不具备的特质。



——新书推荐——

Golang并发编程之美

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐