Files
AgentMessage/Openclaw-Herems/02-Hermes-Harness.md

332 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hermes AgentHarness 完整架构与创新模式
> 资料来源Hermes Agent 官方文档、Pyshine Orange Book、dev.to 技术深度解析、Nous Research GitHub 及 ArXiv 相关研究
> 整理时间2026-05-06
---
## 一、总体架构
### 1.1 核心理念:从 Harness 到 Agent
Hermes Agent 源自 Nous Research 的 **Harness 工程框架**,完成了一次从"开发者工具"到"自主智能体平台"的根本性转变。这不是简单的重命名,而是 AI 工程第三范式转移的体现:
| 范式 | 核心 | 特点 |
|------|------|------|
| Prompt Engineering | 优化提示词 | 手工调试,易出错 |
| Context Engineering | 管理上下文 | 复杂,仍是被动的 |
| **Harness Engineering** | **自我进化的控制基础设施** | 主动学习,持续改进 |
**核心洞察**:模型提供智能,但 **Harness 提供控制**。没有 Harness将 LLM 部署到生产环境就像"把喷气发动机直接连到方向盘上"——有动力但无控制系统。
### 1.2 三层架构概览
```
┌────────────────────────────────────────────────────────────┐
│ ENTRY POINTS │
│ CLI / TUI / Gateway (TG, Discord, Slack) / Cron / Batch │
└─────────────────────┬──────────────────────────────────────┘
│ 每个入口构建一个 AIAgent
┌────────────────────────────────────────────────────────────┐
│ AIAgent (核心循环 ~13,700 行) │
│ build_system_prompt → call model → dispatch tools → loop │
└──────┬─────────────┬──────────────┬───────────┬───────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌────────────┐ ┌─────────────┐
│ Tools │ │ Skills │ │ Memory │ │ Providers │
│ Registry │ │ Loader │ │ Manager │ │ (model API) │
└──────────┘ └──────────┘ └────────────┘ └─────────────┘
┌────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────┐
│ Execution Environments: local / Docker / SSH / Modal │
└────────────────────────────────────────────────────────────┘
```
**三层语义**
- **第一层Surfaces**:人/系统如何与 Agent 对话CLI、聊天平台、Cron
- **第二层Agent Core**:循环 + 四个可插拔子系统(工具、技能、记忆、模型)
- **第三层Execution**Shell/代码执行的实际运行环境
### 1.3 核心组件
| 组件 | 文件 | 功能 |
|------|------|------|
| AIAgent | `run_agent.py` | 核心对话循环,同步编排引擎 |
| HermesCLI | `cli.py` | 交互式终端 UI |
| Gateway | `gateway/run.py` | 消息平台网关 |
| Tool Registry | `tools/registry.py` | 61 个注册工具52 个工具集 |
| SessionDB | `hermes_state.py` | SQLite + FTS5 全文本搜索 |
| Prompt Builder | `agent/prompt_builder.py` | 系统提示组装 |
| Skill Manager | `agent/skill_commands.py` | 技能生命周期管理 |
### 1.4 Agent 循环(核心执行流程)
```
1. 接收输入 ── CLI / gateway / cron / ACP / web
2. 构建系统提示 ── persona + memory + skills + tools会话期间仅一次
3. 解析 Provider ── 选择哪个 API key + endpoint
4. 调用模型 ── 支持 4 种 API 模式:
chat_completions | codex_responses | anthropic_messages | bedrock_converse
5. 解析响应:
├─ 存在 tool_calls → 分发到 registry → 追加结果 → 回到步骤 4
└─ 否则 → 最终回复 → 展示 → 持久化 → 完成
6. 持久化 ── SQLite SessionDBWAL 模式 + FTS5 索引)
```
---
## 二、Harness 的定义与作用
### 2.1 什么是 Harness
Harness 是围绕模型的基础设施层,它将 LLM 转化为**可控的、可审计的、可投入生产使用的智能体**。具体包括:
| Harness 职责 | Hermes 实现 |
|-------------|------------|
| **工具中介** (Tool Mediation) | 61 个内置工具 + 动态 MCP 集成 |
| **上下文管理** (Context Management) | 三层记忆 + FTS5 检索 + 上下文压缩 |
| **委托分发** (Delegation) | 最多 3 个并发子 Agent |
| **安全控制** (Safety Control) | 四层防护Tirith 扫描 / Regex 检测 / LLM 风险评级 / 审批范围 |
| **编排调度** (Orchestration) | AIAgent 单一类服务所有入口 |
### 2.2 五大子系统
```
Central Orchestration Core
┌────┼────┬────┬────┐
▼ ▼ ▼ ▼ ▼
┌────┐┌────┐┌────┐┌────┐┌──────┐
│Skill││Memory│ │Tool│ │Gateway││Learning│
│System││System│ │Eco-│ │Layer │ │ Loop │
│ │ │ │ │system│ │ │ │ │
└────┘└────┘└────┘└────┘└──────┘
```
### 2.3 从 Harness 进化到 Hermes 的五层映射
| Harness 层 | → | Hermes 进化 |
|-----------|---|------------|
| 指令层 | → | **技能系统**:静态提示模板 → 动态可进化技能 |
| 约束层 | → | **工具权限**:刚性执行边界 → 粒度化权限模型 |
| 反馈层 | → | **学习循环**Harness 将反馈当日志 → Hermes 闭合循环 |
| 记忆层 | → | **三层记忆**:临时上下文 → Session/Persistent/Skill 三层结构 |
| 编排层 | → | **子 Agent 委托**:单线程 → 最多 3 个并发子 Agent |
---
## 三、创新点(核心差异化)
### 3.1 学习循环飞轮(最核心创新)
Hermes 区别于其他 Agent 框架的根本在于**五步学习循环**,形成自我强化飞轮:
```
┌─────────────┐
│ 1. 记忆管理 │ ── 评估对话,筛选值得保留的信息
└──────┬──────┘
┌─────────────┐
│ 2. 技能创建 │ ── 重复模式 → 自动蒸馏为新 Skill
└──────┬──────┘
┌─────────────┐
│ 3. 技能自改进│ ── 达尔文压力:表现好的技能存活并传播
└──────┬──────┘
┌─────────────┐
│ 4. FTS5 召回│ ── 全量历史语义检索,不只依赖当前上下文
└──────┬──────┘
┌─────────────┐
│ 5. 用户建模 │ ── 通过 Honcho 构建用户画像(风格/专业/偏好)
└──────┬──────┘
└────── "更好记忆 → 更好技能 → 更好结果 → 更丰富反馈 → 更精确用户模型 → 更相关记忆"飞轮闭环
```
**关键**Agent 通过 `skill_manage` 工具自己编写 Skills自己编辑 MEMORY.md——不是人类在改代码而是 Agent 在自我进化。
### 3.2 三层记忆架构(类人认知)
| 层级 | 类型 | 内容 | 存储 | 回答问题 |
|------|------|------|------|---------|
| Session Memory | 情景记忆 | 单次对话全内容、工具调用结果、推理步骤 | SQLite | "这次对话发生了什么?" |
| Persistent Memory | 语义记忆 | 身份、关系、长期知识 | MEMORY.md + USER.md纯文本 | "我是谁?用户是谁?" |
| Skill Memory | 程序记忆 | 如何执行任务的步骤 | `~/.hermes/skills/` 的 Markdown | "我怎么做这件事?" |
这三重结构**直接对应人类认知架构**(情景/语义/程序记忆),是有意为之的设计哲学,而非偶然。
### 3.3 技能系统Skills as Runbooks
Skills 不是代码,也不是配置,而是**Agent 可读取和增长的 Markdown 运行手册**
```yaml
---
name: article-summarizer
description: 以结构化格式总结文章
triggers:
- summarize
- tl;dr
tools:
- web_search
- web_scraper
- file_write
---
# Article Summarizer
你是一个善于提炼文章为清晰结构化摘要的专家。
## Instructions
1. 使用 web_search 或 web_scraper 获取文章内容
2. 识别核心论点、支撑论据和结论
3. 格式化摘要为:
- **论点**:一句话核心论点
- **关键点**3-5 个要点
- **结论**:影响和收获
4. 如有需要保存摘要
```
**三种来源**
1. **内置技能40+**:开箱即用
2. **Agent 自创技能**:重复模式 → 自动蒸馏 → 存放本地 → 可继续改进
3. **社区 Skills Hub**:遵循 agentskills.io 标准,可分享安装
### 3.4 渐进式加载Progressive Disclosure
Hermes 不一次性加载所有技能、记忆和工具文档,而是分层加载:
| 层级 | 内容 | 时机 |
|------|------|------|
| Level 0 | Skills 索引(名称+描述) | 始终在系统提示中 |
| Level 1 | 实际技能内容 | Agent 真正需要时才注入 |
| Level 2 | 引用的外部文件 | 技能自己请求时才加载 |
这就是为什么 Hermes 可以携带 47 个工具和数十个技能,而不会超出上下文限制。
### 3.5 平台无关核心One Agent, Many Surfaces
单个 `AIAgent` 类服务所有入口,平台差异只存在于薄薄的适配层:
| 入口 | 说明 |
|------|------|
| CLI / TUI | 交互式终端 |
| Gateway | 20 个消息平台Telegram/Discord/Slack/WhatsApp/飞书/微信等) |
| ACP | VS Code / Zed / JetBrains IDE 集成 |
| Cron | 定时任务JSON 配置,支持绑定技能) |
| Batch Runner | 批量轨迹生成(训练数据管道) |
| Web UI | 网页界面 |
| API Server | REST API |
跨平台对话连续性:用户可以在 Telegram 开始对话,切换到 Discord 继续,全程共享同一上下文。
### 3.6 自注册模式Self-Registration
工具和插件在**导入时**通过 `registry.register(...)` 自注册,而不是维护中心列表:
- 新增工具 = 新增一个 `.py` 文件,无需修改其他代码
- MCP 服务器即插即用
- 插件通过 `~/.hermes/plugins/` 自动发现
### 3.7 提示缓存友好设计Prompt Stability
系统提示在会话启动时组装,**会话期间不改变**。原因:
- Anthropic / OpenAI 的提示缓存要求稳定前缀才能命中
- 会话中改变工具集、重新加载记忆会破坏缓存,成本可能增加 **10 倍**
- 新记忆在磁盘写入,但系统提示不变——下次会话生效
### 3.8 四层安全防护
```
第1层TirithRust 外部扫描器)
└─ 同形异义词 URL、终端注入ANSI 转义隐藏命令)
第2层Regex 危险命令检测
└─ 归一化后检测(忽略大小写/空格),防止 RM -RF 绕过
第3层Smart ApprovalLLM 风险评级)
└─ 低风险自动批准,中/高风险需人工确认
第4层Approval Scopes信任累积
└─ Once / Session / Permanent 三级,逐步建立信任
```
### 3.9 执行环境抽象
同一工具可在不同执行环境中运行Agent 本身无感知:
| 环境 | 用途 | 隔离级别 |
|------|------|---------|
| local | 开发笔记本,最快,零隔离 | 无 |
| docker | 共享开发机,每个会话一个容器 | 容器级 |
| ssh | 远程 VM | VM 级 |
| daytona / modal | Serverless 沙箱,按需启动 | 强隔离 |
| singularity | HPC 集群 | 集群级 |
---
## 四、设计原则汇总
| 原则 | 实践 |
|------|------|
| **提示稳定性** | 系统提示会话期间不变,不破坏缓存 |
| **可观察执行** | 每个工具调用通过 callbacks 对用户可见 |
| **可中断** | API 调用和工具执行可在中途取消 |
| **平台无关核心** | 一个 AIAgent 服务所有入口,平台差异在适配层 |
| **松耦合** | MCP、插件、记忆提供者使用注册模式不硬依赖 |
| **Profile 隔离** | 每个 profile`-p <name>`)拥有独立 HERMES_HOME、配置、记忆、会话和 Gateway PID |
---
## 五、技术规格速览
| 指标 | 数值 |
|------|------|
| GitHub Stars | 47K+42天内 |
| AIAgent 代码行数 | ~13,700 行 |
| HermesCLI 代码行数 | ~11,500 行 |
| GatewayRunner 代码行数 | ~12,200 行 |
| 内置工具数 | 61 个 |
| 工具集数 | 52 个 |
| 消息平台适配器 | 20 个 |
| 支持 Provider | 18+OpenRouter/OpenAI/Anthropic/Ollama 等) |
| 记忆存储 | SQLiteWAL+FTS5|
| 技能存储 | `~/.hermes/skills/`Markdown + YAML frontmatter|
| MCP 集成 | 支持,可连接 6,000+ 外部应用 |
| 并发子 Agent | 最多 3 个 |
| 测试覆盖 | 3,000+ 测试用例 |
---
## 六、与其他框架的对比
| 维度 | **Hermes Agent** | OpenClaw | Claude Code |
|------|-----------------|----------|-------------|
| 架构哲学 | 自我进化 + 记忆连续性 | 模块化 + 可组合性 | Anthropic 生态深度集成 |
| 记忆模型 | 三层Session/Persistent/Skill+ Honcho 用户建模 | 可配置记忆后端,无结构化分层 | Session 级上下文 + CLAUDE.md |
| 技能系统 | 最成熟(内置+自创+社区),支持自动蒸馏 | 插件系统,无自动技能蒸馏 | 紧耦合生态,无社区分享 |
| 工具生态 | 40+ 内置 + 6,000+ MCP | 可比内置规模MCP 较小 | 主要终端+文件系统MCP 较新 |
| 多平台 | **14 平台 + 跨平台连续性** | 支持但连续性较弱 | 主要 CLI网页访问通过 API |
| 自我改进 | **飞轮学习循环**,真正的自动进化 | 实验性功能,未生产就绪 | 依赖 CLAUDE.md 手工更新 |
| 最适合场景 | 需要随时间变强的 Agent跨平台使用 | 追求模块化定制的用户 | Anthropic 生态深度用户 |
---
## 七、关键洞察总结
> **Hermes 的核心创新不是某一个功能,而是一个范式**:将 Agent 视为一个认知系统,而非一个 API 包装器。
1. **Harness 是控制层**模型是引擎Harness 是控制系统。没有 Harness 的 LLM 生产部署是危险的。
2. **记忆即知识**:三层记忆架构(情景/语义/程序)使 Agent 拥有真实的跨会话连续性。
3. **技能即进化**Agent 自己编写 Skills不是人类工程师在维护——这是真正的自我改进。
4. **平台无关是工程纪律**:一个核心,多个表面,所有平台差异在适配层消失。
5. **提示缓存是经济问题**Mid-session 的"聪明"改动可能让你的 API 成本增加 10 倍。
---
*整理自Hermes Agent 官方架构文档hermes-agent.nousresearch.com、PyShine Orange Book、dev.to 技术深度解析、ArXiv 研究论文 "Architectural Design Decisions in AI Agent Harnesses"2604.18071v1)等多个来源。*