15 KiB
Hermes Agent:Harness 完整架构与创新模式
资料来源: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 SessionDB(WAL 模式 + 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 运行手册:
---
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. 如有需要保存摘要
三种来源:
- 内置技能(40+):开箱即用
- Agent 自创技能:重复模式 → 自动蒸馏 → 存放本地 → 可继续改进
- 社区 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层:Tirith(Rust 外部扫描器)
└─ 同形异义词 URL、终端注入(ANSI 转义隐藏命令)
第2层:Regex 危险命令检测
└─ 归一化后检测(忽略大小写/空格),防止 RM -RF 绕过
第3层:Smart Approval(LLM 风险评级)
└─ 低风险自动批准,中/高风险需人工确认
第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 等) |
| 记忆存储 | SQLite(WAL+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 包装器。
- Harness 是控制层:模型是引擎,Harness 是控制系统。没有 Harness 的 LLM 生产部署是危险的。
- 记忆即知识:三层记忆架构(情景/语义/程序)使 Agent 拥有真实的跨会话连续性。
- 技能即进化:Agent 自己编写 Skills,不是人类工程师在维护——这是真正的自我改进。
- 平台无关是工程纪律:一个核心,多个表面,所有平台差异在适配层消失。
- 提示缓存是经济问题: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)等多个来源。