Hermes Agent 核心流程分析

项目定位

Hermes Agent 是由 Nous Research 构建的自改进型 AI Agent 框架(Self-Improving AI Agent),MIT 协议开源。它是一个集 CLI、Gateway(多平台消息网关)、工具调用、技能系统和记忆管理于一体的全栈 Python 项目。核心理念:Agent 不仅能执行任务,还能自我改进——通过 Curator 后台进程自动审查和归档技能。


五部分核心组件

Hermes Agent 的核心组件可以分为 5 个部分:

  1. 上下文工程:三层系统提示架构(stable/context/volatile)、ContextCompressor 辅助模型摘要压缩、记忆预取与快照注入、可插拔上下文引擎(支持 LCM 等第三方引擎替换)
  2. 工具/插件系统:90+ 内置工具(终端、浏览器、文件、搜索、MCP)+ 18 个技能分类 + 子代理委托(隔离 AIAgent 实例)+ 懒加载可选依赖(按需 pip install)
  3. 状态持久化:会话轨迹保存、记忆同步回写、Curator 定期归档过期技能、Gateway 多平台 session 管理
  4. 权限/安全模型:依赖精确锁定(==X.Y.Z 防供应链攻击)+ 懒加载减少攻击面 + 凭证池轮换 + 错误分类智能恢复链
  5. 可观测性和审计:Gateway 统一生命周期管理(Telegram/Discord/Slack/WhatsApp/Signal/微信/飞书/钉钉/QQ Bot)、流式事件推送、多平台消息分发

一次完整请求流程

用户通过 CLI(hermes)、API(hermes-agent)或 ACP 协议(hermes-acp)发起请求。

第一步:构建系统提示词。 agent/system_prompt.py 分三层组装:stable tier(SOUL.md/DEFAULT_AGENT_IDENTITY + 工具指导 + skills prompt,缓存不变以保持上游 prefix cache 热度)、context tier(AGENTS.md/.cursorrules 等上下文文件)、volatile tier(记忆快照、USER.md、时间戳,每次重建)。三层设计让 KV Cache 命中率最大化——stable 层不变,只在上下文压缩时重建。

第二步:记忆预取。 agent/memory_manager.py 从记忆存储中预取相关记忆,注入系统提示词的 volatile tier。

第三步:模型调用。 agent/chat_completion_helpers.py 支持 30+ 模型提供商,流式 + 非流式双路径。agent/error_classifier.py 定义了 20+ 种错误分类(FailoverReason 枚举),实现智能恢复链:API 错误分类 → 重试/凭证轮换/回退模型。

第四步:工具调用分发。 agent/tool_executor.py 支持顺序执行和并发执行(最多 8 个并行 worker)。每个工具调用前过 guardrails 安全检查。90+ 内置工具覆盖终端、浏览器、文件编辑、搜索、MCP 协议等。

第五步:子代理委托(可选)。 tools/delegate_tool.py 支持生成隔离的子 AIAgent 实例,带受限工具集。父代理只看到摘要结果,不接触子代理的完整执行过程。

第六步:上下文压缩。 agent/context_compressor.py 使用辅助模型对中间轮次进行摘要压缩。当上下文接近窗口限制时触发,将历史轮次压缩为摘要,保留最近的原始消息。

第七步:技能系统。 18 个内置技能分类(软件开发、社交媒体、研究、邮件、GitHub 等),兼容 agentskills.io 开放标准。技能是带 SKILL.md 描述文件的包,Agent 按需加载和调用。

第八步:后处理。 记忆同步回写 → 会话轨迹保存 → Curator 触发(后台进程定期审查 agent 创建/修改的技能,自动归档过期技能)。


关键设计决策

1. 依赖精确锁定。 pyproject.toml 中所有核心依赖使用 ==X.Y.Z 精确版本,防止供应链攻击。这是 2026-05-12 针对 Mini Shai-Hulud 蠕虫(mistralai 2.4.6 恶意版本)的应对措施。

2. 懒加载可选依赖。 Provider 特定包(anthropic、firecrawl、fal 等)、消息平台包、TTS/STT 后端均不在核心依赖中,首次使用时才 pip install。减小供应链攻击面。

3. 三层系统提示架构。 stable 层缓存不变以保持上游 prefix cache 热度,只在上下文压缩时重建。这是 KV Cache 优化的关键——每次请求的 stable 部分相同,模型可以复用已计算的 KV 值。

4. 可插拔上下文引擎。 agent/context_engine.py 定义抽象基类,默认使用内置 ContextCompressor,支持第三方引擎(如 LCM)通过插件系统替换。

5. 凭证池与故障转移。 agent/credential_pool.py + agent/error_classifier.py 实现智能恢复链:API 错误分类(20+ 种 FailoverReason)→ 重试/凭证轮换/回退模型。不是简单重试,而是根据错误类型选择不同恢复策略。

6. 终端后端抽象。 支持 6 种终端后端:local、Docker、SSH、Singularity、Modal、Daytona。Modal 和 Daytona 提供 serverless 持久化——空闲时休眠,按需唤醒。

7. Curator 自改进。 后台进程定期审查 agent 创建/修改的技能,自动归档过期技能。这是”自改进型 Agent”的核心——Agent 在使用中不断优化自己的技能库。

8. 子代理隔离。 子代理是独立的 AIAgent 实例,带受限工具集。父代理只看到摘要结果。这比简单工具调用更安全——子代理的完整执行过程对父代理不可见,减少提示词注入风险。

9. 跨平台 UTF-8 引导。 hermes_bootstrap.py 在所有入口点最顶部导入,在 Windows 上强制 UTF-8 模式,解决 Windows 控制台编码问题。

10. Gateway 多平台统一。 从 Telegram、Discord、Slack、WhatsApp、Signal 到微信、飞书、钉钉、QQ Bot,所有平台共享同一套 session 管理、消息分发和流式消费逻辑。