Hermes Agent 产品架构和技术架构分析

42 阅读6分钟

一、产品架构分析

1.1 产品定位

Hermes Agent 是由 Nous Research 开发的自进化 AI 代理,核心特色是具备内置学习循环:

  • 从经验中创建技能
  • 在使用过程中自我改进
  • 主动持久化知识
  • 搜索历史对话
  • 跨会话建立用户模型

1.2 产品核心能力

能力域说明
多端接入CLI、TUI(终端UI)、Telegram、Discord、Slack、WhatsApp、Signal、邮件等
模型无关支持 200+ 模型(OpenAI、Anthropic、Nous Portal、OpenRouter、NVIDIA NIM、HuggingFace 等)
工具生态40+ 内置工具,支持 MCP(Model Context Protocol)扩展
技能系统内置技能 + 可选技能库 + 用户自定义技能(兼容 agentskills.io 标准)
记忆系统持久化记忆、Honcho 用户建模、FTS5 会话搜索
调度系统内置 cron 调度器,支持自然语言配置定时任务
多环境本地、Docker、SSH、Modal、Daytona、Singularity 六种终端后端
研究能力批量轨迹生成、Atropos RL 训练环境、轨迹压缩

1.3 产品架构分层

┌─────────────────────────────────────────────────────────────┐
│                      用户交互层                              │
│  CLI (prompt_toolkit) │ TUI (React/Ink) │ 消息平台 Gateway  │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      Agent 核心层                            │
│  AIAgent (run_agent.py) → 工具调用循环 → 记忆管理           │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      能力扩展层                              │
│  工具系统 (tools/) │ 技能系统 (skills/) │ 插件系统 (plugins/) │
└─────────────────────────────────────────────────────────────┘
                              │
┌─────────────────────────────────────────────────────────────┐
│                      基础设施层                              │
│  SessionDB (SQLite+FTS5) │ 配置系统 │ 日志系统 │ Profiles  │
└─────────────────────────────────────────────────────────────┘

二、技术架构分析

2.1 技术栈

层面技术
后端Python 3.11+,核心框架:OpenAI SDK、Anthropic SDK、Pydantic、Rich、Jinja2
前端 (TUI)TypeScript + React (Ink)、Node.js
消息 GatewayPython asyncio、python-telegram-bot、discord.py、aiohttp
数据存储SQLite (FTS5 全文搜索)
进程通信 (TUI)stdio JSON-RPC
依赖管理uv (Python)、npm (TypeScript)
测试pytest (Python)、vitest (TypeScript)

2.2 核心模块架构

hermes-agent/
├── run_agent.py           AI Agent 核心循环 (~12k LOC)
├── cli.py                 CLI 交互编排 (~11k LOC)
├── model_tools.py         工具编排 & 调度
├── toolsets.py            工具集定义
├── agent/                 Agent 内部(提供商适配记忆缓存压缩)
├── tools/                 工具实现(自动发现 via registry)
   └── environments/      终端后端(local/docker/ssh/modal/daytona)
├── gateway/               消息网关
   └── platforms/         各平台适配器(15+ 平台)
├── hermes_cli/            CLI 子命令皮肤引擎插件加载器
├── plugins/               插件系统(记忆上下文引擎图像生成)
├── skills/                内置技能
├── optional-skills/       可选技能库
├── ui-tui/                React TUI 前端
├── tui_gateway/           TUIPython JSON-RPC 后端
├── acp_adapter/           ACP 服务器(IDE 集成)
└── cron/                  定时调度器

2.3 Agent 循环(核心算法)

# run_agent.py 中的核心循环
while (api_call_count < max_iterations && budget_remaining > 0) or grace_call:
    if interrupt_requested: break
    
    response = LLM.chat.completions.create(
        model=model, 
        messages=messages, 
        tools=tool_schemas
    )
    
    if response.tool_calls:
        for tool_call in response.tool_calls:
            result = handle_function_call(tool_call.name, tool_call.args)
            messages.append(tool_result_message(result))
    else:
        return response.content

2.4 工具自动发现机制

tools/registry.py  (无依赖,被所有工具文件导入)
       ↑
tools/*.py  (每个文件在导入时调用 registry.register())
       ↑
model_tools.py  (导入 tools/registry + 触发工具发现)
       ↑
run_agent.py, cli.py, batch_runner.py

设计亮点:无需手动维护导入列表,任何 tools/*.py 文件只要调用 registry.register() 就会被自动发现。

2.5 插件系统架构

两类插件接口

类型位置说明
通用插件plugins/<name>/注册生命周期钩子(pre/post tool/LLM call)、注册工具、注册 CLI 子命令
记忆插件plugins/memory/<name>/实现 MemoryProvider ABC,可插拔的记忆后端(honcho、mem0、supermemory 等 8 种)

插件发现:从 ~/.hermes/plugins/./.hermes/plugins/ 和 pip 入口点自动发现。

2.6 TUI 进程模型

hermes --tui
  └─ Node (Ink 渲染)  ←──stdio JSON-RPC──→  Python (tui_gateway)
       │                                    └─ AIAgent + tools + sessions
       └─ 渲染转录、编辑器、提示、活动状态

TypeScript 负责屏幕渲染,Python 负责会话、工具调用、模型调用和斜杠命令逻辑。

2.7 配置系统

文件用途
~/.hermes/config.yaml所有设置项
~/.hermes/.env仅存储 API Key 等密钥

三个配置加载器

  • load_cli_config() — CLI 模式
  • load_config()hermes tools/setup 等子命令
  • 直接 YAML 加载 — Gateway 运行时

2.8 Profiles 多实例隔离

HERMES_HOME=/Users/xu/.hermes/profiles/coder

每个 profile 拥有独立的 config、API keys、memory、sessions、skills、gateway,通过 get_hermes_home() 统一访问,避免硬编码 ~/.hermes


三、浏览器操作和本地系统操作能力分析

3.1 浏览器操作能力

核心模块:tools/browser_tool.py (102 KB)

支持三种浏览器后端

后端说明
Browser Use云端执行(Nous Portal 订阅者默认)
Browserbase云端执行(需要 API Key)
本地 Chromium无成本无头浏览器(通过 agent-browser CLI)

主要功能

# 导航到页面
browser_navigate("https://example.com", task_id="task_123")

# 获取页面快照(基于 accessibility tree,适合 LLM 理解)
browser_snapshot(task_id="task_123")

# 点击元素(通过 ref 选择器 @e1, @e2)
browser_click("@e5", task_id="task_123")

# 其他操作:输入、滚动、后退、按键等

其他浏览器相关模块

文件功能
browser_cdp_tool.py原始 Chrome DevTools Protocol 直通
browser_supervisor.py浏览器监控/管理
browser_camofox.py反检测本地浏览器后端
browser_providers/浏览器提供商抽象层(支持 Browser Use、Browserbase、Firecrawl)

3.2 操作系统本地操作能力

核心模块:tools/terminal_tool.py (85 KB)

支持六种终端后端

# 通过环境变量 TERMINAL_ENV 选择后端
TERMINAL_ENV="local"      # 直接在主机上执行(默认,最快)
TERMINAL_ENV="docker"     # 在 Docker 容器中执行(隔离)
TERMINAL_ENV="ssh"        # 通过 SSH 执行
TERMINAL_ENV="modal"      # Modal 云沙箱
TERMINAL_ENV="daytona"   # Daytona 云环境
TERMINAL_ENV="singularity" # Singularity 容器

本地执行环境:tools/environments/local.py

class LocalEnvironment(BaseEnvironment):
    """直接在主机上运行命令。
    
    Spawn-per-call: 每次 execute() 生成一个新的 bash 进程。
    Session snapshot 跨调用保留环境变量。
    CWD 通过文件持久化。
    """

特性

  • 支持后台任务(background=True
  • 自动清理闲置环境
  • VM/容器生命周期管理
  • 支持中断信号(Ctrl+C)

其他本地操作工具

模块功能
code_execution_tool.py代码执行(60 KB)
file_tools.py文件操作(44 KB)
file_operations.py文件操作辅助(49 KB)
process_registry.py进程注册/管理(48 KB)

3.3 安全设计

tools/environments/local.py 可以看到安全设计:

  1. 环境变量隔离:阻止 Hermes 管理的密钥泄露到子进程

    _HERMES_PROVIDER_ENV_BLOCKLIST = frozenset({
        "OPENAI_API_KEY", "ANTHROPIC_TOKEN", ...
    })
    
  2. Profile 隔离:子进程可设置独立的 HOME 目录

    from hermes_constants import get_subprocess_home
    _profile_home = get_subprocess_home()
    if _profile_home:
        sanitized["HOME"] = _profile_home
    
  3. URL 安全检测:浏览器工具集成 URL 安全检查

    from tools.url_safety import is_safe_url
    

四、架构设计亮点

  1. Prompt Caching 感知:禁止在对话中途修改上下文/工具集/记忆,避免破坏缓存导致成本激增

  2. 皮肤引擎:纯数据驱动(YAML),无需改代码即可添加新皮肤

  3. 斜杠命令中央注册COMMAND_REGISTRY 一处定义,自动同步到 CLI、Gateway、Telegram 菜单、Slack 路由、自动补全

  4. 测试隔离scripts/run_tests.sh 确保本地与 CI 环境一致(清除 API Key、UTC 时区、固定 worker 数)

  5. ACP 适配:支持 VS Code / Zed / JetBrains 通过 ACP 协议集成

  6. 工具自动发现:无需手动维护导入列表,通过 registry 模式实现自动注册

  7. 多环境支持:支持 6 种终端后端,可在本地/容器/云端执行任意命令


五、总结

Hermes Agent 具备完整的浏览器和操作系统控制能力

  • 浏览器自动化:导航、点击、输入、截图、DOM 操作(支持本地和云端)
  • 本地命令执行:支持 6 种后端环境,可在本地/容器/云端执行任意命令
  • 文件操作:读写、搜索、编辑文件
  • 进程管理:后台任务、进程监控、生命周期管理

这些能力使 Hermes Agent 可以作为一个全功能的 AI 操作系统助手,不仅能对话,还能实际操作浏览器和本地系统。