Hermes Agent 整体架构详解:AI Agent、Memory、Skills、MCP、工具调用、自我改进闭环全解析

0 阅读14分钟

**开篇先说结论:**很多人理解 AI Agent,容易只盯着大模型本身:GPT、 Claude 、Gemini、开源模型谁更强?但看 Hermes Agent 的官方文档和 GitHub 会发现,真正让 Agent 能长期工作的,不只是模型,而是模型外面那套工程系统:上下文、工具、记忆、技能、会话、自动化、安全和部署。

Hermes Agent 更像一个“长期在线的 AI 工作系统”,而不是一个只会聊天的网页机器人。它可以运行在本地、服务器、云沙箱,也可以通过 CLI、Telegram、Discord、Slack、API、Cron 等入口接收任务;同时,它还会把经验沉淀为 Memory 和 Skills ,让后续任务越来越顺手。

一、先用一句话说清楚:Hermes Agent 到底是什么

Hermes Agent 官方介绍把它称为一个 self-improving AI agent,也就是“会随着使用持续改进的智能体”。它的关键点不是单次对话有多聪明,而是长期运行以后,能够沉淀用户偏好、项目经验、可复用技能,并把这些东西带入后续任务。

按照官方文档和 GitHub README 的描述,Hermes Agent 的能力关键词主要有:内置学习闭环、跨会话记忆、技能创建与改进、多平台消息入口、定时自动化、子 Agent 并行、工具调用、终端后端、轨迹导出和训练数据生成。

所以更准确地说,Hermes Agent 不是“一个模型”,而是“一个围绕模型构建的 Agent 运行系统”。模型负责理解与决策,Hermes 负责把任务变成可执行流程:读上下文、选模型、调用工具、保存结果、压缩会话、管理技能、控制风险。

对比项

普通聊天机器人

Hermes Agent

运行方式

一次性问答,主要依赖当前上下文

可长期运行,支持 CLI、消息平台、API、Cron 等入口

执行能力

通常只生成文本建议

可以调用终端、文件、浏览器、MCP、子 Agent 等工具

记忆方式

多数依赖当前会话或简单偏好

Memory、Session Search、Skills、Context Files 分层沉淀

项目理解

需要用户反复解释背景

可读取 AGENTS.md、.hermes.md、SOUL.md 等上下文文件

生产化能力

通常缺少安全边界和运行控制

有审批、沙箱、凭证过滤、压缩、fallback、会话持久化等机制

二、整体架构:从入口层到长期沉淀层

如果把 Hermes Agent 拆开看,可以分成五层:入口层、核心循环层、能力扩展层、长期沉淀层、安全运行层。这个分层很适合用来理解所有现代 Agent 系统。

层级

代表模块

核心职责

你可以怎么理解

入口层

CLI、Gateway、API Server、ACP、Batch Runner、Cron

接收不同来源的任务,把消息路由到同一个 Agent 运行时

像前台窗口:你可以从命令行、聊天软件、编辑器、定时任务进入

核心循环层

AIAgent / run_agent.py

负责模型调用、工具调用、重试、fallback、压缩、持久化

像大脑和调度中心:决定下一步做什么

能力扩展层

Tools、MCP、Plugins、Subagents

把“想法”变成真实动作:读写文件、跑命令、搜网页、调用外部系统

像手脚和外接设备

长期沉淀层

Memory、Sessions、Skills、Context Files

保存事实、历史和可复用流程,让 Agent 越用越顺

像笔记本、档案馆和操作手册

安全运行层

授权、审批、沙箱、扫描、回滚、隔离

降低 Agent 执行真实动作时的风险

像刹车、护栏和审计系统

从官方 Architecture 页面看,AIAgent 是同步编排引擎,负责 provider selection、prompt construction、tool execution、retries、fallback、callbacks、compression 和 persistence。也就是说,Hermes 的核心不是“发一次请求给模型”,而是把一次任务组织成可观察、可恢复、可限制的执行过程。

三、入口层:为什么 Hermes 不只是本地命令行工具

很多 Agent 工具都绑定在本地 IDE 或网页聊天窗口里,但 Hermes 的定位更偏“长期在线的工作伙伴”。官方文档列出它支持 CLI、Telegram、Discord、Slack、WhatsApp、Signal、Matrix、Mattermost、Email、SMS、DingTalk、Feishu、WeCom、Home Assistant、Microsoft Teams、Google Chat 等入口。

这种设计有一个很大的架构意义:入口不再决定 Agent 的能力。你在 Telegram 上发一句“帮我检查昨晚的定时任务是否失败”,背后仍然可以走同一套 AIAgent、工具系统、Session、Memory 和 Cron。

对企业项目来说,这种架构很重要。因为真实业务不会只有一个入口:研发可能从 IDE 发起,运营可能从 Slack 发起,老板可能从手机聊天软件发起,定时巡检可能由 Cron 发起。如果每个入口都各写一套 Agent 逻辑,系统很快会失控。Hermes 的 Gateway 思路,是把入口统一到一个长期运行的 Agent 进程。

四、核心层:Agent Loop 如何驱动一次任务

理解 Hermes Agent,最关键的是理解 Agent Loop。所谓 Agent Loop,不是神秘概念,就是一个循环:模型先判断下一步,系统再执行工具,把结果交还给模型,模型再继续判断,直到任务完成或预算耗尽。

一次请求流转图:Agent Loop 负责把自然语言任务拆成可执行动作

官方 Agent Loop 文档把 AIAgent 的职责列得很清楚:组装系统提示词和工具 schema,选择 provider/API mode,执行可中断模型调用,执行工具调用,维护对话历史,处理压缩、重试和 fallback,并跟踪父子 Agent 的迭代预算。

用更通俗的话说,Hermes Agent 每一轮都在做 6 件事:

第一,读入用户任务和当前会话历史;

第二,加载 Memory、Skills、Context Files、工具说明等上下文;

第三,选择合适的模型供应商和 API 模式;

第四,让模型决定是直接回答,还是调用工具;

第五,执行工具,并把结果放回上下文;

第六,如果任务还没结束,就继续循环;如果结束,就保存会话和必要记忆。

机制

作用

为什么重要

Iteration Budget

限制任务最大循环次数

防止 Agent 无限执行、无限花费 token

Fallback Model

主模型失败后切换备用 provider

提升稳定性,避免因为限流或服务异常中断任务

Context Compression

上下文过长时压缩中间过程

让长任务持续推进,同时控制上下文窗口

Callbacks

工具执行、推理状态、流式输出可被观察

让用户知道 Agent 正在干什么,不是黑盒

Session Persistence

每轮后保存消息、工具调用、token 统计等

方便恢复、审计、分析和跨会话检索

五、Prompt 与上下文:Agent 如何理解项目和用户

普通用户觉得 Prompt 就是一句话,但在 Agent 架构里,Prompt 更像“执行任务前的作战手册”。Hermes 的 Prompt Builder 会把多个来源的信息组装进系统提示词,例如 SOUL.md、MEMORY.md、USER.md、Skills、AGENTS.md、.hermes.md、工具使用指导、模型特定指令等。

这里最值得学习的是“分层上下文”的思想。不同信息不应该都塞进一个超长 Prompt,而应该按用途拆开:

上下文来源

保存什么

适合场景

SOUL.md

Agent 的人格、语气、默认工作风格

希望 Agent 长期保持固定表达和工作方式

AGENTS.md

项目结构、代码规范、测试方式、团队约定

让 Agent 进入项目后知道怎么写代码、怎么跑测试

.hermes.md / HERMES.md

项目专属高优先级指令

对当前项目有更强约束时使用

MEMORY.md

环境事实、项目经验、工具坑点

长期有用,不需要每次重新解释的信息

USER.md

用户偏好、沟通风格、期望

让 Agent 更懂用户的默认需求

Skills

可复用流程、操作步骤、验证方法

复杂任务完成后沉淀为“下次照着做”的手册

官方 Context Files 文档还有一个很实用的设计:子目录 AGENTS.md 不是一开始全加载,而是当 Agent 读到对应目录内容时再渐进发现。这样既能减少系统提示词膨胀,又能保持 Prompt Cache 稳定。这个思路非常适合大型代码仓库。

六、 Tools Runtime:从“想做”到“真执行”

Agent 最大的变化,是从“回答问题”变成“执行动作”。但执行动作必须有统一的工具运行时,否则每个工具都变成临时代码,难以维护、难以审计、难以扩展。

Tools Runtime 与 MCP 扩展架构:工具通过注册表统一暴露和派发

官方 Tools Runtime 文档说明,Hermes 工具是自注册函数,按 toolsets 分组,通过中央 registry/dispatch 系统执行。也就是说,每个工具模块在导入时调用 registry.register,把工具名称、所属 toolset、schema、handler、可用性检查等信息登记进去。

这套机制带来的好处是:模型看到的是规范化 tool schema;运行时执行的是受控 handler;用户看到的是可观察工具进度;开发者扩展工具时,不必改一堆手动列表。

工具类别

代表能力

典型用途

Web

web_search、web_extract

联网查资料、抓页面内容

Terminal & Files

terminal、process、read_file、patch

跑测试、改文件、启动进程、读取日志

Browser

browser_navigate、browser_snapshot、browser_vision

网页自动化、浏览器操作、视觉理解

Memory & Recall

memory、session_search

写入长期记忆、检索历史会话

Agent Orchestration

todo、clarify、execute_code、delegate_task

规划任务、澄清需求、执行代码、委派子 Agent

Automation & Delivery

cronjob、send_message

定时任务、消息推送

Integrations

MCP tools、Home Assistant、RL tools

连接外部系统和高级集成

终端后端也是 Hermes 的亮点之一。它支持 local、Docker、SSH、Singularity、Modal、Daytona、Vercel Sandbox 等后端。这意味着 Agent 可以在本机跑,也可以在隔离容器、远程服务器、云沙箱中跑。对于能改代码、能执行命令的 Agent 来说,后端隔离不是可选项,而是基础设施。

七、MCP:把外部系统接成 Agent 工具

MCP 可以理解成 Agent 的“外部工具插座”。如果你想让 Hermes 使用 GitHub、数据库、文件系统、浏览器栈、内部 API,不一定要把这些能力写成 Hermes 原生工具,而是可以通过 MCP Server 暴露出来。

官方 MCP 文档说明,Hermes 支持本地 stdio server,也支持远程 HTTP MCP server;启动时可以自动发现并注册 MCP 工具,还能按 server 过滤,只暴露希望 Agent 使用的能力。

接入方式

适合场景

架构意义

stdio MCP Server

本地工具、文件系统、开发机能力、低延迟调用

Hermes 启动子进程,通过 stdin/stdout 交互

HTTP MCP Server

企业内部 API、远程工具服务、集中式能力平台

Hermes 通过 HTTP 连接外部服务,不需要本地启动工具

Per-server Filtering

只开放部分工具给 Agent

控制权限边界,避免 Agent 拿到过大的工具面

对企业来说,MCP 的价值很大。你不需要把“查订单、查工单、查客户、查知识库、发审批、查库存”全部硬编码进 Agent 主工程,而是把它们包装成 MCP Server。Hermes 只负责发现工具、展示 schema、派发调用和接收结果。

八、Memory、Session、Skills:长期智能体的三套记忆系统

Hermes Agent 的“自我改进”不应该被误解成每次都重新训练模型。更实际的理解是:它通过 Memory、Session Search、Skills 和外部 memory providers,在运行时持续积累可复用信息。

Memory 适合保存长期事实,例如用户偏好、机器环境、项目约定、工具坑点。官方文档显示,Hermes 有 MEMORY.md 和 USER.md 两类文件,存放在 ~/.hermes/memories/,并在 session 启动时注入系统提示词。Memory 有字符限制,目的就是防止无节制膨胀。

Session 适合保存完整过程。每次对话无论来自 CLI 还是消息平台,都会保存为 session。官方 Sessions 文档说明,Hermes 使用 SQLite state.db 保存结构化元数据和 FTS5 搜索,同时用 JSONL transcripts 保存原始会话记录和工具调用。

Skills 适合保存可复用流程。官方 Skills 文档说,Skills 是按需加载的知识文档,遵循 progressive disclosure 模式。它不是每次都把完整内容塞进 Prompt,而是先列出技能,再在需要时加载具体技能,必要时再加载引用文件。

模块

主要保存

是否每次进入 Prompt

最佳用途

Memory

事实、偏好、环境、约定

Session 启动时进入系统提示词

长期稳定、经常用到的信息

Session

历史消息、工具调用、结果、token 统计

不是全部重复发送;按需恢复或检索

复盘、恢复、跨会话回忆

Skills

流程、步骤、坑点、验证方法

按需加载

把复杂任务沉淀成可复用方法论

这三者的边界非常重要:Memory 不是垃圾桶,不要把所有日志都塞进去;Session 不是 Prompt,不应该无限重发;Skills 也不是知识库全文,而是“做某类任务的操作说明书”。

九、安全架构:能执行动作的 Agent 必须有边界

如果一个 Agent 只能聊天,风险相对可控;但如果它能跑命令、改文件、调用数据库、访问企业系统,就必须先建立安全边界。Hermes 官方 Security 文档把安全模型拆成多层:用户授权、危险命令审批、容器隔离、MCP 凭证过滤、Context 文件扫描、跨 Session 隔离和输入净化。

危险命令审批是最直观的一层。Hermes 在执行命令前,会检查是否命中危险模式;如果命中,默认需要用户手动确认。它也提供 smart 模式,让辅助模型判断风险,但真正危险或不确定的情况仍会升级。

容器隔离则是工程上更重要的一层。终端后端可以用 Docker、Singularity、Modal、Daytona、Vercel Sandbox 等方式把执行环境隔开。这样即使 Agent 需要运行测试、安装依赖、写临时文件,也不会轻易污染宿主环境。

MCP 凭证过滤也很关键。Agent 连接外部工具时,最容易出问题的是凭证范围过大。Hermes 通过环境变量过滤、server 级工具过滤等方式,让外部工具只暴露必要能力。

十、源码阅读路线:从哪些文件入手最清晰

如果你想真正掌握 Hermes Agent,不建议一上来全仓库乱翻。最好的路线是先看主循环,再看 Prompt,再看 Provider,再看 Tools,最后看 Session、Compression、Gateway、Cron 和 ACP。

阅读顺序

文件或模块

你要看懂的问题

1

run_agent.py

AIAgent 如何完成一次完整任务循环?

2

agent/prompt_builder.py

系统 Prompt 由哪些上下文拼出来?

3

runtime_provider.py

模型供应商、API 模式和凭证如何解析?

4

model_tools.py

工具 schema 如何收集,tool call 如何派发?

5

tools/registry.py

工具如何自注册、发现、过滤和执行?

6

hermes_state.py

Session、消息、token、FTS5 搜索如何保存?

7

agent/context_compressor.py

长会话如何压缩,哪些消息必须保留?

8

gateway / cron / acp

多平台入口、定时任务、编辑器集成如何进入同一套 Agent Loop?

看源码时可以带着一个核心问题:每个模块到底是在解决 Agent 工程里的哪类问题?例如,run_agent.py 解决“任务如何循环推进”;prompt_builder.py 解决“模型看到什么上下文”;model_tools.py 解决“模型如何调用工具”;hermes_state.py 解决“执行过程如何保存和恢复”。

十一、总结:Hermes Agent 架构给 AI 应用工程的启发

Hermes Agent 最值得学习的地方,不是某个炫酷命令,而是它把 AI Agent 做成了一个完整工程系统。这个系统有入口、有上下文、有模型路由、有工具、有记忆、有技能、有会话、有自动化、有安全、有部署后端。

如果把它抽象成一句话,就是:

AI Agent = 模型能力 + Harness 工程能力

模型决定“能不能理解任务”,Harness 决定“能不能可靠执行任务”。Hermes Agent 的整体架构,正好展示了一个长期运行 Agent 需要具备哪些工程能力:

要有统一入口,让不同平台的任务进入同一个运行时;

要有 Agent Loop,把模型推理、工具执行、结果回填组织起来;

要有 Prompt Builder,把项目规则、用户偏好、记忆、技能合理装配;

要有 Tools Runtime 和 MCP,让 Agent 真正连接外部世界;

要有 Memory、Sessions、Skills,让经验沉淀下来;

要有安全边界,防止能执行命令的 Agent 失控;

要有压缩、fallback、预算控制、持久化,让长任务可持续、可恢复、可观察。

所以,学习 Hermes Agent 的正确姿势,不是只问“怎么安装”,而是问:它如何把模型变成一个长期运行、可扩展、可沉淀、可控制的智能体系统?只要抓住这条主线,再看官方文档和 GitHub 源码,就不会迷路。