← Все статьи

Настройка AI-агентов для кодинга с OpenAI-совместимым LLM-роутером: Cursor, Claude Code, Codex и Zed

Пошаговое руководство по маршрутизации Cursor, Claude Code, OpenAI Codex CLI, Zed и Devin Desktop через OpenAI-совместимый LLM-роутер. Настройка переменных окружения, конфигурационных файлов, маппинга моделей, fallback-цепочек и мониторинга затрат.

· TheRouter

Каждый coding-агент поставляется с API endpoint по умолчанию. Для индивидуальной работы этого достаточно, но команде рано или поздно понадобятся лимиты расходов, аудит-логи, fallback между провайдерами и возможность менять модели, не трогая машину каждого разработчика. OpenAI-совместимый LLM-роутер между агентом и провайдером решает все эти задачи в одном месте.

OpenAI-совместимость означает, что провайдер предоставляет endpoint chat-completions, чей контракт запроса и ответа достаточно близок к API OpenAI, чтобы немодифицированный вызов OpenAI SDK работал после замены трёх значений: API key, base URL, название модели. Минимальная поверхность на практике —POST /v1/chat/completions с messages, model и потоковым ответом в форме OpenAI.

В этом руководстве показана конфигурация для пяти инструментов: Cursor, Claude Code, OpenAI Codex CLI, Zed и Devin Desktop. Каждый раздел самостоятелен — переходите сразу к нужному инструменту.

Краткая справочная таблица

Coding-агентСпособ настройкиКлючевой параметрПеременная аутентификации
CursorGUI SettingsOverride OpenAI Base URLПоле OpenAI API Key
Claude CodeEnv var / settings.jsonANTHROPIC_BASE_URLANTHROPIC_API_KEY или ANTHROPIC_AUTH_TOKEN
Codex CLIconfig.tomlopenai_base_url или блок model_providerOPENAI_API_KEY или env var провайдера
ZedAgent Settings JSONlanguage_models → OpenAI-compatible_API_KEY по Provider ID
Devin DesktopGUI SettingsHttp: ProxyНаследуется от proxy

Зачем направлять трафик coding-агентов через gateway

Coding-агенты генерируют заметный расход токенов — одна сессия Codex может израсходовать тысячи токенов за задачу. Маршрутизация через gateway даёт несколько практических преимуществ.

  • Прозрачность затрат. Расходы по каждому разработчику, модели и проекту видны в одном дашборде. Не нужно проверять пять консолей провайдеров.
  • Fallback провайдеров. Когда OpenAI возвращает 429 или 503, роутер автоматически переключается на резервного провайдера. Мы маршрутизируем OpenAI-совместимые запросы через настроенных провайдеров и поддерживаем routing и fallback в рамках работающих продуктовых путей.
  • Единый биллинг. Один счёт вместо отдельных аккаунтов OpenAI, Anthropic, DeepSeek и других. Мы предоставляем единые интерфейсы биллинга/учёта в реализованном объёме.
  • Governance. Rate limits, allowlists моделей и лимиты расходов применяются на уровне gateway. Разработчики не работают с сырыми ключами провайдеров.
  • Аудит. Каждый запрос логируется с идентификацией пользователя, моделью, количеством токенов и латентностью. Это необходимо для SOC 2 и корпоративного compliance.

Cursor

В настройках Cursor есть два поля, которые перенаправляют весь OpenAI-совместимый трафик через ваш роутер.

Пошаговая инструкция

  1. Откройте Cursor Settings (Cmd+, на macOS, Ctrl+, на Windows/Linux).
  2. Перейдите в Models → API Keys.
  3. Введите API Key роутера в поле OpenAI API Key.
  4. Включите Override OpenAI Base URL.
  5. Укажите адрес роутера (например, https://api.therouter.ai/v1).
  6. В разделе Models добавьте model ID, которые предоставляет роутер (например, gpt-6-astra, claude-sonnet-4, deepseek-v4-pro).

Проверка

Отправьте prompt в чат или Inline Assistant в Cursor. Откройте дашборд роутера и убедитесь, что запрос появился. Если запроса нет:

  • Убедитесь, что base URL заканчивается на /v1. Cursor сам добавляет /chat/completions.
  • Убедитесь, что API Key принадлежит роутеру, а не OpenAI напрямую.
  • Проверьте, что выбранный model ID совпадает с тем, что ожидает роутер.

Нюансы

  • Встроенные модели Cursor продолжают использовать инфраструктуру Cursor. Override применяется только к моделям из вашего пользовательского списка. Модели по умолчанию (cursor-fast и подобные) обходят override.
  • Поле API Key действует на все пользовательские модели. Через GUI нельзя задать разные ключи для разных моделей. Если нужна раздельная аутентификация, реализуйте её на уровне роутера.
  • Streaming обязателен. Cursor ожидает SSE-потоковый ответ. Роутер должен поддерживать stream: true на /v1/chat/completions.

Claude Code

Claude Code использует переменные окружения для подключения к gateway. Основная переменная — ANTHROPIC_BASE_URL, которая определяет, куда Claude Code отправляет запросы /v1/messages.

Пошаговая инструкция

Вариант A: переменные окружения (быстрый тест)

export ANTHROPIC_BASE_URL=https://api.therouter.ai/api/anthropic
export ANTHROPIC_API_KEY=sk-your-router-key
claude

Вариант B: файл настроек (постоянная конфигурация, рекомендуется для команд)

Создайте или отредактируйте ~/.claude/settings.json:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.therouter.ai/api/anthropic",
    "ANTHROPIC_API_KEY": "sk-your-router-key"
  }
}

Для развёртывания на уровне организации администратор может распространить managed settings, которые Claude Code подхватит при запуске.

Проверка

  1. Запустите claude.
  2. Введите /status и проверьте строку Anthropic base URL — она должна показывать адрес вашего роутера.
  3. Отправьте тестовый prompt. Нормальный ответ подтверждает, что routing работает.

Нюансы

  • ANTHROPIC_BASE_URL должен указывать на путь в формате Anthropic, а не на OpenAI-совместимый путь. Если роутер обслуживает Anthropic-формат по /api/anthropic, используйте этот путь. Endpoint должен отвечать на /v1/messages.
  • ANTHROPIC_AUTH_TOKEN vs ANTHROPIC_API_KEY: используйте ANTHROPIC_AUTH_TOKEN, когда gateway ожидает bearer token в заголовке Authorization. Используйте ANTHROPIC_API_KEY, когда gateway ожидает x-api-key. Если не уверены, начните с ANTHROPIC_AUTH_TOKEN.
  • Фоновые агенты и supervisor могут не наследовать переменные из shell. Используйте файл настроек для надёжной маршрутизации в расширениях VS Code и фоновых сессиях.
  • Установка ANTHROPIC_BASE_URL без credential не заменяет подписку claude.ai — запросы идут через ваш URL, но биллинг и лимиты подписки остаются в силе.

OpenAI Codex CLI

Codex CLI читает конфигурацию из ~/.codex/config.toml. Самый простой путь — задать openai_base_url для встроенного провайдера OpenAI.

Пошаговая инструкция

Вариант A: перенаправление встроенного провайдера

Отредактируйте ~/.codex/config.toml:

[model]
openai_base_url = "https://api.therouter.ai/v1"

Задайте API Key:

export OPENAI_API_KEY=sk-your-router-key

Вариант B: пользовательский model provider (для не-OpenAI моделей через роутер)

[[model_provider]]
name = "therouter"
base_url = "https://api.therouter.ai/v1"
env_key = "THEROUTER_API_KEY"
wire_format = "openai"

[model_provider.models]
"deepseek-v4-pro" = { max_tokens = 131072 }
"claude-sonnet-4" = { max_tokens = 200000 }

Задайте переменную окружения:

export THEROUTER_API_KEY=sk-your-router-key

Выберите модель при запуске:

codex --model therouter/deepseek-v4-pro

Проверка

Запустите codex и отправьте тестовую задачу. В логах роутера убедитесь, что запрос пришёл. Codex по умолчанию использует Responses API (/v1/responses) — проверьте, что ваш роутер его поддерживает, или настройте Codex на Chat Completions API.

Нюансы

  • CODEX_HOME переопределяет каталог конфигурации. Если эта переменная задана, Codex читает конфигурацию из $CODEX_HOME/config.toml, а не из ~/.codex/config.toml.
  • Codex по умолчанию использует Responses API, а не Chat Completions. Если роутер поддерживает только /v1/chat/completions, проверьте в документации Codex наличие опции wire_format или переключения API-режима.
  • Имена пользовательских провайдеров должны быть уникальными. Если вы создали провайдер therouter, в флаге --model используйте therouter/model-name.

Zed

Zed поддерживает OpenAI-совместимых провайдеров через Agent Settings. Конфигурация хранится в файле settings.json.

Пошаговая инструкция

  1. Откройте Agent Settings: выполните agent: open settings в палитре команд.
  2. Добавьте OpenAI-совместимый провайдер в language_models:
{
  "language_models": {
    "therouter": {
      "type": "openai",
      "api_url": "https://api.therouter.ai/v1",
      "available_models": [
        {
          "name": "gpt-6-astra",
          "display_name": "GPT-6 Astra (via TheRouter)",
          "max_tokens": 200000
        },
        {
          "name": "deepseek-v4-pro",
          "display_name": "DeepSeek V4 Pro (via TheRouter)",
          "max_tokens": 131072
        },
        {
          "name": "claude-sonnet-4",
          "display_name": "Claude Sonnet 4 (via TheRouter)",
          "max_tokens": 200000
        }
      ]
    }
  }
}
  1. Задайте API Key. Zed генерирует имя env var из provider ID: для провайдера therouter это THEROUTER_API_KEY.
export THEROUTER_API_KEY=sk-your-router-key

Альтернативно можно ввести ключ в Settings → AI → LLM Providers через GUI — Zed сохранит его в системном keychain.

Проверка

Откройте новый thread Zed Agent, выберите одну из пользовательских моделей в model picker и отправьте тестовый prompt. Если модель не появилась, перезапустите Zed после сохранения settings.json.

Нюансы

  • Provider ID определяет имя env var. ID my-gateway становится MY_GATEWAY_API_KEY. Используйте простые, понятные ID.
  • available_models обязателен. OpenAI-совместимые провайдеры не поддерживают автоматическое обнаружение моделей — список нужно задать вручную.
  • Zed Agent, Inline Assistant и генерация commit-сообщений используют одну конфигурацию LLM-провайдера. Внешние агенты (Claude Code в терминале Zed) настраивают свои endpoint отдельно.
  • Пользовательские заголовки добавляются через custom_headers, если роутер требует дополнительных auth-заголовков помимо API Key.

Devin Desktop

Devin Desktop (ранее Windsurf) маршрутизирует весь LLM-трафик через настройку HTTP-proxy.

Пошаговая инструкция

  1. Откройте Devin Desktop Settings (Cmd+, на macOS, Ctrl+, на Windows/Linux).
  2. Найдите Http: Proxy.
  3. Введите адрес роутера: https://api.therouter.ai.
  4. Сохраните и перезапустите Devin Desktop.

Проверка

Откройте панель чата Devin Desktop и отправьте тестовое сообщение. Проверьте появление запроса в дашборде роутера.

Нюансы

  • Devin Desktop использует proxy-модель, а не override base URL. В зависимости от настроек весь HTTP-трафик редактора (не только LLM-вызовы) может идти через proxy.
  • Аутентификация проходит через proxy. Роутер должен корректно обрабатывать auth-заголовки, которые Devin Desktop отправляет upstream-провайдерам.
  • Cascade прекращён. Если вы мигрировали с Windsurf, старый агент Cascade больше не работает. Используйте встроенный агент Devin.

Настройка fallback-цепочки

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

Основная:     deepseek-v4-pro (самая низкая стоимость для задач кодинга)
Fallback 1:   claude-sonnet-4 (сильный кодинг, выше стоимость)
Fallback 2:   gpt-6-astra (самый широкий охват, максимальная стоимость)

Роутер автоматически переключается при ошибках. Когда основная модель возвращает ошибку, следующая в цепочке обрабатывает запрос. Разработчики видят бесшовный опыт. Мы поддерживаем routing и fallback провайдеров/моделей в рамках работающих продуктовых путей.

Подробности настройки fallback моделей — в документации. Цепочку можно задать в дашборде роутера или в конфигурационном файле.

Мониторинг затрат

Единый gateway даёт одно место для отслеживания расходов coding-агентов.

  • Разбивка по разработчикам. Определите, кто расходует больше всего токенов и какие модели использует.
  • Сравнение по моделям. Сопоставьте затраты на deepseek-v4-pro ($0.70/M input), claude-sonnet-4 ($3/M input) и gpt-6-astra, чтобы найти оптимальный баланс цена/качество.
  • Бюджетные оповещения. Задайте дневные или месячные лимиты по команде или разработчику. При исчерпании бюджета роутер вернёт 429, не позволяя расходам выйти из-под контроля.

Мы предоставляем единые интерфейсы биллинга/учёта в реализованном объёме. Один счёт и один дашборд вместо сверки пяти провайдерских биллингов.

Типичные проблемы и их решения

СимптомВероятная причинаРешение
Ошибка "Model not found"Model ID в агенте не совпадает со списком моделей роутераПроверьте model ID в конфигурации роутера и настройках агента
Запросы идут мимо роутераАгент использует встроенные моделиВыберите пользовательскую модель из списка
Auth-ошибки (401/403)Неверный API Key или формат auth-заголовкаУбедитесь, что ключ от роутера, а не от upstream-провайдера
Ошибки streamingРоутер не поддерживает SSE streamingВключите поддержку streaming на роутере. Все coding-агенты требуют потоковых ответов
Медленный первый ответDNS-резолвинг или TLS handshake до роутераРазместите роутер в регионе, близком к разработчикам
Codex: "unsupported API"Роутер не поддерживает Responses APIПроверьте в документации Codex опцию fallback на Chat Completions

FAQ

Можно ли использовать разные роутеры для разных coding-агентов?

Да. Каждый инструмент настраивается отдельно. Cursor может идти через один gateway, Claude Code — через другой. Но единый роутер упрощает биллинг и мониторинг.

Добавляет ли gateway задержку?

Обычно 5–20 мс при правильном размещении. Для рабочих нагрузок coding-агентов, где inference модели занимает 500 мс — 5 с, это пренебрежимо мало. Выигрыш от автоматического failover перевешивает эти миллисекунды.

Можно ли одновременно использовать встроенные модели агента и модели через роутер?

В большинстве случаев — да. Встроенные модели Cursor, подписочный доступ Claude Code и hosted-модели Zed работают независимо от конфигурации custom endpoint. Вы можете переключаться между встроенными и маршрутизируемыми моделями на уровне отдельной беседы.

Что произойдёт, если роутер упадёт?

Без резервной конфигурации coding-агент не сможет подключиться. Для снижения рисков настройте запасного провайдера в инструментах, которые это поддерживают (например, несколько блоков model_provider в Codex), или используйте high-availability deployment роутера.

Нужны ли отдельные API Key роутера для каждого разработчика?

Рекомендуется, но не обязательно. Персональные ключи позволяют отслеживать использование и отзывать доступ индивидуально. Некоторые роутеры поддерживают командные ключи с идентификацией пользователя через custom headers.

Работает ли это с self-hosted моделями?

Да. Если вы запускаете модель за OpenAI-совместимым API (vLLM, Ollama, TGI), подключите её к роутеру как провайдер, а coding-агенты направьте на роутер. Агентам не нужно знать, что модель self-hosted.

Связанные материалы

Помощь и контакты