🔬 Hermes Agent 架构深度解析

从 Agent Loop 的运作机制,到工具调用链路、MCP 扩展、Skills 系统与沙箱安全,全面理解这个开源 AI Agent 框架的设计哲学。

架构原理 工具调用 MCP 协议 Skills 系统 沙箱安全

🚀 1. 安装与初始化

Hermes Agent 通过 Shell 脚本一键安装,支持 Linux、macOS、WSL2 和 Android(Termux):

bash
# 一键安装(自动配置 Python 3.11, Node.js v22, ripgrep, ffmpeg)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# 重载 Shell 配置(安装后必须执行)
source ~/.bashrc   # zsh 用户改为 ~/.zshrc

# 验证安装
hermes --version
hermes doctor
💡 安装原理:脚本会将 Hermes 二进制文件安装到 ~/.local/bin/,并在 Shell 配置文件中添加 PATH。配置目录为 ~/.hermes/,包含 .env(密钥)和 config.yaml(配置)两个核心文件。

首次配置向导

安装后运行 hermes setup 进入交互式配置向导,或直接运行 hermes model 选择 AI 提供商。配置完成后即可启动:

bash
hermes        # 经典 CLI 模式
hermes --tui  # 现代 TUI 模式(推荐,有更好的多行编辑体验)

🏗️ 2. 整体架构

Hermes Agent 的整体架构分为三层:接入层(Gateway)核心层(Agent Core)执行层(Tool Runtime)

接入层 Gateway
CLI / TUI Telegram Discord Slack Email
↓ 消息标准化
核心层 Agent Core
上下文管理 Agent Loop Skills Cron Tasks
↓ 工具调用 / 模型推理
执行层 Tool Runtime
Terminal File I/O Web Search MCP Servers Docker / SSH 沙箱

Agent Loop 运作机制

Agent Loop 是 Hermes 的核心执行引擎,每一轮对话都经历以下完整循环:

📥
感知输入
接收用户消息,附加到上下文
🧠
模型推理
发送完整上下文给 LLM
🔀
解析意图
工具调用 or 直接回复?
📤
输出响应
返回最终文本给用户
↓ 工具调用
👁️
观察结果
tool_result 追加到上下文
⚙️
执行工具
在 Tool Runtime 中执行
↑ 继续推理
  1. 感知输入:接收用户消息,附加到对话上下文
  2. 模型推理:将完整上下文发送给 LLM,获取响应
  3. 解析意图:判断响应是直接回复还是工具调用请求
  4. 执行工具:若有工具调用,在 Tool Runtime 中执行
  5. 观察结果:将工具执行结果作为 tool_result 追加到上下文
  6. 继续推理:带着工具结果再次调用模型,直到无工具调用为止
  7. 输出响应:将最终文本响应返回给用户
🔍 设计洞察:这种 ReAct(Reasoning + Acting)模式让 Agent 能够将复杂任务分解为多步工具调用,每步都能观察结果并调整策略。Hermes 的 Loop 没有硬编码的步骤上限,而是依赖模型自身判断何时停止。

上下文管理策略

Hermes 要求模型上下文窗口至少 64K tokens,这是因为 Agent 需要在上下文中保存:系统提示、工具定义、完整对话历史、工具调用结果。

⚠️ 为什么是 64K?工具调用结果(尤其是终端输出、文件内容)可能非常长。64K 的最低要求确保 Agent 在处理中等复杂任务时不会因上下文溢出而截断关键信息。对于复杂的多步任务,建议使用 128K+ 的模型。

🧠 3. 模型提供商深度解析

运行 hermes model 进入交互式选择界面。不同提供商在工具调用能力、上下文长度、价格上差异显著:

提供商推荐模型上下文工具调用适用场景
Nous PortalHermes 系列128K 原生优化 新手首选,摩擦最小
AnthropicClaude Opus/Sonnet200K 极强 复杂推理、长文档处理
OpenAIGPT-4o128K 成熟稳定 代码生成、工具调用
DeepSeekDeepSeek-V364K 良好 性价比高,中文场景
OpenRouter任意模型取决于模型 取决于模型 多模型路由,灵活切换
OllamaQwen2.5/Llama3需手动设置 需要支持 FC 的模型 完全本地,隐私优先
💡 Ollama 注意事项:本地模型必须支持 Function Calling(工具调用),且需手动设置 --ctx-size 65536。推荐使用 Qwen2.5-7B-Instruct 或 Llama-3.1-8B-Instruct,这两个模型的工具调用能力相对可靠。

🔧 4. 工具调用机制

Hermes 的工具调用遵循 OpenAI Function Calling 格式。模型在响应中输出结构化的工具调用请求,Hermes 解析后在 Tool Runtime 中执行,再将结果返回给模型。

内置工具集

  • terminal:执行 Shell 命令,支持交互式和非交互式模式
  • read_file / write_file:文件读写,支持大文件分块处理
  • web_search:网络搜索,返回结构化结果
  • web_fetch:抓取指定 URL 的页面内容
  • list_directory:目录结构查看

工具调用的完整链路

json
// 1. 模型输出工具调用请求
{
  "tool_calls": [{
    "function": {
      "name": "terminal",
      "arguments": { "command": "ls -la" }
    }
  }]
}

// 2. Hermes 执行工具,获取结果
// 3. 将结果作为 tool_result 追加到上下文
{
  "role": "tool",
  "content": "total 48\ndrwxr-xr-x ..."
}

MCP 协议与工具扩展

Model Context Protocol(MCP)是 Anthropic 提出的开放标准,允许 Agent 通过统一接口接入外部工具服务。Hermes 原生支持 MCP,可以接入任何兼容 MCP 的服务器。

yaml
# ~/.hermes/config.yaml 中配置 MCP 服务器
mcp_servers:
  github:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxx"
  filesystem:
    command: npx
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
🔍 MCP 的价值:MCP 将工具定义与 Agent 实现解耦。工具提供方只需实现 MCP Server,任何支持 MCP 的 Agent(不只是 Hermes)都能接入。这是 AI 工具生态标准化的重要一步。

⚡ 5. Skills 系统深度解析

Skills 是 Hermes 的插件系统,本质上是一组预定义的工作流指令和工具配置,安装后会注入到 Agent 的系统提示中,赋予 Agent 特定领域的专项能力。

Skills 的工作原理

每个 Skill 包含:系统提示扩展(告诉模型如何处理特定任务)、工具配置(启用或限制特定工具)、工作流模板(预定义的任务执行步骤)。

bash
# 搜索可用 Skills
hermes skills search kubernetes

# 安装 Skill
hermes skills install openai/skills/k8s

# 查看已安装的 Skills
hermes skills list

# 在对话中激活特定 Skill
hermes --skill k8s

自定义 Skill 开发

Skills 以 YAML 格式定义,存放在 ~/.hermes/skills/ 目录下:

yaml
# ~/.hermes/skills/my-skill/skill.yaml
name: my-skill
description: 我的自定义技能
system_prompt: |
  你是一个专注于 XXX 的专家助手。
  当用户提到 XXX 时,你应该...
tools:
  enabled: [terminal, web_search]
  disabled: []

🔄 6. 定时任务(Cron Tasks)

Hermes 内置 Cron 调度器,支持标准 cron 表达式,让 Agent 在无人值守时自动执行周期性任务。

yaml
# 在 config.yaml 中配置定时任务
cron_tasks:
  - name: daily-report
    schedule: "0 9 * * *"   # 每天早 9 点
    prompt: "生成今日工作计划摘要并发送到 Telegram"
    gateway: telegram
  - name: weekly-cleanup
    schedule: "0 2 * * 0"   # 每周日凌晨 2 点
    prompt: "清理 /tmp 目录下超过 7 天的文件"
💡 Cron + Gateway 组合:将定时任务与 Gateway 结合,可以实现"定时推送到 Telegram 群"的效果,无需任何额外开发,只需配置 prompt 和目标 gateway 即可。

🛡️ 7. 沙箱安全机制

Hermes 支持两种执行环境隔离方式,防止 Agent 的工具调用(尤其是终端命令)影响宿主机:

Docker 容器隔离

bash
# 配置 Docker 沙箱
hermes config set terminal.backend docker
hermes config set terminal.docker_image ubuntu:22.04

# 可选:挂载特定目录到容器
hermes config set terminal.docker_volumes /workspace:/workspace

SSH 远程服务器

bash
# 配置 SSH 远程执行
hermes config set terminal.backend ssh
hermes config set terminal.ssh_host user@your-server.com
hermes config set terminal.ssh_key ~/.ssh/id_rsa
🔍 安全设计哲学:Hermes 默认在本地执行,这对开发调试很方便。生产环境或多用户场景下,强烈建议启用 Docker 或 SSH 隔离。SSH 模式还能让 Agent 直接操作远程服务器,是运维自动化的理想方案。

⚙️ 8. 配置体系详解

Hermes 将配置分为两类,安全隔离:

  • ~/.hermes/.env:存放 API Key、Token 等敏感信息,不应提交到版本控制
  • ~/.hermes/config.yaml:存放模型选择、工具配置、MCP 服务器等普通配置

常用配置项速查

bash
# 模型配置
hermes config set model anthropic/claude-opus-4.6
hermes config set ANTHROPIC_API_KEY sk-ant-xxx

# 工具配置
hermes config set tools.web_search.enabled true
hermes config set tools.terminal.enabled true

# 沙箱配置
hermes config set terminal.backend docker

# 查看所有配置
hermes config list

# 切换 Profile(多场景配置)
hermes --profile work

🔧 9. 诊断排错

诊断工具包

bash
hermes doctor          # 自动诊断配置问题
hermes model           # 重新选择模型
hermes setup           # 完整配置向导
hermes sessions list   # 查看所有历史会话
hermes --continue      # 恢复上次会话
hermes gateway status  # 查看 Gateway 运行状态

常见问题根因分析

现象根因解决方案
启动后回复为空API Key 无效或模型名称错误重新运行 hermes model
工具调用无响应模型不支持 Function Calling切换到支持 FC 的模型
上下文截断模型上下文窗口不足 64K切换到更大上下文的模型
Gateway 收不到消息Bot Token 错误或白名单未配置重新运行 hermes gateway setup
Docker 沙箱启动失败Docker 未安装或权限不足检查 Docker 服务状态

Hermes Agent 原理与架构 - 常见问题

深入了解 Hermes Agent 的设计原理

Hermes Agent 是一个开源 AI Agent 框架,采用 ReAct(Reasoning + Acting)模式,通过 Agent Loop 实现多步推理和工具调用。本文从架构设计、工具调用链路、MCP 扩展、Skills 系统到沙箱安全机制进行全面解析。

Hermes Agent 的 Agent Loop 是如何运作的?

Agent Loop 是 Hermes 的核心执行引擎,遵循"感知输入 - 模型推理 - 解析意图 - 执行工具 - 观察结果 - 继续推理"的循环流程。模型判断是否需要调用工具,若需要则在 Tool Runtime 中执行并将结果反馈给模型,直到无需更多工具调用时输出最终响应。

Hermes Agent 支持哪些模型提供商?

Hermes 支持 Nous Portal、Anthropic(Claude)、OpenAI(GPT-4o)、DeepSeek、OpenRouter 以及本地 Ollama 等多种模型提供商。不同提供商在工具调用能力、上下文长度和价格上各有差异,可通过 hermes model 命令交互式选择。

什么是 MCP 协议?Hermes 如何使用 MCP?

MCP(Model Context Protocol)是 Anthropic 提出的开放标准,允许 Agent 通过统一接口接入外部工具服务。Hermes 原生支持 MCP,可在 config.yaml 中配置 MCP 服务器,接入 GitHub、文件系统等各类工具服务,实现工具生态的标准化扩展。

Hermes Agent 的 Skills 系统如何工作?

Skills 是 Hermes 的插件系统,包含系统提示扩展、工具配置和工作流模板。安装 Skill 后会注入到 Agent 的系统提示中,赋予其特定领域的专项能力。用户也可以通过 YAML 格式自定义开发 Skill。

Hermes Agent 的沙箱安全机制有哪些?

Hermes 提供 Docker 容器隔离和 SSH 远程服务器两种沙箱方案。Docker 模式在本地容器中执行命令,SSH 模式将命令发送到远程服务器执行,两者都能防止 Agent 工具调用对宿主机造成影响。

相关工具推荐