Направьте Continue на кастомный OpenAI-совместимый эндпоинт.

Updated 2026-07-29

Continue настраивает модели декларативно в config.yaml. Установите provider в openai, укажите apiBase на https://api.apisrouter.com/v1, и каждый добавленный вами блок модели станет доступен в расширении, с ролями chat, edit и apply, назначаемыми на модель, под одним ключом.

Короткий ответ: блок модели с provider openai и apiBase.

Провайдер openai в Continue принимает переопределение apiBase — это задокументированный путь для любого OpenAI-совместимого сервера. Добавьте блок модели в config.yaml с provider, установленным в openai, apiBase, установленным в https://api.apisrouter.com/v1, точным ID модели и своим ключом. Модель появится в селекторе моделей Continue, и каждый её запрос пойдёт на шлюз по стандартному протоколу /v1/chat/completions. Тот же механизм покрывает сколько угодно моделей: один блок на ID, все делят один apiBase и ключ. Поскольку Continue воспринимает поле model как простую строку, ID разных вендоров — Claude рядом с GPT рядом с DeepSeek — сидят бок о бок в одном конфиг-файле.

models:
  - name: Claude Sonnet 4.6
    provider: openai
    model: claude-sonnet-4-6
    apiBase: https://api.apisrouter.com/v1
    apiKey: sk-APIsRouter-...
    roles:
      - chat
      - edit
      - apply

Как Continue распределяет работу между моделями: роли.

Continue (continuedev на GitHub, около 34K звёзд) — агент для IDE в VS Code и JetBrains, и его определяющая идея конфигурации — роли. Каждый блок модели несёт список roles, и Continue маршрутизирует каждый тип работы к модели, обладающей этой ролью: chat для панели разговора и работы агента, edit для инлайн-трансформаций кода, apply для слияния предложенных изменений в файлы, плюс autocomplete, embed и rerank для соответствующих подсистем. Это и есть рычаг, который делает мультивендорный эндпоинт интересным именно в Continue. Chat хочет самую сильную модель, какую можно оправдать; edit и apply — более короткие, механические вызовы, где справляется быстрый ID среднего уровня. При одном apiBase, обслуживающем каждого вендора, такое разделение — чистый YAML: ID Claude держит chat, быстрый ID держит edit и apply, один ключ на всё. Одна честная граница: autocomplete — это нагрузка fill-in-the-middle, и роль autocomplete в Continue построена вокруг моделей, обученных под этот формат завершения, а не под чат. Шлюз chat-completions — правильный дом для трафика chat, edit и apply; держите autocomplete на той FIM-совместимой настройке, которой пользуетесь сегодня, а не назначайте эту роль чат-модели, ожидая хороших подсказок.

Полная настройка: несколько моделей, разделённые роли, объявленный контекст.

Конфиг-файл живёт в ~/.continue/config.yaml. Поле name каждого блока — это подпись в селекторе; model — точный ID, который обслуживает шлюз. defaultCompletionOptions.contextLength объявляет контекстное окно модели, и Continue использует его, чтобы решить, сколько разговора и файлового контекста упаковать в запрос, так что оставление консервативного значения по умолчанию на модели с длинным контекстом обрезает раньше, чем следовало бы. Возможности обычно определяются автоматически, но для ID, которые Continue не распознаёт, их можно указать явно: capabilities: [tool_use] говорит режиму агента, что он может управлять инструментами через эту модель. О ключах: YAML принимает буквальный apiKey, что нормально для локального файла, который никуда не уходит с вашей машины. Continue также поддерживает синтаксис шаблонов секретов вида ${{ secrets.APISROUTER_API_KEY }} для конфигов, управляемых через его хаб, что держит буквальное значение вне общих файлов. Используйте ту форму, которая соответствует тому, где живёт ваш конфиг.

models:
  - name: Claude Sonnet 4.6
    provider: openai
    model: claude-sonnet-4-6
    apiBase: https://api.apisrouter.com/v1
    apiKey: ${{ secrets.APISROUTER_API_KEY }}
    roles: [chat, edit]
    capabilities: [tool_use]
    defaultCompletionOptions:
      contextLength: 200000

  - name: Claude Haiku 4.5
    provider: openai
    model: claude-haiku-4-5-20251001
    apiBase: https://api.apisrouter.com/v1
    apiKey: ${{ secrets.APISROUTER_API_KEY }}
    roles: [edit, apply]

  - name: GPT-5.5
    provider: openai
    model: gpt-5.5
    apiBase: https://api.apisrouter.com/v1
    apiKey: ${{ secrets.APISROUTER_API_KEY }}
    roles: [chat]

Выбор моделей по ролям.

Назначение ролей — это заодно и механизм сравнения. Зафиксируйте edit и apply, меняйте блок chat между двумя кандидатными ID по неделе на каждый и позвольте логу использования по ключу оценить разницу на вашей реальной нагрузке. Каждый кандидат — это три строки YAML против того же эндпоинта.

  • chat несёт цикл агента и длинные разговоры: чтение файлов, планирование правок, ответы на вопросы над реальным контекстом. Флагманская модель (claude-sonnet-4-6, gpt-5.5) принадлежит здесь, и именно сюда уходит большая часть ваших токенов.
  • edit обрабатывает трансформации выделенного кода. Вызовы короче и более механические, чем chat, так что быстрый ID вроде claude-haiku-4-5-20251001 или gpt-5.4-mini держит цикл правок компактным, не ухудшая результат.
  • apply сливает предложенные изменения в файлы. Это самая механическая из трёх ролей и самый очевидный кандидат для наименее дорогой способной модели, включая deepseek-v4-flash.
  • embed и rerank питают поиск по кодовой базе и являются отдельными подсистемами со своей формой моделей; перенос трафика chat на шлюз не требует их трогать.

Оплата по факту · дешевле официальных цен

Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.

МодельОфициальная ценаНаша цена
Claude Sonnet 4.6$3.00 / $15.00 per M$2.40 / $12.00 per M
Claude Haiku 4.5 20251001$1.00 / $5.00 per M$0.80 / $4.00 per M
GPT-5.5$5.00 / $30.00 per M$4.00 / $24.00 per M
GPT-5.4 mini$0.75 / $4.50 per M$0.60 / $3.60 per M
DeepSeek V4 Flash$0.14 / $0.28 per M$0.10 / $0.30 per M

Сбои, специфичные именно для Continue.

apiBase без /v1. Continue дописывает пути маршрутов вроде /chat/completions к тому base, который вы дали, так что https://api.apisrouter.com/v1 верен, а голый хост — нет. Ошибка в форме 404 при первом использовании почти всегда именно это. Отступы YAML незаметно меняют форму конфига. models — это список блоков, и apiBase с неверным отступом присоединяется не к тому блоку или вообще ни к какому. Когда одна модель работает, а её соседка не может пройти аутентификацию, сравните их отступы, прежде чем подозревать шлюз. Переключатель устаревших completions. Провайдер openai по умолчанию использует /chat/completions — то, что обслуживает шлюз. useLegacyCompletionsEndpoint: true перенаправляет блок на устаревший маршрут /completions; если у блока это установлено, запросы в формате чата перестают работать для этой модели. Ожидания Responses-API на ID серии GPT. Некоторые пути Continue могут пробовать новый протокол responses от OpenAI для определённых имён моделей OpenAI. Шлюз с chat-completions не обслуживает этот протокол; если блок серии GPT падает с ошибкой в форме маршрута, установите useResponsesApi: false на этом блоке, чтобы он оставался на /chat/completions. Устаревший contextLength. Continue упаковывает контекст согласно defaultCompletionOptions.contextLength, а не согласно тому, что модель могла бы принять. Объявление 32k на модели с окном 200k ничего не ломает видимо; оно просто незаметно отбрасывает контекст, за который вы заплатили. Объявляйте то, что модель реально поддерживает.

Кто направляет Continue через шлюз.

  • Разработчики, живущие в IDE, которые хотят видеть Claude, GPT и DeepSeek выбираемыми внутри VS Code или JetBrains, не поддерживая один набор учётных данных на каждого вендора.
  • Команды, разделяющие роли по ценовому профилю: флагманский chat, быстрые edit и apply, каждая роль держит подходящий ей ID, всё тарифицируется на одной поверхности.
  • Инженеры, сравнивающие чат-модели на реальной работе. Каждый кандидат — один блок YAML против того же apiBase, а не новая интеграция провайдера.
  • Тимлиды, стандартизирующие онбординг: один шаблон config.yaml плюс один APISROUTER_API_KEY заменяет чек-лист вендорских ключей, а использование по ключу показывает расходы каждого места.
  • Разработчики без доступа к биллингу конкретного вендора. Доступ на основе пополнения без требования карты убирает зависимость от регистрации у каждого провайдера.

Проверьте эндпоинт и отладьте первый запрос.

Посмотрите, что обслуживает шлюз, прежде чем редактировать YAML; ID, возвращаемые /v1/models, — это ровно те строки, с которыми должны совпадать поля model. Сбои первого запроса следуют паттерну. 401 означает, что ключ в конкретном блоке неверен, либо ссылка на секрет не разрешилась; проверьте упавший блок, а не файл в целом, потому что ключи в Continue назначаются на блок, а значит и сбои — на блок. Ошибка model-not-found — это опечатка в ID, включая версионный суффикс. Ошибка в форме маршрута на ID серии GPT указывает на переключатель responses-API, разобранный выше. А если расширение вообще не показывает кастомных моделей, YAML не распарсился; сначала проверьте структуру файла. Как только запросы пойдут, консоль APIsRouter покажет модель на запрос, счётчики токенов и расходы. Поскольку Continue разделяет работу по ролям, вид использования — это ещё и первое место, где вы увидите соотношение трафика chat к edit на вашей реальной нагрузке, а это то число, которое говорит, где выбор модели реально имеет значение.

curl -s https://api.apisrouter.com/v1/models \
  -H "Authorization: Bearer $APISROUTER_API_KEY" | head -50

Частые вопросы

Может ли Continue использовать модели Claude и DeepSeek через провайдер openai?

Да. Провайдер openai с установленным apiBase — задокументированный путь для любого OpenAI-совместимого сервера, и Continue передаёт поле model как простую строку. Работает любой ID, который обслуживает эндпоинт, включая ID Claude и DeepSeek, по одному блоку модели на ID.

Делят ли все мои блоки моделей один apiBase и ключ?

Каждый блок объявляет собственные apiBase и apiKey, так что они могут делить значения или нет. Направление нескольких блоков на один и тот же эндпоинт с одним и тем же ключом — это нормально, а YAML-якоря позволяют объявить пару один раз и ссылаться на неё в каждом блоке.

Какие роли стоит направлять через шлюз?

chat, edit и apply, которые все говорят по /v1/chat/completions. Autocomplete — это нагрузка fill-in-the-middle, построенная вокруг моделей формата завершения, так что держите эту роль на вашей текущей FIM-настройке. embed и rerank — отдельные подсистемы и изменений не требуют.

Почему один блок модели работает, а другой возвращает 401?

Ключи в Continue назначаются на блок, так что работающий сосед ничего не доказывает про упавший блок. Проверьте значение apiKey упавшего блока или ссылку на секрет, а также его отступ: ключ с неверным отступом присоединяется не к той записи списка.

Что делает useLegacyCompletionsEndpoint и нужен ли он мне?

Он перенаправляет блок модели с /chat/completions на устаревший маршрут /completions. Для шлюза с chat-completions он не нужен; оставьте его неустановленным. Он существует для старых серверов, работающих только с completions.

Реально ли contextLength меняет поведение?

Да. Continue упаковывает контекст разговора и файлов согласно defaultCompletionOptions.contextLength. Занижение на модели с длинным контекстом незаметно отбрасывает контекст; задайте значение, равное тому, что модель реально поддерживает.