Перейти к содержанию

Providers

На этой странице Hermes Agent имеет три уровня отказоустойчивости, которые поддерживают работу сессий при возникновении проблем у провайдеров: 1. Пулы учётных данных — ротация нескольких API-ключей для одного провайдера (проверяется в первую очередь) 2. Резервная модель основного провайдера — автоматическое переключение на другого провайдера:модель при сбое основной модели 3. Резервная модель вспомогательных задач — независимое определение провайдера для побочных задач, таких как vision, сжатие и извлечение веб-страниц

Пулы учётных данных обрабатывают ротацию в рамках одного провайдера (например, несколько ключей OpenRouter). Эта страница описывает переключение между разными провайдерами. Оба механизма опциональны и работают независимо.

Резервная модель основного провайдера​

Когда основной LLM-провайдер сталкивается с ошибками — превышение лимитов запросов, перегрузка сервера, сбои аутентификации, обрывы соединения — Hermes может автоматически переключиться на резервную пару провайдер:модель в середине сессии без потери истории разговора.

Настройка​

Самый простой путь — интерактивный менеджер: [code] hermes fallback

[/code] hermes fallback использует тот же выбор провайдера, что и hermes model — тот же список провайдеров, те же запросы учётных данных, та же валидация. Нажмите a для добавления резервного провайдера, ↑/↓ для изменения порядка, d для удаления, q для сохранения и выхода. Изменения сохраняются в model.fallback_providers в config.yaml. Если вы предпочитаете редактировать YAML напрямую, добавьте секцию fallback_model в ~/.hermes/config.yaml: [code] fallback_model:
provider: openrouter
model: anthropic/claude-sonnet-4

[/code] Оба поля — provider и model — обязательны. Если хотя бы одно отсутствует, резервный механизм отключается. fallback_model vs fallback_providers fallback_model (единственное число) — устаревший ключ с одним резервным провайдером — Hermes всё ещё поддерживает его для обратной совместимости. fallback_providers (множественное число, список) поддерживает несколько резервных провайдеров, перебираемых по порядку; hermes fallback записывает данные в этот ключ. Если заданы оба, Hermes объединяет их, при этом fallback_providers имеет приоритет.

Поддерживаемые провайдеры​

Провайдер| Значение| Требования
|---|---|---
AI Gateway| ai-gateway| AI_GATEWAY_API_KEY
OpenRouter| openrouter| OPENROUTER_API_KEY
Nous Portal| nous| hermes auth (OAuth)
OpenAI Codex| openai-codex| hermes model (ChatGPT OAuth)
GitHub Copilot| copilot| COPILOT_GITHUB_TOKEN, GH_TOKEN или GITHUB_TOKEN
GitHub Copilot ACP| copilot-acp| Внешний процесс (интеграция с редактором)
Anthropic| anthropic| ANTHROPIC_API_KEY или учётные данные Claude Code
z.ai / GLM| zai| GLM_API_KEY
Kimi / Moonshot| kimi-coding| KIMI_API_KEY
MiniMax| minimax| MINIMAX_API_KEY
MiniMax (Китай)| minimax-cn| MINIMAX_CN_API_KEY
DeepSeek| deepseek| DEEPSEEK_API_KEY
NVIDIA NIM| nvidia| NVIDIA_API_KEY (опционально: NVIDIA_BASE_URL)
GMI Cloud| gmi| GMI_API_KEY (опционально: GMI_BASE_URL)
StepFun| stepfun| STEPFUN_API_KEY (опционально: STEPFUN_BASE_URL)
Ollama Cloud| ollama-cloud| OLLAMA_API_KEY
Google Gemini (OAuth)| google-gemini-cli| hermes model (Google OAuth; опционально: HERMES_GEMINI_PROJECT_ID)
Google AI Studio| gemini| GOOGLE_API_KEY (псевдоним: GEMINI_API_KEY)
xAI (Grok)| xai (псевдоним grok)| XAI_API_KEY (опционально: XAI_BASE_URL)
AWS Bedrock| bedrock| Стандартная аутентификация boto3 (AWS_REGION + AWS_PROFILE или AWS_ACCESS_KEY_ID)
Qwen Portal (OAuth)| qwen-oauth| hermes model (Qwen Portal OAuth; опционально: HERMES_QWEN_BASE_URL)
MiniMax (OAuth)| minimax-oauth| hermes model (MiniMax portal OAuth)
OpenCode Zen| opencode-zen| OPENCODE_ZEN_API_KEY
OpenCode Go| opencode-go| OPENCODE_GO_API_KEY
Kilo Code| kilocode| KILOCODE_API_KEY
Xiaomi MiMo| xiaomi| XIAOMI_API_KEY
Arcee AI| arcee| ARCEEAI_API_KEY
GMI Cloud| gmi| GMI_API_KEY
Alibaba / DashScope| alibaba| DASHSCOPE_API_KEY
Alibaba Coding Plan| alibaba-coding-plan| ALIBABA_CODING_PLAN_API_KEY (запасной вариант: DASHSCOPE_API_KEY)
Kimi / Moonshot (Китай)| kimi-coding-cn| KIMI_CN_API_KEY
StepFun| stepfun| STEPFUN_API_KEY
Tencent TokenHub| tencent-tokenhub| TOKENHUB_API_KEY
Azure AI Foundry| azure-foundry| AZURE_FOUNDRY_API_KEY + AZURE_FOUNDRY_BASE_URL
LM Studio (локально)| lmstudio| LM_API_KEY (или без ключа для локального) + LM_BASE_URL
Hugging Face| huggingface| HF_TOKEN
Пользовательский endpoint| custom| base_url + key_env (см. ниже)

Резервный пользовательский endpoint​

Для пользовательского endpoint, совместимого с OpenAI, добавьте base_url и опционально key_env: [code] fallback_model:
provider: custom
model: my-local-model
base_url: http://localhost:8000/v1
key_env: MY_LOCAL_KEY # имя переменной окружения с API-ключом

[/code]

Когда срабатывает резервный механизм​

Резервный механизм активируется автоматически, когда основная модель завершается с ошибкой: * Превышение лимита запросов (HTTP 429) — после исчерпания попыток повторного запроса * Серверные ошибки (HTTP 500, 502, 503) — после исчерпания попыток повторного запроса * Ошибки аутентификации (HTTP 401, 403) — немедленно (повторять бессмысленно) * Не найдено (HTTP 404) — немедленно * Некорректные ответы — когда API многократно возвращает повреждённые или пустые ответы

При срабатывании Hermes: 1. Разрешает учётные данные для резервного провайдера 2. Создаёт новый API-клиент 3. Заменяет модель, провайдера и клиент на месте 4. Сбрасывает счётчик повторов и продолжает разговор

Переключение происходит бесшовно — история разговора, вызовы инструментов и контекст сохраняются. Агент продолжает с того же места, просто используя другую модель. Пошагово, а не по сессиям Резервный механизм действует в рамках одного шага (turn): каждое новое сообщение пользователя начинается с восстановления основной модели. Если основная модель сбоит в середине шага, резервная активируется только для этого шага. При следующем сообщении Hermes снова пробует основную модель. В рамках одного шага резервный механизм срабатывает не более одного раза — если резервная модель тоже сбоит, вступает в силу обычная обработка ошибок (повторы, затем сообщение об ошибке). Это предотвращает каскадные переключения в рамках одного шага, давая основной модели свежий шанс на каждом шаге.

Примеры​

OpenRouter как резервный для Anthropic native: [code] model:
provider: anthropic
default: claude-sonnet-4-6

fallback_model:  
  provider: openrouter  
  model: anthropic/claude-sonnet-4

[/code] Nous Portal как резервный для OpenRouter: [code] model:
provider: openrouter
default: anthropic/claude-opus-4

fallback_model:  
  provider: nous  
  model: nous-hermes-3

[/code] Локальная модель как резервная для облачной: [code] fallback_model:
provider: custom
model: llama-3.1-70b
base_url: http://localhost:8000/v1
key_env: LOCAL_API_KEY

[/code] Codex OAuth как резервный: [code] fallback_model:
provider: openai-codex
model: gpt-5.3-codex

[/code]

Где работает резервный механизм​

Контекст| Поддержка резервирования
|---|---
CLI-сессии| ✔
Шлюз обмена сообщениями (Telegram, Discord и т.д.)| ✔
Делегирование суб-агентам| ✘ (суб-агенты не наследуют конфигурацию резервирования)
Cron-задачи| ✘ (выполняются с фиксированным провайдером)
Вспомогательные задачи (vision, сжатие)| ✘ (используют собственную цепочку провайдеров — см. ниже)
tip Для fallback_model не существует переменных окружения — он настраивается исключительно через config.yaml. Это сделано намеренно: конфигурация резервирования — осознанный выбор, а не то, что должна переопределять устаревшая экспортная переменная оболочки.


Резервная модель вспомогательных задач​

Hermes использует отдельные лёгкие модели для побочных задач. Каждая задача имеет собственную цепочку определения провайдера, которая действует как встроенная система резервирования.

Задачи с независимым определением провайдера​

Задача| Что делает| Ключ конфигурации
|---|---|---
Vision| Анализ изображений, скриншоты браузера| auxiliary.vision
Web Extract| Обобщение веб-страниц| auxiliary.web_extract
Сжатие (Compression)| Сжатие контекста (саммари)| auxiliary.compression
Поиск по сессиям (Session Search)| Обобщение прошлых сессий| auxiliary.session_search
Skills Hub| Поиск навыков| auxiliary.skills_hub
MCP| Вспомогательные операции MCP| auxiliary.mcp
Подтверждение (Approval)| Классификация команд для подтверждения| auxiliary.approval
Генерация заголовков (Title Generation)| Саммари заголовков сессий| auxiliary.title_generation

Цепочка автоопределения​

Когда провайдер задачи установлен в "auto" (по умолчанию), Hermes перебирает провайдеров по порядку, пока один не сработает: Для текстовых задач (сжатие, извлечение веб-страниц и т.д.): [code] OpenRouter → Nous Portal → Пользовательский endpoint → Codex OAuth →
API-key провайдеры (z.ai, Kimi, MiniMax, Xiaomi MiMo, Hugging Face, Anthropic) → отказ

[/code] Для задач vision: [code] Основной провайдер (если поддерживает vision) → OpenRouter → Nous Portal →
Codex OAuth → Anthropic → Пользовательский endpoint → отказ

[/code] Если разрешённый провайдер сбоит при вызове, Hermes также имеет внутренний повтор: если провайдер не OpenRouter и не установлен явный base_url, он пробует OpenRouter как запасной вариант.

Настройка вспомогательных провайдеров​

Каждая задача может быть настроена независимо в config.yaml: [code] auxiliary:
vision:
provider: "auto" # auto | openrouter | nous | codex | main | anthropic
model: "" # например "openai/gpt-4o"
base_url: "" # прямой endpoint (имеет приоритет над provider)
api_key: "" # API-ключ для base_url

  web_extract:  
    provider: "auto"  
    model: ""

  compression:  
    provider: "auto"  
    model: ""

  session_search:  
    provider: "auto"  
    model: ""  
    timeout: 30  
    max_concurrency: 3  
    extra_body: {}

  skills_hub:  
    provider: "auto"  
    model: ""

  mcp:  
    provider: "auto"  
    model: ""

[/code] Каждая задача выше следует одному и тому же шаблону provider / model / base_url. Сжатие контекста настраивается в auxiliary.compression: [code] auxiliary:
compression:
provider: main # Те же опции провайдеров, что и для других вспомогательных задач
model: google/gemini-3-flash-preview
base_url: null # Пользовательский endpoint, совместимый с OpenAI

[/code] А резервная модель использует: [code] fallback_model:
provider: openrouter
model: anthropic/claude-sonnet-4
# base_url: http://localhost:8000/v1 # Опциональный пользовательский endpoint

[/code] Для auxiliary.session_search Hermes также поддерживает: * max_concurrency для ограничения количества одновременно выполняемых саммари сессий * extra_body для передачи специфичных для провайдера полей запроса, совместимых с OpenAI, при вызовах обобщения

Пример: [code] auxiliary:
session_search:
provider: main
model: glm-4.5-air
max_concurrency: 2
extra_body:
enable_thinking: false

[/code] Если ваш провайдер не поддерживает нативное поле управления рассуждениями, совместимое с OpenAI, extra_body в этом случае не поможет; однако max_concurrency всё ещё полезен для уменьшения количества всплесков ошибок 429. Все три — auxiliary, compression, fallback — работают одинаково: установите provider для выбора обработчика запроса, model для выбора модели и base_url для указания пользовательского endpoint (переопределяет provider).

Опции провайдеров для вспомогательных задач​

Эти опции применяются только к конфигурациям auxiliary:, compression: и fallback_model: — "main" не является допустимым значением для вашего основного model.provider. Для пользовательских endpoint используйте provider: custom в секции model: (см. Провайдеры AI). Провайдер| Описание| Требования
|---|---|---
"auto"| Перебирает провайдеров по порядку, пока один не сработает (по умолчанию)| Хотя бы один провайдер настроен
"openrouter"| Принудительно OpenRouter| OPENROUTER_API_KEY
"nous"| Принудительно Nous Portal| hermes auth
"codex"| Принудительно Codex OAuth| hermes model → Codex
"main"| Использовать провайдера основного агента (только для вспомогательных задач)| Активный основной провайдер настроен
"anthropic"| Принудительно Anthropic native| ANTHROPIC_API_KEY или учётные данные Claude Code

Прямое переопределение endpoint​

Для любой вспомогательной задачи установка base_url полностью обходит определение провайдера и отправляет запросы напрямую на указанный endpoint: [code] auxiliary:
vision:
base_url: "http://localhost:1234/v1"
api_key: "local-key"
model: "qwen2.5-vl"

[/code] base_url имеет приоритет над provider. Hermes использует настроенный api_key для аутентификации, а если он не задан — OPENAI_API_KEY. Он не использует повторно OPENROUTER_API_KEY для пользовательских endpoint.


Резервное сжатие контекста​

Сжатие контекста использует блок конфигурации auxiliary.compression для управления тем, какая модель и провайдер обрабатывают обобщение: [code] auxiliary:
compression:
provider: "auto" # auto | openrouter | nous | main
model: "google/gemini-3-flash-preview"

[/code] Миграция со старых версий Старые конфиги с compression.summary_model / compression.summary_provider / compression.summary_base_url автоматически мигрируются в auxiliary.compression.* при первой загрузке (версия конфига 17). Если для сжатия недоступен ни один провайдер, Hermes пропускает промежуточные шаги разговора без генерации саммари, а не завершает сессию ошибкой.


Переопределение провайдера для делегирования​

Суб-агенты, порождённые через delegate_task, не используют основную резервную модель. Однако их можно направить на другую пару провайдер:модель для оптимизации затрат: [code] delegation:
provider: "openrouter" # переопределение провайдера для всех суб-агентов
model: "google/gemini-3-flash-preview" # переопределение модели
# base_url: "http://localhost:1234/v1" # или использование прямого endpoint
# api_key: "local-key"

[/code] См. Делегирование суб-агентам для полной информации по настройке.


Провайдеры cron-задач​

Cron-задачи выполняются с тем провайдером, который настроен на момент выполнения. Они не поддерживают резервную модель. Чтобы использовать другого провайдера для cron-задач, настройте переопределения provider и model в самой задаче: [code] cronjob(
action="create",
schedule="every 2h",
prompt="Check server status",
provider="openrouter",
model="google/gemini-3-flash-preview"
)

[/code] См. Плановые задачи (Cron) для полной информации по настройке.


Сводка​

Функция| Механизм резервирования| Расположение в конфиге
|---|---|---
Модель основного агента| fallback_model в config.yaml — пошаговое переключение при ошибках (основная модель восстанавливается на каждом шаге)| fallback_model: (верхний уровень)
Vision| Цепочка автоопределения + внутренний повтор через OpenRouter| auxiliary.vision
Извлечение веб-страниц (Web extraction)| Цепочка автоопределения + внутренний повтор через OpenRouter| auxiliary.web_extract
Сжатие контекста (Compression)| Цепочка автоопределения, откат до отсутствия саммари, если недоступно| auxiliary.compression
Поиск по сессиям (Session search)| Цепочка автоопределения| auxiliary.session_search
Skills Hub| Цепочка автоопределения| auxiliary.skills_hub
MCP-помощники| Цепочка автоопределения| auxiliary.mcp
Классификация подтверждений (Approval)| Цепочка автоопределения| auxiliary.approval
Генерация заголовков (Title generation)| Цепочка автоопределения| auxiliary.title_generation
Делегирование (Delegation)| Только переопределение провайдера (нет автоматического резервирования)| delegation.provider / delegation.model
Cron-задачи| Переопределение провайдера на задачу (нет автоматического резервирования)| provider / model в задаче
* Резервная модель основного провайдера * Настройка * Поддерживаемые провайдеры * Резервный пользовательский endpoint * Когда срабатывает резервный механизм * Примеры * Где работает резервный механизм * Резервная модель вспомогательных задач * Задачи с независимым определением провайдера * Цепочка автоопределения * Настройка вспомогательных провайдеров * Опции провайдеров для вспомогательных задач * Прямое переопределение endpoint * Резервное сжатие контекста * Переопределение провайдера для делегирования * Провайдеры cron-задач * Сводка