Направьте 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. Занижение на модели с длинным контекстом незаметно отбрасывает контекст; задайте значение, равное тому, что модель реально поддерживает.