Architecture & Philosophy

Hermes Agent 架构全景与设计哲学

深度透视智能体的“沙漏”设计、三大核心模块与目录工程骨架
Hermes Agent 架构全景
📊 图 1-1:Hermes Agent 核心系统架构拓扑全景图

📐 1. 核心设计:“沙漏”与极窄“腰部”(Narrow Waist)

在设计工业级的 LLM 智能体时,初学者最容易犯的错误就是“贪多”——不断给核心系统增加接口、工具和特设规则。然而,在 LLM 体系中,每一次 API 请求都必须发送所有可用工具的 Schema。工具越多,消耗的上下文和 Token 越多,推理速度就越慢,且模型产生逻辑幻觉的几率会成倍攀升。

基于此,Hermes 贯彻了“极窄腰部(Narrow Waist)”的设计哲学,其形态如同沙漏:

  • 最少的核心工具集(Core Toolset):只有最根本的、无法被替代的基础设施级工具(如 read_file, terminal, web_search, browser_navigate)才能进入 Core Toolset。在 toolsets.py 中由 _HERMES_CORE_TOOLS 列表静态锁定。
  • 能力向边缘释放(Edges Layer):绝大多数新能力应通过 CLI 子命令、独立 Skills、插件扩展(Memory Provider, Inference Backend)或外部独立进程接入,绝不污染 Core Layer。

🧬 2. 核心大板块与系统职责映射

正如全景架构图所示,Hermes-Agent 由六个高内聚的系统模块与协议层级组成,保障了架构的稳定与灵活:

核心层级 代表模块与实现文件 职责与核心协作角色
🧠 核心决策层 run_agent.py -> AIAgent
agent/conversation_loop.py
驱动单会话对话主循环。拦截并串行分派 tool_calls,控制执行生命周期与 Token 预算。
🛠️ 工具与校验 model_tools.py -> 调度器
agent/message_sanitization.py
反射提取 Python 签名,自动强转类型;在运行时自愈 JSON 损坏、拦截并格式化输出。
🔌 消息网关 gateway/run.py -> GatewayRunner
gateway/platforms/ -> 适配器
异步多租户分流引擎。对接飞书、Telegram 等 20+ 通道,支持进度坍缩、去重与卡片异步更新。
📺 TUI 交互层 ui-tui/ -> React Ink 渲染
tui_gateway/server.py -> RPC
利用 Node + React Ink 绘制高品质控制台 Dashboard,通过 WebSocket JSON-RPC 路由进行双向同步。
🧩 插件生态 plugins/ -> 记忆/大模型提供者
agent/memory_manager.py
通过动态反射扫描与 Import Hook 机制,在无侵入核心腰部的情况下动态装载外部扩展包。
⏰ 计划任务 cron/scheduler.py -> 调度守护线程
cron/jobs.py -> 任务注册
维护后台无限心跳轮询 Tick,使用 Jitter 避堵锁机制,实现分布式容错与报警机制。
💻 沙箱隔离 tools/environments/local.py -> PTY
tools/environments/docker.py -> Docker
基于 Unix PTY 实现伪终端重定向与异步流式监听,或者利用只读 Namespace 构建 Docker 物理安全沙箱。
🔌 互操作接入 acp_adapter/ -> 编辑器适配器
tools/registry.py -> 自动内省
实现标准 MCP 协议,暴露 JSON-RPC 2.0 端口,为 VSCode/Zed 等编辑器提供 LSP 及 workspace 挂载支持。
⚡ 计算并发 batch_runner.py -> 批处理引擎 管理 ThreadPoolExecutor 隔离并发池,处理 429 报错重试(Jitter 指数退避),并安全归口聚合 Token 费用。

📁 3. 极简代码目录与文件职责指南

在开始深入研究代码前,请牢记核心源文件的存放地址与具体职责分工。这能帮初学者快速建立代码映射:

🧠 Agent 核心逻辑区

  • run_agent.py:定义主大脑 AIAgent 类。它是智能体生命周期的源头,包含对话决策主循环、Token预算控制以及 Kanban 派发逻辑。
  • agent/conversation_loop.py:承载了 run_conversation 单个 Turn 内具体的 LLM 请求打包、中断信号拦截、重试逻辑等底层会话支撑。
  • agent/conversation_compression.py:上下文压缩核心。包含 compress_context(),负责调用辅助小模型生成历史摘要,对 state.db 对话数据进行在线切除和合并。

🛠️ 工具与校验层

  • model_tools.py:定义核心工具管理器与分发拦截逻辑。负责在启动时执行 discover_builtin_tools()
  • tools/registry.py:核心工具注册表,包含 @registry.register 装饰器,负责利用 inspect 内省自动反射生成大模型调用的 schema 元数据。
  • agent/message_sanitization.py:输入净化与容错黑科技,包含 _repair_tool_call_arguments() 自动修复损坏的 JSON 格式,过滤非规范字符。

💾 状态与数据管理

  • hermes_state.py:包含会话状态数据库 SessionDB 类。管理事务,支持 WAL 降级、Jitter Retry 重试避堵锁、及 schema 在线修复。

🔌 网关、协议与并发层

  • gateway/run.py:网关核心进程。管理 GatewayRunner,用于轮询及接收外部通讯请求,支持并发去重,防止消息重入。
  • acp_adapter/:编辑器适配器目录。基于 LSP 协议和标准 MCP 协议实现本地编辑器(VSCode, Zed)与 Hermes 执行引擎的桥接。
  • batch_runner.py:高并发批量任务引擎。基于线程池隔离执行任务切片,聚合统计 Token 消耗并安全并发回写数据库。

📺 终端交互(TUI)

  • tui_gateway/server.py:JSON-RPC websocket 服务端,映射并执行来自终端 UI 的一切交互控制操作。
  • tui_gateway/slash_worker.py:提供后台工作线程,用于排队处理 TUI 中耗时且带有锁开销的斜杠快捷指令(如 /compress)。

🔗 本章子任务深入剖析专栏

为深度掌握系统全景,推荐阅读以下子配置专题,直达源码解析: