Hermes Agent:能从任务中自己"长出"技能的开源本地 Agent
继 OpenClaw 之后再拆解一款 NousResearch 出品的开源本地 Agent 框架,重点剖析它的自学习技能系统和三级记忆架构。
如果说 OpenClaw 解决的是「让 AI 接上你所有的聊天渠道」的问题,那么 Hermes Agent 走向了另一个方向——让 AI 自己从历史任务里学会新技能。
这是 NousResearch 在 2026 年 2 月开源的 Python 框架,发布后短短几个月 GitHub 星标突破 14 万。它最让人印象深刻的设计,是自学习技能系统(self-improving skill system):你每完成一个任务,Hermes 都会尝试从中提炼出可复用的技能,下次直接调用。
一、项目定位
| 项目 | 内容 |
|---|---|
| 名称 | Hermes Agent |
| 出品方 | NousResearch(Hermes 模型家族的开源厂商) |
| 语言 | Python |
| 许可证 | MIT |
| GitHub | NousResearch/hermes-agent |
| 文档 | hermes-agent.readthedocs.io |
| 星标 | 14 万+(2026 年 9 月) |
| 最低运行要求 | $5 VPS 或普通消费级硬件 |
定位上,Hermes 不追求「能接多少聊天软件」,而是追求模型无关、本地优先、能力可积累。它支持 200+ LLM 后端,包括 llama.cpp、vLLM、Transformers 以及任何 Hugging Face 兼容模型。
二、最具差异化的设计:自学习技能系统
这是 Hermes 区别于几乎所有其他 Agent 框架的关键能力。
传统 Agent 的工作流
flowchart LR
U["用户任务"] --> A["Agent"]
A --> L["LLM 推理"]
L --> T["调用工具"]
T --> R["返回结果"]
R --> U
classDef node fill:#1e293b,stroke:#00D4FF,color:#e2e8f0
class U,A,L,T,R node
每次都是「重新推理 → 调用工具 → 返回」,任务结束一切清零。哪怕你让它做了十次类似的报表分析,第十一次它还是从零开始。
Hermes 的工作流
flowchart LR
U["用户任务"] --> A["Agent"]
A --> L["LLM 推理"]
L --> T["调用工具"]
T --> R["返回结果"]
R --> S{"能提炼为技能?"}
S -->|"是"| SK["写入技能库<br/>(skills/*.md)"]
S -->|"否"| U
SK --> N["下次直接调用"]
N -.-> U
classDef node fill:#1e293b,stroke:#00D4FF,color:#e2e8f0
classDef learn fill:#064e3b,stroke:#10b981,color:#e2e8f0
class U,A,L,T,R,N node
class S,SK learn
核心循环:每完成一个任务,Hermes 会自动分析:
- 这个任务有哪些可复用的步骤?
- 有没有可以抽象成「技能」的子流程?
- 如果有,就把它写成 Markdown 技能卡片存进
skills/目录。
下次遇到类似任务,技能会被直接检索出来拼进 prompt,而不是让 LLM 重新摸索。
技能卡片的格式
技能本质上是结构化的 Markdown:
---
name: convert-csv-to-summary
triggers:
- "汇总 CSV"
- "分析表格数据"
description: 读取 CSV 文件,输出关键统计摘要
---
# 步骤
1. 用 pandas 读取文件
2. 计算每列的均值、中位数、缺失值数量
3. 用自然语言生成摘要
# 代码模板
```python
import pandas as pd
df = pd.read_csv(path)
summary = df.describe(include="all")
注意事项
- 大于 100MB 的文件需要分块读取
- 含中文时指定 encoding=‘utf-8-sig’
人类可读、可手写、可用 git 版本管理。这种"刻意保持简单"的取向,和 OpenClaw 的 JSONL 记忆是同一种工程哲学。
---
## 三、三级记忆架构
Hermes 把记忆分成三个层级,分别解决不同时间尺度的问题:
```mermaid
flowchart TD
W["⚡ 工作记忆<br/>(Working)<br/>当前任务的上下文"]
E["📜 情景记忆<br/>(Episodic)<br/>SQLite + FTS5<br/>过去做过的任务"]
S["🎯 技能记忆<br/>(Skills)<br/>Markdown 文件<br/>提炼出的可复用能力"]
W -->|"任务完成"| E
E -->|"模式识别"| S
S -->|"技能检索"| W
classDef working fill:#1e293b,stroke:#00D4FF,color:#e2e8f0
classDef episodic fill:#1e293b,stroke:#8B5CF6,color:#e2e8f0
classDef skill fill:#064e3b,stroke:#10b981,color:#e2e8f0
class W working
class E episodic
class S skill
| 层级 | 存储 | 时长 | 检索方式 |
|---|---|---|---|
| 工作记忆 | 内存中的对话历史 | 当前会话 | 直接拼接 |
| 情景记忆 | SQLite + FTS5 全文检索 | 跨会话 | 关键词 + 时间衰减 |
| 技能记忆 | Markdown 文件 | 永久 | 语义匹配 + trigger 触发词 |
这里有一个很容易被忽视的设计点:技能记忆是单向流入。情景记忆(你做过的事)通过模式识别提炼为技能记忆(你会做的事),但技能记忆不会被自动反向修改。这种单向性避免了”学到的错误技能污染未来推理”的问题。
四、整体架构
Hermes 把系统拆成四个核心组件(参考官方 Wiki):
flowchart LR
LLM["🧠 LLM 驱动层<br/>(模型无关)"]
PLAN["📋 规划/推理控制器"]
TOOL["⚙️ 工具执行沙箱"]
MEM["💾 记忆存储"]
PLAN --> LLM
LLM --> PLAN
PLAN --> TOOL
TOOL --> PLAN
PLAN --> MEM
MEM --> PLAN
classDef core fill:#1e293b,stroke:#00D4FF,color:#e2e8f0
class LLM,PLAN,TOOL,MEM core
- LLM 驱动层 - 通过统一接口适配 200+ 后端,本地云端都能跑
- 规划/推理控制器 - ReAct 风格的思考循环,决定下一步做什么
- 工具执行沙箱 - 受限环境执行工具调用,避免越权
- 记忆存储 - 三级记忆的统一接口
这种解耦让 Hermes 的扩展点非常清晰:换模型不动其它、改工具不动 prompt、加记忆类型有标准接口。
五、与 OpenClaw 的对比
既然已经拆过 OpenClaw,就直接做个对比:
| 维度 | OpenClaw | Hermes Agent |
|---|---|---|
| 主语言 | TypeScript | Python |
| 核心定位 | 跨平台消息网关 | 自学习的本地大脑 |
| 通信集成 | ✅ 10+(WhatsApp/Telegram/Slack…) | ❌ |
| 浏览器操控 | ✅ 语义快照 | ❌ |
| 记忆系统 | JSONL + Markdown | SQLite FTS5 + 三级记忆 |
| 技能自学习 | ❌ | ✅ 核心特性 |
| LLM 支持 | 10+ | 200+ |
| 本地化程度 | 本地优先 | 完全离线可运行 |
| 工具沙箱 | Allowlist + 配对审批 | Python 沙箱 |
| 学习曲线 | 中等(需懂 Node.js + 配置) | 低(API 极简) |
一句话总结:OpenClaw 是「会说话的 AI 管家」,Hermes 是「会成长的 AI 学徒」。
如果你的需求是「让 AI 接上你所有的聊天渠道去执行任务」,选 OpenClaw;如果你想要的是一个越用越懂你的本地 AI 助手,选 Hermes。
六、快速上手
最简安装:
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
pip install -e .
hermes init # 初始化配置
hermes run --model llama.cpp --model-path ~/models/qwen3-8b.gguf
Python API 也非常直观:
from hermes import Agent, Tool
# 注册一个自定义工具
@Tool.register
def search_files(pattern: str) -> list[str]:
"""在当前工作目录递归搜索匹配的文件"""
import glob
return glob.glob(f"**/{pattern}", recursive=True)
agent = Agent(
model="llama.cpp",
memory_path="./hermes_memory.db",
skills_path="./skills",
)
result = agent.run("找出项目里所有 .py 文件,统计每个文件的行数")
print(result)
第一次运行会建立记忆库;多次类似任务后,Hermes 会自动生成 skills/count-file-lines.md 这样的技能卡片。
七、局限与思考
Hermes 也并非银弹,几个值得注意的点:
- 技能质量参差不齐 - 自动提炼的技能可能包含错误模式,需要人工 review
- 本地模型质量瓶颈 - 技能提炼依赖 LLM 自身的推理能力,小模型表现明显下降
- 没有跨平台通道 - 不像 OpenClaw 那样直接对接聊天软件,需要自己写接入层
- 技能库会膨胀 - 没有遗忘机制,长期使用后
skills/目录可能积累大量重复技能
但 Hermes 的真正价值不在于它现在有多完美,而在于它提出了一种新的 Agent 演化路径:
不追求更大、更强,而是让 Agent 在使用过程中持续自我增强。
八、总结
| 优点 | 缺点 |
|---|---|
| 模型无关,本地优先 | 无内置通信渠道集成 |
| 自学习技能系统是杀手锏 | 技能质量需要人工把关 |
| 三级记忆清晰、可解释 | 长期使用技能库会膨胀 |
| Python API 极简,学习成本低 | 不擅长浏览器操控 |
| MIT 协议,可商用 | 小模型下技能提炼能力弱 |
如果你对「让 AI 越用越聪明」这件事感兴趣,Hermes Agent 是目前开源世界里最值得尝试的方向之一。
下一篇预告:横向对比 IronClaw / Hermes / Osaurus,看隐私优先、本地优先、Mac 原生三条路线的取舍。
参考资料:NousResearch/hermes-agent GitHub · Hermes Agent 官方文档 · Architecture Overview Wiki · Hermes vs LangChain 对比