Hermes Agent 源码解析 · 第 5 讲
Hermes Agent 源码解析 第 5 讲:Provider 抽象层——ProviderProfile、模型路由、凭证池与多源认证 基于 Hermes Agent v0.16.0 源码 · 2026-06-18 一、Provider 抽象层:Hermes 的"AI 推理路由器" 前四讲我们建立了全局架构地图、深入了对话循环、解析了工具系统的三层架构、拆解了插件系统。这一讲聚焦 Hermes 最核心的基础设施之一—— Provider 抽象层 。 Provider 抽象层是 Hermes 的"AI 推理路由器":它决定了你的请求发给哪个模型提供商、用什么协议、携带什么凭证、走什么传输通道。从 Nous Portal 到 OpenRouter,从 Anthropic 到 Kimi,从本地 Ollama 到远程 Bedrock——超过 30 个提供商全部通过同一套抽象层接入。 📦 源码仓库 https://github.com/NousResearch/hermes-agent 本地源码: ~/.hermes/hermes-agent/ 本讲核心文件: providers/base.py (214 行)— ProviderProfile 基类 providers/__init__.py (191 行)— 注册表与发现 plugins/model-providers/ (30+ 提供商插件) hermes_cli/auth.py (7926 行)— 多源Auth hermes_cli/runtime_provider.py (1775 行)— 运行时路由 agent/credential_pool.py (2184 行)— 凭证池 agent/transports/chat_completions.py (704 行)— 传输层 agent/auxiliary_client.py (5949 行)— 辅助客户端路由 二、ProviderProfile:声明式提供商契约 一切始于 ProviderProfile ——一个声明式 dataclass,将每个提供商的完整行为描述集中在一个对象中。设计哲学是: "传输层读 profile,而不是接收 20+ 个布尔标志" 。 # providers/base.py:38-95 @dataclass class ProviderProfile: """Base provider profile — subclass or instantiate with overrides.""" # -- Identity -- name: str # 唯一标识: "anthropic", "openrouter" api_mode: str = "chat_completions" # 协议模式 aliases: tuple = () # 别名: ("claude", "claude-oauth") # -- 人类可读元数据 -- display_name: str = "" # 显示名称: "GMI Cloud" description: str = "" # 描述: "GMI Cloud (multi-model direct API)" signup_url: str = "" # 注册链接 # -- 认证与端点 -- env_vars: tuple = () # env var: ("ANTHROPIC_API_KEY",) base_url: str = "" # API 基础 URL models_url: str = "" # 模型列表端点(可选覆盖) auth_type: str = "api_key" # api_key|oauth_device_code|oauth_external|copilot|aws_sdk supports_health_check: bool = True # -- 视觉支持 -- supports_vision: bool = False supports_vision_tool_messages: bool = True # -- 模型目录 -- fallback_models: tuple = () # 离线时的备选模型列表 hostname: str = …