副标题:唯一内置学习循环的开源 AI Agent 框架------它不只是执行任务,而是「越用越聪明」
作者 :码流怪侠 | 日期:2026 年 6 月
GitHub 仓库 :NousResearch/hermes-agent | Star :187k+ | 许可证:MIT
目录
- 项目概述
- 核心设计哲学
- 五层洋葱架构
- [AIAgent 代理层:ReAct 循环](#AIAgent 代理层:ReAct 循环)
- 工具系统:自注册插件架构
- 技能系统:自我进化的核心
- GEPA:遗传帕累托提示进化
- 记忆系统:三层持久化
- 子代理委派:分而治之
- 安全架构:四层纵深防御
- 安装与搭建
- 效果对比与基准测试
- 优缺点分析
- 总结与展望
一、项目概述
Hermes Agent 是由 Nous Research(获 5000 万美元融资的 AI 实验室,Hermes 系列模型的缔造者)于 2026 年 2 月开源的自我改进型 AI 代理框架。它的核心定位是:
"The agent that grows with you" ------ 与你共同成长的智能体
截至 2026 年 6 月,该项目已在 GitHub 上获得 187,000+ Star 和 32,000+ Fork ,累计提交超过 11,000 次,代码规模达到惊人的 238,000 行 Python。这在 AI Agent 开源项目中,是极其罕见的工程深度与活跃度。
1.1 它的独特之处
在 AI Agent 泛滥的 2026 年,Hermes Agent 凭什么脱颖而出?答案是它解决了 AI Agent 领域的核心困境------"Agent 永远从零开始"。
| 典型 Agent 框架 | Hermes Agent |
|---|---|
| 每次对话 = 全新会话 | 跨会话记忆持续积累 |
| 手动编写规则 / 提示词 | 自动从经验中创建技能 |
| 静态行为模式 | 技能在使用中自我改进 |
| 无记忆或简单 RAG | 三层记忆 + 会话搜索 + 用户建模 |
| 仅 CLI 或单一平台 | 12+ 平台统一网关 |
1.2 核心能力一览
- 闭环学习系统:从经验中创建技能,使用中优化技能,自我提醒以持久化知识
- 多平台生活:Telegram / Discord / Slack / WhatsApp / Signal / 微信 / 钉钉 / 飞书 / 企业微信 / CLI
- 多提供商支持:Nous Portal / OpenRouter / OpenAI / Anthropic / NVIDIA NIM / 小米 MiMo / MiniMax / GLM / Kimi 等
- 计划自动化:内置 cron 调度器,可投递到任意平台
- 子代理委派:隔离子代理并行工作流,跨进程 ACP 通信
- 6 种终端后端:本地 / Docker / SSH / Daytona / Singularity / Modal(无服务器,空闲零成本)
- 40+ 内置工具:网页搜索 / 浏览器 / 终端 / 文件操作 / 图像生成 / TTS / 代码执行
- 安全纵深防御:4 层防线,从 prompt injection 防护到执行边界控制
二、核心设计哲学
在深入架构之前,先理解 Hermes Agent 的六条设计哲学------它们构成了所有技术决策的基石。
哲学 1:分层清晰,单点控制
每一层有明确的编排者。例如所有代理逻辑(ReAct 循环、prompt 构建、上下文压缩、工具分发)集中在一个 AIAgent 类中(12K 行),调用链完全可追踪。
哲学 2:自注册 > 手动注册
添加新工具只需写一个 Python 文件并调用 registry.register()。框架通过 AST 扫描自动发现和注册工具模块,无需修改任何中心化配置。
哲学 3:进化 > 静态
技能在使用中被验证和修正,记忆在每次对话中被检索和更新。系统不是一次性配置完就固定不变的------它会不断演进。
哲学 4:安全是架构,不是补丁
安全措施嵌入每一层设计。基类层面就处理 UTF-16 边界安全和 SSRF 防护,执行层面强制子代理工具限制和超时控制。安全不是「事后补丁」,而是架构的第一原则。
哲学 5:优雅降级 > 强依赖
每个组件可以独立失败而不影响核心功能:外部记忆挂了 → 内建 MEMORY.md 还在工作;主模型超限 → 自动切换备用模型;MCP 服务断连 → 基础工具不受影响。
哲学 6:适配器模式的极致运用
20+ 平台适配器、4 种 LLM API 适配器、8 种记忆后端,全部通过统一的抽象基类进行泛化。这确保了新平台和新模型的接入成本极低。
三、五层洋葱架构
Hermes Agent 采用严格的分层洋葱架构,每层只依赖内层,不跨层访问。
上图展示了五层架构的完整视图。下面从内到外逐层剖析。
3.1 Layer 1 --- 基座层(Foundation,20K 行)
职责:LLM 提供商适配、配置管理、日志系统、状态存储。
核心组件:
providers/:4 种 API 模式适配器(OpenAI 兼容、Anthropic Native、Bedrock、Gemini)hermes_state.py:跨会话状态管理hermes_config.py:全局配置系统hermes_logging.py:结构化日志
提供商适配的精妙之处 :不同提供商的 API 以不同的方式表达「思考预算」。例如 Anthropic 的 thinking 参数和 OpenAI 的 reasoning_effort 参数需要统一映射。Hermes 的适配器层做了类似下面的抽象:
python
# 思考预算映射示例(伪代码)
THINKING_BUDGET_MAP = {
"xhigh": {"claude_4.7+": "xhigh", "claude_4.6": "max"},
"high": {"claude_4.7+": "high", "claude_4.6": "high"},
"medium": {...},
"low": {...},
}
3.2 Layer 2 --- 工具层(Tools,44K 行)
职责:60+ 工具的注册、调度、执行。
核心机制------AST 预扫描自注册:
model_tools.py → discover_builtin_tools()
→ registry.py: AST 扫描 (查找包含 registry.register() 的模块)
→ 确认后 import → 自动注册
→ get_tool_definitions(enabled_toolsets) → 返回过滤后的工具 schemas
这里有一个精妙的设计:不直接 import 所有 Python 文件 ,而是先用 ast.parse() 静态分析,检查是否包含顶层 registry.register() 调用。这避免了辅助模块 import 时触发副作用(如网络请求或依赖检查)。
工具集(Toolset)分组:
| 工具集 | 包含工具 | 典型场景 |
|---|---|---|
| Core | web_search, web_extract, terminal, process, read_file, write_file, patch, search_files, browser_* (10个), vision_analyze, image_generate |
通用任务 |
| Knowledge | skills_list, skill_view, skill_manage, memory, session_search, todo |
知识管理 |
| Orchestration | delegate_task, execute_code, cronjob, send_message |
编排调度 |
预定义工具集组合:
hermes-cli:所有工具hermes-telegram:所有工具(消息平台完整版)research:web_search + browsersafe:只读工具
3.3 Layer 3 --- 代理层(AIAgent,12K 行)
这是整个系统的「大脑」,在第四节详细展开。
3.4 Layer 4 --- 网关层(Gateway,51K 行)
关键洞察:网关层(51K 行)是代理层(12K 行)的 4 倍。这说明------
一个优秀的 AI Agent 产品,80% 的工程量不在「调用 LLM」上,而在「如何把 LLM 嵌入到真实世界中」。
平台统一契约 --- BasePlatformAdapter:
python
class BasePlatformAdapter(ABC):
"""所有平台适配器的抽象基类"""
@abstractmethod
async def connect(self) -> bool: ...
@abstractmethod
async def disconnect(self): ...
@abstractmethod
async def send(self, chat_id: str, text: str, metadata: dict): ...
@abstractmethod
async def send_image(self, chat_id: str, path: str): ...
@abstractmethod
async def send_voice(self, chat_id: str, path: str): ...
@abstractmethod
def truncate_message(self, text: str, limit: int) -> List[str]: ...
关键技术细节:
-
UTF-16 边界安全截断:使用二分搜索算法精确截断消息,确保不会在 emoji 或 CJK 字符中间切断(Telegram 限制 4096 个 UTF-16 code units,微信限制 2048 个字符)。
-
SSRF 防护 :基类提供
_ssrf_redirect_guard异步函数,防止外部 URL 重定向到内网地址(如云元数据服务169.254.169.254)。 -
GatewayRunner --- 会话编排:
平台消息 → GatewayRunner
→ session_key (platform:chat_id)
→ Agent Cache (LRU 128)
├── 命中 → 复用 AIAgent Instance
└── 未命中 → 创建新 AIAgent
→ run_conversation → 平台回复Idle Timer (1小时 TTL) → 驱逐空闲 Agent
**为什么需要 Agent 缓存?**每个 AIAgent 持有 LLM 客户端、工具 schema、内存提供者等重量级对象。如果每条消息都新建实例,Anthropic 和 OpenAI 的 prompt caching(依赖 system prompt 稳定性来缓存 KV)将完全失效。
3.5 Layer 5 --- 平台层(Platforms)
20+ 平台适配器,覆盖:
- 即时通讯:Telegram、Discord、Slack、WhatsApp、Signal、微信、Matrix
- 企业协作:钉钉、飞书、企业微信
- 其他:Email、API Server、Home Assistant
四、AI Agent 代理层:ReAct 循环
AIAgent 是整个系统的大脑,其核心是一个增强型 ReAct(Reasoning + Acting)循环,完整流程见上图。
4.1 核心循环的数学描述
ReAct 循环可以被形式化为一个有限状态机:
定义 :令时间为 t = 0 , 1 , 2 , ... t = 0, 1, 2, \ldots t=0,1,2,...,每次迭代经历以下步骤:
步骤 1 --- 上下文构建 :
C t = Build ( M , S , P , H t − 1 ) C_t = \text{Build}(M, S, P, H_{t-1}) Ct=Build(M,S,P,Ht−1)
其中 M M M 为记忆注入(MEMORY.md + 用户建模), S S S 为技能注入, P P P 为平台上下文, H t − 1 H_{t-1} Ht−1 为历史消息。
步骤 2 --- LLM 推理 :
R t = LLM ( C t ) R_t = \text{LLM}(C_t) Rt=LLM(Ct)
步骤 3 --- 响应类型判别:
A t = { Return ( R t ) if R t 是纯文本 Execute ( R t . tool_call ) if R t 是工具调用 A_t = \begin{cases} \text{Return}(R_t) & \text{if } R_t \text{ 是纯文本} \\ \text{Execute}(R_t.\text{tool\_call}) & \text{if } R_t \text{ 是工具调用} \end{cases} At={Return(Rt)Execute(Rt.tool_call)if Rt 是纯文本if Rt 是工具调用
步骤 4 --- 迭代控制:
H t = { H t − 1 ⊕ R t ⊕ Result ( Execute ) if 工具调用 H t − 1 ⊕ R t if 纯文本 H_t = \begin{cases} H_{t-1} \oplus R_t \oplus \text{Result}(\text{Execute}) & \text{if 工具调用} \\ H_{t-1} \oplus R_t & \text{if 纯文本} \end{cases} Ht={Ht−1⊕Rt⊕Result(Execute)Ht−1⊕Rtif 工具调用if 纯文本
终止条件:
t ≥ T max ⇒ Summarize ( ) t \ge T_{\text{max}} \Rightarrow \text{Summarize}() t≥Tmax⇒Summarize()
4.2 自动故障转移
AIAgent 内建 classify_api_error 函数,根据错误类型采取不同策略:
| 错误类型 | 策略 | 原因 |
|---|---|---|
rate_limit |
指数退避重试 | 临时性,等待可解决 |
auth_failure |
切换备用模型 | 密钥问题不会自愈 |
context_exceeded |
上下文压缩后重试 | 清除中间轮次摘要 |
service_unavailable |
降级到次选模型 | 主模型暂时不可用 |
4.3 上下文自动压缩
当对话超过窗口限制时,ContextCompressor 会用辅助模型对中间对话轮次做结构化摘要:
压缩前:
├── HEAD: System Prompt + 前几轮
├── MIDDLE: 中间 N 轮对话(工具调用 + 结果)
└── TAIL: 最近几轮(当前任务上下文)
压缩后:
├── HEAD: 保持不变
├── SUMMARY: 结构化摘要
│ ├── ✅ 已解决问题
│ ├── ⏳ 待处理事项
│ └── 📁 当前工作目录状态
└── TAIL: 保持不变(Token 预算保护)
三个精妙设计:
- 摘要标记为参考信息:以特殊前缀开头,防止模型把历史任务当成当前指令
- 结构化摘要模板:强制辅助模型生成「已解决 / 待处理 / 当前状态」三个维度的结构化输出
- 迭代式压缩:新摘要合并旧摘要,信息逐步精炼而非突然丢失
五、工具系统:自注册插件架构
5.1 工具注册机制
Hermes 的工具系统采用 AST 预扫描 + 自动注册 的架构,其设计精妙之处在于:
python
# 伪代码:工具发现流程
def discover_builtin_tools():
tool_modules = []
for file in glob("tools/*.py"):
ast_node = ast.parse(read_file(file))
# 静态分析:查找 registry.register() 调用
if has_register_call(ast_node):
tool_modules.append(file)
for module in tool_modules:
import_module(module) # 确认安全后才 import
# 模块内的 @registry.register() 装饰器自动完成注册
为什么用 AST 预扫描而不是直接 import?
- 避免副作用:某些辅助 Python 文件 import 时可能触发网络请求
- 性能优化:跳过不需要的工具模块可以加快启动速度
- 安全隔离:恶意模块在 import 之前就被过滤掉
5.2 工具注册的数学表达
工具注册可以形式化为一个映射函数:
Register : ToolClass × Toolset → ToolSchema \text{Register}: \text{ToolClass} \times \text{Toolset} \to \text{ToolSchema} Register:ToolClass×Toolset→ToolSchema
其中 ToolSchema \text{ToolSchema} ToolSchema 包含:
name:工具唯一标识符description:传递给 LLM 的工具描述parameters:JSON Schema 格式的参数定义function:实际执行函数
工具集过滤:
GetTools ( E ) = { t ∈ Registry ∣ t . toolset ∈ E } \text{GetTools}(E) = \{ t \in \text{Registry} \mid t.\text{toolset} \in E \} GetTools(E)={t∈Registry∣t.toolset∈E}
其中 E E E 为启用的工具集列表(如 ["core", "knowledge"])。
5.3 子代理工具限制
子代理不能使用的工具通过硬编码的 DELEGATE_BLOCKED_TOOLS 列表控制:
- 不能递归委派:防止无限委派链
- 不能与用户交互 :
clarify等工具被禁止(子代理只能与父代理通信) - 不能写入共享内存 :
memory工具被禁止 - 不能发消息到其他平台 :
send_message被禁止 - 最大嵌套深度 2 层:硬限制,防止资源耗尽
六、技能系统:自我进化的核心
技能系统是 Hermes Agent 区别于所有其他 Agent 框架的核心差异化能力。
6.1 技能目录结构
~/.hermes/skills/
├── github/ # GitHub 工作流
│ ├── github-pr-workflow/
│ └── github-code-review/
├── mlops/ # ML 运维
│ ├── axolotl/ # 模型微调
│ ├── vllm/ # LLM 推理部署
│ └── whisper/ # 语音转写
├── software-development/
│ ├── plan/
│ ├── test-driven-development/
│ └── systematic-debugging/
└── creative/
├── ascii-art/
└── manim-video/
覆盖 26 个领域、上百个具体技能。
6.2 SKILL.md 文件格式
每个技能由 SKILL.md 文件定义:
markdown
---
name: deploy-to-staging
description: Deploy current project to staging environment
tags: [deploy, docker, staging]
version: 1.0.2
---
# deploy-to-staging
## When to use
使用 docker-compose 将项目部署到 staging 环境。
## Steps
1. 运行 `docker-compose -f docker-compose.staging.yml build`
2. 运行 `docker-compose -f docker-compose.staging.yml up -d`
3. 验证:`curl http://staging:3000/health`
## Pitfalls
- 确保 `.env.staging` 文件存在
- 端口 3000 不能被其他服务占用
## Verification
`docker-compose -f docker-compose.staging.yml ps` 应显示所有服务为 "Up"
6.3 学习闭环的形式化描述
技能学习闭环可以被建模为一个强化学习过程:
定义 :令 t t t 为任务编号, S t S_t St 为第 t t t 次任务执行后的技能集合。
技能创建 :当任务完成时的工具调用次数 N tools ≥ 5 N_{\text{tools}} \ge 5 Ntools≥5:
S t + 1 = S t ∪ { CreateSkill ( τ t ) } S_{t+1} = S_t \cup \{\text{CreateSkill}(\tau_t)\} St+1=St∪{CreateSkill(τt)}
其中 τ t \tau_t τt 为第 t t t 次任务的执行轨迹。
技能改进 :当执行技能 s ∈ S t s \in S_t s∈St 时遇到问题 e e e:
S t + 1 = ( S t ∖ { s } ) ∪ { Patch ( s , e ) } S_{t+1} = (S_t \setminus \{s\}) \cup \{\text{Patch}(s, e)\} St+1=(St∖{s})∪{Patch(s,e)}
技能效用函数:
U ( s ) = 成功使用次数 总使用次数 − λ ⋅ patch 次数 使用次数 U(s) = \frac{\text{成功使用次数}}{\text{总使用次数}} - \lambda \cdot \frac{\text{patch 次数}}{\text{使用次数}} U(s)=总使用次数成功使用次数−λ⋅使用次数patch 次数
其中 λ \lambda λ 为惩罚系数,平衡成功率和稳定性。
6.4 正反馈循环
使用越多 → 发现问题越多 → patch 越多 → 技能越准确 → 使用更多
这就是为什么 Hermes Agent 会「越用越聪明」:System Prompt 强制要求 Agent 在加载技能后,如果发现步骤过时、命令失败或缺少步骤,必须立即调用 skill_manage(action=patch) 修复,创建一个持续增强的正反馈循环。
实际效果案例:
第一次写 Python 爬虫,风格可能不符合你的习惯。到第十次,它知道你偏好用
httpx而不是requests,知道你习惯把错误日志写到文件,知道你的项目结构在src/下按模块划分。没有人教它这些,它是自己学会的。
七、GEPA:遗传帕累托提示进化
GEPA(Genetic-Pareto Prompt Evolution)是 Hermes Agent 评估系统中的核心技术,已被 ICLR 2026 接收为 Oral 论文。
7.1 问题形式化
标准强化学习(如 GRPO)在 Agent 任务中面临样本效率问题:
GRPO 成本 = N rollout × Cost ( rollout ) \text{GRPO 成本} = N_{\text{rollout}} \times \text{Cost}(\text{rollout}) GRPO 成本=Nrollout×Cost(rollout)
在 Agent 场景下,每次 rollout 可能包含数十次 LLM 调用,成本极高。
7.2 GEPA 方法
GEPA 的核心创新是:不通过盲目的试错探索,而是通过理解"为什么失败"来改进。
步骤 1 --- 轨迹分析:
Analysis ( τ ) → { ( f i , c i ) } \text{Analysis}(\tau) \to \{(f_i, c_i)\} Analysis(τ)→{(fi,ci)}
其中 f i f_i fi 为失败点, c i c_i ci 为失败原因。
步骤 2 --- 定向建议:
Suggest ( f i , c i ) → { δ 1 , δ 2 , ... , δ k } \text{Suggest}(f_i, c_i) \to \{\delta_1, \delta_2, \ldots, \delta_k\} Suggest(fi,ci)→{δ1,δ2,...,δk}
每个 δ j \delta_j δj 是对工具描述、系统提示、技能实现或代码的定向改进。
步骤 3 --- 遗传选择:
Select ( { δ j } ) = arg max δ Pareto ( δ ) \text{Select}(\{\delta_j\}) = \arg\max_{\delta} \text{Pareto}(\delta) Select({δj})=argδmaxPareto(δ)
在 帕累托前沿 上进行选择,同时平衡三个维度:
- 质量:任务成功率
- 效率:Token 消耗
- 泛化:在未见任务上的表现
步骤 4 --- DSPy 集成 :GEPA 集成到 DSPy 框架中,仅需 3 个训练示例 即可工作。
7.3 性能对比
| 方法 | 改进幅度 | 所需 Rollout |
|---|---|---|
| GRPO(RL 基线) | 基线 | ~N 次 |
| GEPA | 平均 +6%,任务级最高 +20% | ~N/35 次 |
35 倍 的 rollout 效率优势来自 GEPA 的推理驱动改进策略------它理解失败原因而非盲目探索。
MATH 基准测试 :GEPA 优化程序达到 93% 准确率,相比基础 ChainOfThought 的 67% 提升 26 个百分点。
(GEPA 于 2026 年 4 月 8 日在 Hermes Agent v0.8.0 中首次发布)
八、记忆系统:三层持久化
Hermes Agent 的记忆系统采用了内建 + 插件的双轨制设计,对应认知科学的三种记忆类型。
8.1 三层记忆架构
| 层级 | 记忆类型 | 回答的问题 | 技术实现 | 示例 |
|---|---|---|---|---|
| 第一层 | 情景记忆 (Episodic) | "发生了什么" | SQLite + FTS5 全文索引(按需检索,非全量加载) | 上次部署遇到的端口冲突 |
| 第二层 | 语义记忆 (Semantic) | "你是谁" | 持久状态存储 + Honcho 用户建模 | 你用阿里云 ECS + Nginx 反代 |
| 第三层 | 程序性记忆 (Procedural) | "怎么做事" | ~/.hermes/skills/ 下的 Markdown 文件 |
deployment-checklist.md |
8.2 内建记忆(必须可靠)
| 文件 | 内容 |
|---|---|
MEMORY.md |
Agent 的工作笔记:环境事实、工具怪癖、经验教训 |
USER.md |
用户画像:姓名、偏好、习惯、纠正历史 |
每次对话自动注入 system prompt,纯文本文件,简单可靠。即使外部记忆服务全部宕机,这两个文件也能保证 Agent 的基本记忆能力。
8.3 外部记忆插件(可选增强)
支持的记忆后端:Honcho、Mem0、Holographic、Hindsight、ByteRover、SuperMemory、RetainDB、OpenViking。
双轨制设计哲学:内建记忆是基础保障,外部插件是高级增强------但永远不替代内建存储。
8.4 会话搜索
利用 SQLite 的 FTS5 全文索引 实现跨会话的高效检索:
- 查询延迟:约 10ms(在 10,000+ 文档中)
- 检索方式:按需检索,非全量加载(不会因为数据库变大而拖慢性能)
- LLM 摘要:对检索到的历史对话做按需摘要,而不是把全部历史喂给 LLM
8.5 记忆检索的形式化
令 D D D 为所有历史文档的集合,当前查询为 q q q:
Retrieve ( q ) = TopK ( FTS5 ( q ) , K = 10 ) \text{Retrieve}(q) = \text{TopK}(\text{FTS5}(q), K=10) Retrieve(q)=TopK(FTS5(q),K=10)
Summary ( q ) = LLM small ( Retrieve ( q ) , q ) \text{Summary}(q) = \text{LLM}_{\text{small}}(\text{Retrieve}(q), q) Summary(q)=LLMsmall(Retrieve(q),q)
这里使用小模型进行摘要而非大模型,平衡了成本和质量。
九、子代理委派:分而治之
9.1 委派架构
父 Agent (完整上下文)
→ delegate_task
├── 单任务 → 子 Agent (隔离上下文, 独立终端会话, 受限工具集)
└── 批量并行 (最多 3 个) → ThreadPoolExecutor
├── 子 Agent A
├── 子 Agent B
└── 子 Agent C
→ 子代理返回摘要 → 父 Agent
9.2 核心设计原则
- 上下文隔离:每个子 Agent 获得全新对话,不继承父对话历史
- 独立终端 :拥有独立的
task_id(独立终端会话) - 受限工具集:不能递归委派、不能访问共享内存、不能发送消息到其他平台
- 只返回摘要:子代理只返回最终摘要给父 Agent,减少上下文污染
- 最大并发 3 个:硬限制,防止 LLM 注意力分散导致汇总质量下降
9.3 跨进程委派 --- ACP
通过 Agent Communication Protocol (ACP),父 Agent 可以启动 Claude Code、Codex 等外部 Agent 进程作为子代理:
Parent → ACP Child Agent (独立进程) \text{Parent} \xrightarrow{\text{ACP}} \text{Child Agent (独立进程)} ParentACP Child Agent (独立进程)
ACP 的设计目标:
- 语言无关:任何语言的 Agent 都可以实现 ACP 接口
- 进程隔离:子代理崩溃不影响父代理
- 标准化发现:通过注册表自动发现可用 Agent 服务
十、安全架构:四层纵深防御
安全问题在 Hermes Agent 中不是「事后补丁」,而是从架构设计之初就嵌入每一层。
10.1 四层防线
| 层 | 机制 | 关键实现 |
|---|---|---|
| Layer 1: 输入净化 | Prompt Injection 检测(10+ 威胁模式)、不可见字符检测(ZWJ/ZWNJ/BOM)、上下文文件扫描(AGENTS.md, .cursorrules) | 模式匹配 + 正则表达式 |
| Layer 2: 工具级守卫 | 路径安全(防目录遍历)、SSRF 防护、危险命令审批(rm -rf, sudo, iptables)、URL 安全检查 | 工具包装器 |
| Layer 3: 执行边界 | 子代理工具限制、工具调用预算、执行超时(前台 600s,后台可配) | 沙箱 + cgroup |
| Layer 4: 数据保护 | 敏感信息脱敏(API Key/Token/Password)、PII 哈希、凭证文件隔离 | 输出过滤器 |
10.2 Prompt Injection 威胁模式
| 模式 | 类型 | 示例 |
|---|---|---|
ignore previous instructions |
prompt_injection | "Ignore all previous instructions and..." |
do not tell the user |
deception_hide | 试图隐瞒信息 |
| `curl.*${?.*KEY | TOKEN` | exfil_curl |
| `cat.*(.env | credentials)` | read_secrets |
| HTML 隐藏 div | hidden_div | 视觉欺骗攻击 |
十一、安装与搭建
11.1 Linux / macOS / WSL2
bash
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
11.2 Windows(原生 PowerShell)
powershell
iex (irm https://hermes-agent.nousresearch.com/install.ps1)
安装器自动处理依赖:uv、Python 3.11、Node.js、ripgrep、ffmpeg,以及一个便携式 Git Bash (MinGit,解压到 %LOCALAPPDATA%\hermes\git,无需管理员权限,约 45MB)。
11.3 安装后
bash
source ~/.bashrc # 重载 shell(或 source ~/.zshrc)
hermes # 开始对话!
11.4 快速配置(推荐)
bash
hermes setup --portal
这一个命令通过 OAuth 认证自动配置:
- 一个 LLM 模型
- 网页搜索(Web Search)
- 图像生成(Image Generation)
- 文字转语音(TTS)
- 浏览器自动化(Browser)
全部通过 Nous Portal 订阅路由,无需额外账户。
11.5 开发者构建
bash
# 克隆仓库
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
# 自动设置(推荐)
./setup-hermes.sh # 安装 uv,创建 venv,安装 .[all],创建符号链接
# 或手动设置
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv .venv --python 3.11
source .venv/bin/activate
uv pip install -e ".[all,dev]"
# 运行
./hermes # 自动检测 venv,无需先 source
11.6 部署到服务器
最低部署成本:$5/月 VPS
bash
# Docker 部署
docker compose up -d
# 启动消息网关
hermes gateway setup # 配置 Telegram/Discord 等平台
hermes gateway start # 启动网关
11.7 多平台接入
| 操作 | CLI | 消息平台 |
|---|---|---|
| 开始聊天 | hermes |
给机器人发消息 |
| 新对话 | /new 或 /reset |
/new 或 /reset |
| 更换模型 | /model [provider:model] |
/model [provider:model] |
| 中断工作 | Ctrl+C |
/stop |
| 压缩上下文 | /compress |
/compress |
| 浏览技能 | /skills |
/<skill-name> |
十二、效果对比与基准测试
12.1 与 OpenClaw 的深度对比
Hermes Agent 与 OpenClaw 是 2026 年最受关注的两个开源 AI Agent 框架,但设计哲学截然不同。
核心定位对比
| 维度 | OpenClaw | Hermes Agent |
|---|---|---|
| 核心理念 | 配置即行为 | 自主后台 + 自改进 |
| 官方隐喻 | 你养出来的龙虾 | 自己会长大的龙虾 |
| 成长方式 | 靠用户手动配置 | 靠 AI 从经验中学习 |
| 你的角色 | 持续写配置文件 | 部署后偶尔检查 |
Harness Engineering 五组件对比
这是两者最根本的差异:
| Harness 组件 | OpenClaw 方式 | Hermes 方式 |
|---|---|---|
| 指令层 | 手写 CLAUDE.md / AGENTS.md | Skill 系统(AI 自动创建 + 自改进) |
| 约束层 | 配置 hooks / linter / CI | Tool permissions + sandbox + toolset 按需启用 |
| 反馈层 | 人工审查 / 评估者 Agent | 自改进学习循环(自动复盘) |
| 记忆层 | 手动维护 knowledge base | 三层记忆 + Honcho 用户建模 |
| 编排层 | 自建多 Agent pipeline | 子 Agent 委派 + cron 调度 |
关键区别:左列全部需要手动操作,Hermes 右列开箱即用。
使用场景分工
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 写新功能、重构代码 | Claude Code | 需要实时人的判断 |
| 给团队搭标准化 Agent | OpenClaw | SOUL.md 可审计可复制 |
| 7x24 小时代码审查 | Hermes | cron 调度 + GitHub MCP |
| 个人知识助手 | Hermes | 三层记忆越用越懂你 |
| 搭客服 Bot | Hermes | 原生 12+ 平台 Gateway |
| 企业合规(SOC2/HIPAA) | OpenClaw | 行为可预测可审计 |
12.2 GEPA 自我改进性能
| 基准 | 基础方法 | GEPA 优化后 | 提升 |
|---|---|---|---|
| MATH 准确率 | 67%(ChainOfThought) | 93% | +26pp |
| Agent 任务成功率 | 基线 | +6%(平均),+20%(任务级) | --- |
| Rollout 效率 | N 次(GRPO) | N/35 次 | 35倍效率 |
12.3 成本对比
| 指标 | 数据 |
|---|---|
| 最低部署成本 | $5/月 VPS |
| 内存占用 | <500MB(不跑本地 LLM) |
| 反思/优化额外开销 | 约 +15-25% Token |
| 20+ 自创技能的 Agent vs 新实例 | 相似任务完成快 40% |
| 模型切换成本 | 零(不改代码,/model 命令切换) |
12.4 性能数据上下文
重要说明:以下基准测试数据来自 Hermes Agent 所属的 Atropos 评估框架和相关论文,不代表 Hermes Agent 本身的独立分数。Agent 框架的「性能」高度依赖底层的 LLM 模型。
| 基准 | 最佳分数 | 模型 |
|---|---|---|
| SWE-bench Verified | 87.6% | Claude Opus 4.7 |
| Terminal-Bench 2.0 | 82.0% | Claude Mythos Preview |
| YC-Bench(模拟 CEO) | $1,270,000 | Claude Opus 4.6 |
| GLM-5 YC-Bench | $1,210,000(11倍更低推理成本) | GLM-5 |
YC-Bench 初始资金为 $200,000,仅有 3 个模型持续盈利。GLM-5 以 11 倍更低的推理成本达到与 Claude Opus 4.6 相当的性能。
十三、优缺点分析
13.1 优点
-
唯一的闭环学习引擎
- 在 2026 年的 Agent 框架中,Hermes 是唯一内置「创建 → 使用 → 改进 → 再使用」完整学习循环的。其他框架要么没有记忆,要么有记忆但不能自动学习。
-
极致的工程深度
- 238K 行 Python 不是虚胖。每层都有明确的设计目标和精妙的实现细节(AST 预扫描、UTF-16 边界安全、SSRF 防护、迭代式压缩等)。
-
真正的「无锁定」设计
- 支持 12+ LLM 提供商、20+ 平台、8 种记忆后端、6 种终端后端、6,000+ MCP 外部应用。切换提供商只需一条命令,无需改代码。
-
生产就绪的可靠性与安全性
- 四层纵深防御、自动故障转移、优雅降级。这些不是学术演示级别的概念,而是生产系统所需的工程实践。
-
无服务器部署
- Daytona 和 Modal 支持 Agent 在空闲时休眠、按需唤醒,成本几乎为零。对于个人用户的长期助手场景非常实用。
-
MIT 许可证,完全开源
- 无任何商业限制,可自托管、可商用。
13.2 缺点与限制
-
记忆无自动过期机制
~/.hermes/目录会持续增长,缺乏自动清理策略。长期使用后需要手动维护,否则可能积累过时或错误的信息。
-
记忆可能被「污染」
- 早期误记的错误信息会持续影响后续行为。缺乏「记忆纠错」的用户界面,只能通过手动编辑 MEMORY.md 来修复。
-
3 个并发子代理是硬限制
- 超过 3 个子代理后,主 Agent 的汇总质量急剧下降。这是 LLM 注意力分散的固有限制,但缺乏可配置或可扩展的替代方案。
-
技能之间可能冲突
- 当多个技能的触发条件重叠时,结果不一定符合预期。缺乏技能优先级或冲突解决机制。
-
对优秀 LLM 的依赖
- 工具调用、多步推理和技能学习的质量高度依赖底层 LLM 的能力。低质量模型体验会显著下降。
-
学习曲线
- 虽然核心使用很简单(
hermes就启动),但要充分发挥技能系统、记忆系统、cron 调度、子代理委派等全部功能,需要一定时间理解。
- 虽然核心使用很简单(
-
Windows 原生支持有限
- 唯一需要 WSL2 的功能是基于浏览器的仪表板聊天面板(使用 POSIX PTY)。原生 Windows 下部分高级功能不可用。
-
缺乏集中管理面板
- 配置、技能、记忆、调度任务分散在不同命令和文件中,缺乏统一的 Web 管理控制台。
13.3 适用场景总结
| 场景 | 适用度 | 说明 |
|---|---|---|
| 个人长期 AI 助手 | ★★★★★ | 最核心的使用场景 |
| 自动化代码审查 | ★★★★★ | cron + GitHub MCP,无人值守 |
| 多平台客服 Bot | ★★★★★ | 原生 12+ 平台 Gateway |
| 研究数据生成 | ★★★★★ | 轨迹生成 + 压缩,训练工具调用模型 |
| 团队标准化 Agent | ★★★☆☆ | 行为不由人精确控制,不适用合规场景 |
| 实时交互编码 | ★★★☆☆ | Claude Code 更适合 |
| 企业合规审计 | ★★☆☆☆ | 自我进化行为不完全可预测可审计 |
十四、总结与展望
14.1 核心价值
Hermes Agent 的真正价值不在于它是一个「更强大的代码助手」或「支持更多平台的消息机器人」,而在于它回答了 AI Agent 领域一个根本性的问题:
Agent 如何在长期使用中持续变好?
答案是通过技能学习闭环 (从经验中创建技能)、三层记忆系统 (持久化经验)、GEPA 自我改进引擎(理解失败而非盲目试错)三位一体的架构设计,实现「越用越聪明」的效果。
14.2 范式转移
这个项目代表了 Agent 发展路径上的一个重要范式转移:
- 从「工具」到「学徒」:Agent 不再是被动的工具调用器,而是主动的学习者
- 从「人教 Agent」到「Agent 自学,人偶尔纠正」:人的角色从持续配置变成偶尔审查
- 从「无状态函数」到「有记忆的实体」:每次对话不是全新的开始,而是长期关系的延续
14.3 未来演进方向
基于当前架构和社区反馈,Hermes Agent 可能的演进方向包括:
- 分布式技能市场:agentskills.io 正在构建技能注册表,预计将包含 88,000+ 社区技能
- 多 Agent 协作:当前的子代理委派是单向的,未来可能支持双向的 Agent 协商和分工
- 更强的用户建模:Honcho 集成的深化,构建更精确的用户行为模型
- Web 管理面板:统一管理界面,降低运维门槛
- 记忆健康检查:自动检测过期或冲突的记忆,提供清理建议
14.4 一句话总结
Hermes Agent 是 2026 年唯一一个把「学习」作为架构第一原则的 AI Agent 框架------它的代码量(238K 行)不是为了炫耀,而是真正把一个自动进化的智能体所需要的每一层基础设施都做扎实了。
参考资料
- Hermes Agent GitHub 仓库
- Hermes Agent 官方文档
- Hermes Agent 架构深度解剖
- GEPA: Genetic-Pareto Prompt Evolution (ICLR 2026 Oral)
- agentskills.io --- 开放技能标准
- Nous Portal
- Armalo --- Hermes Agent Benchmark Guide
- Atropos --- LLM Reinforcement Learning Environment
本文基于 Hermes Agent v0.16.0(2026 年 6 月 5 日发布)撰写。项目持续快速演进中,最新信息请参考官方文档和 GitHub 仓库。