Hermes Agent 源码解析 — 79K Stars 的自进化 AI Agent 框架
> 一句话版本:Nous Research 开源的超大型 AI Agent 框架,65 万行代码,支持 26 个消息平台、54+ 工具、123 个技能,核心理念是"自进化"——AI 在使用过程中自动创建和改进技能。
| 项目 | 信息 | |
|---|---|---|
| 来源 | https://github.com/nousresearch/hermes-agent | |
| 作者 | Nous Research | |
| 创建时间 | 2025-07-22 | |
| Stars | 79,321 | Forks 10,613 |
| 语言 | Python 3.11+ | |
| 许可证 | MIT | |
| 版本 | v0.8.0 |
核心内容
代码规模(惊人)
| 类别 | 行数 | 文件数 |
|---|---|---|
| Python 业务代码 | ~205,000 | ~300 |
| Python 测试代码 | 180,002 | 552 |
| Markdown 文档 | 198,585 | — |
| HTML/CSS/JS/TS | 10,798 | — |
| **总计** | **~647,000** | 852+ |
最大的文件
| 文件 | 行数 | 职责 |
|---|---|---|
| `run_agent.py` | 10,627 | AIAgent 核心类,对话循环 |
| `cli.py` | 9,956 | 交互式终端界面 |
| `gateway/run.py` | 8,982 | 消息网关主循环 |
| `hermes_cli/main.py` | 6,057 | CLI 入口与子命令 |
| `gateway/platforms/feishu.py` | 3,964 | 飞书平台适配器 |
整体架构
用户入口层: CLI / Gateway(26平台) / ACP(IDE)
↓
AIAgent (run_agent.py:492)
├── Prompt Builder(系统提示词构建 + 注入检测)
├── Context Compressor(有损摘要压缩)
├── Error Classifier(分层错误分类 + 故障转移)
└── Credential Pool(多密钥轮换)
↓
model_tools.py(编排层)
↓
ToolRegistry(注册中心)→ 54+ 工具
↓
支撑层: SQLite+FTS5 | 8种记忆后端 | 123技能 | Cron调度
关键设计亮点
1. 对话主循环 (run_conversation)
预处理 → 系统提示词(缓存) → 上下文压缩 → 工具调用循环(90轮上限)
→ 并行/串行工具分发 → 错误分类重试 → 后处理(记忆/技能/持久化)
2. 并行工具执行
- 按路径作用域隔离:文件操作如果路径不重叠可并行
- 破坏性命令检测:正则匹配
rm -r、git reset --hard等 - 白名单工具(只读类)安全并行,最多 8 个并发
3. 错误分类与故障转移(极其精细)
HTTP状态码 → 错误码分析 → 消息模式匹配 → 传输错误启发式
→ auth_failure(轮换凭证) / rate_limit(backoff) /
context_overflow(压缩) / model_not_found(fallback) /
overloaded(重试)
支持供应商特定处理(Anthropic thinking 签名、OpenRouter 限速头、OpenAI TPM/RPM)。
4. 凭证池轮换
多 API Key 管理,支持 4 种选择策略(Fill-first / Round-robin / Random / Least-used),TTL 疲劳追踪,解析供应商 retry-after 头部。
5. 上下文压缩引擎
保护头部(系统提示)+ 尾部(最近 20K tokens),中间轮次用 LLM 做有损摘要(20% 比例),摘要带特殊前缀明确标记为"参考信息"而非待执行指令。
6. 三层记忆架构
| 层 | 实现 | 用途 |
|---|---|---|
| 会话记忆 | SQLite FTS5 | 全文搜索 + LLM 摘要 |
| 持久记忆 | MEMORY.md / USER.md | Agent 自主维护的笔记 |
| 外部插件 | 8 种后端 | honcho/mem0/全息/retaindb 等 |
7. 危险命令审批系统
~40 个正则 + 150 个关键词匹配,覆盖文件系统、SQL、远程执行、Git 破坏性操作、Shell 炸弹等。CLI 提供 once/session/always/deny 四级审批。
8. Gateway 消息网关
支持 23 个平台:Telegram、Discord、Slack、WhatsApp、Signal、Matrix、微信、企业微信、飞书、钉钉、iMessage、Email、SMS、Home Assistant 等。
9. 技能系统(核心差异化)
- 78 个内置技能 + 45 个可选技能 + Hub 市场
- Agent 可在复杂任务后自动创建新技能
- 技能作为 user 消息注入(非 system prompt),保持 Anthropic 前缀缓存有效
10. 子 Agent 委派
递归深度限制 MAX_DEPTH=2,子 Agent 获得独立迭代预算(50 轮),不能嵌套委派/执行代码/操作记忆,最多 3 个并发。
与 OpenClaw 的对比
| Hermes Agent | OpenClaw | |
|---|---|---|
| Stars | 79K | — |
| 代码量 | ~65 万行 | ~? |
| 平台支持 | 23 个 | Discord/Telegram/飞书等 |
| 工具数 | 54+ | 类似 |
| 技能系统 | 123 个,自动进化 | SKILL.md |
| 记忆系统 | 8 种后端插件 | Memory 文件 |
| 多供应商 | 凭证池轮换 | 配置切换 |
| 上下文压缩 | 有损摘要 | — |
| 危险命令审批 | 4 级审批 | — |
| 代码执行 | 6 种环境 | shell exec |
| 子 Agent | 深度限制委派 | sessions_spawn |
| 定位 | 全功能 Agent 框架 | 个人 Agent + 网关 |
分析
优势:
- 工程量巨大,功能覆盖面极广
- 错误处理极其精细(分层分类 + 多供应商适配)
- 23 个平台适配器,中文平台(飞书、钉钉、微信)覆盖完整
- 技能自进化理念独特
- 凭证池轮换解决多 Key 管理痛点
- 上下文压缩引擎实用(长对话必备)
- 危险命令审批系统周全
风险/不足:
- 代码量过大(65 万行),维护成本极高,3968 个 open issues
- 单文件过大(run_agent.py 万行级),可读性差
- "自进化"技能系统目前主要是模板式创建,真正的 DSPy+GEPA 进化还在路上
- 架构过于通用,缺少聚焦的使用场景
- 测试代码(18 万行)占比高但 open issues 也多,质量存疑
- Gateway 代码高度耦合(单文件近万行)
与 Jay 的关联:
- 直接竞品/参考:Hermes Agent 和 OpenClaw 在功能上有大量重叠(Gateway、工具系统、记忆、技能、子 Agent)
- 可借鉴:错误分类器、凭证池轮换、上下文压缩引擎、危险命令审批
- 飞书适配器:
gateway/platforms/feishu.py有 3964 行,是开源社区中飞书集成最完整的实现之一 - openclaw 出现在 Hermes 的 topics 列表中,说明双方互相参考
评分
| 维度 | 评分 (1-10) | 说明 |
|---|---|---|
| 工程规模 | 10 | 65 万行代码,可能是最大的开源 Agent 框架 |
| 功能覆盖 | 9 | 26 平台 + 54 工具 + 123 技能 + 8 记忆后端 |
| 代码质量 | 6 | 万行单文件、高耦合、3968 open issues |
| 创新性 | 7 | 技能自进化 + 分层错误分类 + 凭证池 |
| 实用性 | 7 | 功能全但学习曲线陡峭 |
| 可维护性 | 4 | 代码量过大,单文件万行级 |
| 与 Jay 的关联 | 9 | OpenClaw 的直接对标项目,大量可借鉴设计 |
| **总分** | **7.4** | 功能最全的开源 Agent 框架,但工程质量是短板 |