Hermes Agent 源码解析 · 第 7 讲
Hermes Agent 源码解析 第 7 讲:Gateway 与平台适配器——20+ 平台如何共享同一个 Agent 内核 基于 Hermes Agent v0.16.0 源码 · 2026-06-20 一、Gateway:Agent 的"通信中枢" 前六讲我们完成了全局架构地图、对话循环、工具系统、插件系统、Provider 抽象层、记忆与技能系统的深度解析。这一讲聚焦 Hermes 最庞大的子系统—— Gateway ,它让同一个 Agent 内核同时服务 Telegram、Discord、Slack、微信、飞书、钉钉、WhatsApp、Signal、Email、SMS 等 20+ 平台。 Gateway 不是一个简单的"消息转发器"——它是一个完整的 通信运行时 :管理多平台连接生命周期、会话隔离、流式响应分发、媒体处理、安全沙箱、跨平台镜像投递……每一个环节都有精密的设计。 📦 源码仓库 https://github.com/NousResearch/hermes-agent 本地源码: ~/.hermes/hermes-agent/ 本讲核心文件: gateway/run.py (16292 行)— GatewayRunner 主循环 gateway/platforms/base.py (4884 行)— BasePlatformAdapter ABC gateway/platform_registry.py (260 行)— 平台注册中心 gateway/config.py (2139 行)— 配置管理 + Platform 枚举 gateway/session.py (1444 行)— 会话管理 gateway/stream_events.py (171 行)— 结构化流事件 gateway/stream_dispatch.py (132 行)— 事件分发器 gateway/delivery.py (433 行)— 投递路由 gateway/mirror.py (168 行)— 跨平台镜像 gateway/platforms/telegram.py, discord.py, ... (20+ 平台适配器) 二、Platform 枚举:动态扩展的平台注册表 Platform 枚举是 Gateway 的"平台字典"。它有一个精妙的设计: 内置平台硬编码 + 插件平台动态注册 ,通过 Python 枚举的 _missing_() 钩子实现无缝扩展。 📄 gateway/config.py (第 136-231 行) class Platform(Enum): """Supported messaging platforms.""" LOCAL = "local" TELEGRAM = "telegram" DISCORD = "discord" WHATSAPP = "whatsapp" SLACK = "slack" SIGNAL = "signal" MATRIX = "matrix" FEISHU = "feishu" WECOM = "wecom" WEIXIN = "weixin" QQBOT = "qqbot" DINGTALK = "dingtalk" # ... 共 20+ 内置平台 @classmethod def _missing_(cls, value): """Accept unknown platform names only for known plugin adapters. Creates a pseudo-member cached in _value2member_map_ so that Platform("irc") is Platform("irc") holds True (identity-stable). """ # 1. 检查缓存 (已创建的伪成员) if value in cls._value2member_map_: return cls._value2member_map_[value] # 2. 扫描内置插件目录 plugins/platforms/ if value in _Platform__bundled_plugin_names: pseudo = objec…