Настройка OpenCode OpenAI-совместимого провайдера полезна, когда вы хотите, чтобы OpenCode обращался к маршруту модели, который ведет себя как OpenAI Chat Completions API, в то время как ваша команда сохраняет владение ключами, маршрутизацию моделей и анализ использования в одном шлюзе.
Важно то, что в OpenCode есть документированный путь для пользовательских провайдеров. В документации по провайдерам OpenCode, проверенной 8 июля 2026 года, последовательность действий такова: добавьте учетные данные с помощью /connect, выберите Other для провайдера, которого еще нет в списке, дайте этому провайдеру запоминающийся ID, настройте провайдера в opencode.json, а затем выполните /models, чтобы выбрать одну из настроенных моделей.
Flatkey подходит под эту схему в качестве шлюза, стоящего за провайдером. Вы оставляете OpenCode в качестве агента для кодирования, указываете провайдеру базовый URL OpenAI-совместимого API Flatkey и проверяете, что трафик моделей OpenCode появляется в журналах использования или запросов Flatkey, прежде чем сделать его маршрутом по умолчанию.
Краткий ответ по настройке OpenAI-совместимого провайдера в OpenCode
Используйте эту схему настройки, когда конечная точка модели совместима с Chat Completions.
| Решение | Рекомендуемое значение | Почему это важно |
|---|---|---|
| ID провайдера | flatkey |
ID должен совпадать между /connect, opencode.json и выбранными моделями. |
| NPM-пакет | @ai-sdk/openai-compatible |
Документация OpenCode указывает этот пакет для OpenAI-совместимых провайдеров, использующих /v1/chat/completions. |
| Базовый URL API OpenCode | https://router.flatkey.ai/v1 |
Публичный сайт Flatkey направляет OpenAI-совместимых клиентов на этот корневой API. |
| ID моделей | Текущие псевдонимы моделей Flatkey, доступные для вашего ключа | OpenCode использует настроенные ID моделей в средстве выбора /models. |
| Проверка | Ответ OpenCode плюс журнал запросов или использования Flatkey | Это доказывает, что запрос агента для кодирования использовал предполагаемый маршрут шлюза. |
| Откат | Сохраните предыдущее значение model и предыдущую конфигурацию провайдера |
Изменение провайдера должно быть обратимым без рефакторинга ваших промптов или рабочего процесса агента. |
Это руководство по настройке OpenAI-совместимого провайдера в OpenCode использует шаблоны. Проверьте точные псевдонимы моделей и семейство конечных точек в вашем аккаунте Flatkey, прежде чем маршрутизировать рабочие задачи агента для кодирования.
Что требуется для OpenCode
OpenCode имеет два отдельных элемента состояния для пользовательского провайдера.
| Уровень OpenCode | Что вы настраиваете | Поведение источника, которое нужно учитывать |
|---|---|---|
| Учетные данные | API-ключ, введенный через /connect в разделе Other |
ID провайдера, который вы вводите здесь, должен совпадать с ID провайдера в конфигурации. |
| Конфигурация провайдера | provider.<id> в opencode.json |
В конфигурации указываются пакет AI SDK, базовый URL, модели и необязательные заголовки или ссылки на API-ключ. |
| Выбор модели | Средство выбора /models или значение model по умолчанию |
Настроенные модели провайдера появляются после настройки провайдера. |
| Значения по умолчанию во время выполнения | model и необязательный small_model |
Конфигурация OpenCode поддерживает значения по умолчанию для провайдера/модели для обычных и легковесных задач. |
Конфигурация OpenCode может быть в формате JSON или JSONC. Вы можете разместить ее глобально по пути ~/.config/opencode/opencode.json или в корне проекта как opencode.json. Конфигурация проекта имеет более высокий стандартный приоритет, поэтому используйте файл проекта, если вы хотите протестировать Flatkey в одном репозитории, не изменяя каждое рабочее пространство OpenCode.
Шаг 1: Создайте ключ Flatkey для OpenCode
Создайте ключ Flatkey для этой рабочей нагрузки и запишите три значения вне системы контроля версий.
FLATKEY_API_KEY=sk-fk-your-key
FLATKEY_BASE_URL=https://router.flatkey.ai/v1
FLATKEY_MODEL=your-current-flatkey-model-alias
Держите корневой API отдельно от пути конечной точки. В конфигурации провайдера OpenCode следует использовать https://router.flatkey.ai/v1 в качестве options.baseURL; прямые дымовые тесты HTTP добавляют /chat/completions.
Перед подключением OpenCode выполните прямой тест с тем же ключом Flatkey и псевдонимом модели.
curl "$FLATKEY_BASE_URL/chat/completions" \
-H "Authorization: Bearer $FLATKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "'"$FLATKEY_MODEL"'",
"messages": [
{ "role": "user", "content": "Ответьте в точности: flatkey route ok" }
]
}'
Если этот прямой запрос не удался, исправьте ключ Flatkey, псевдоним модели, семейство конечных точек или маршрут учетной записи, прежде чем отлаживать OpenCode. OpenAI-совместимый провайдер OpenCode не может компенсировать псевдоним модели, который учетная запись шлюза не может вызвать.
Шаг 2: Добавьте учетные данные Flatkey в OpenCode
OpenCode хранит учетные данные провайдера через /connect. В TUI OpenCode:
/connect
Выберите Other, введите ID провайдера, например flatkey, затем вставьте API-ключ Flatkey. Не вставляйте базовый URL в поле для учетных данных. Ключ подтверждает личность; базовый URL должен находиться в opencode.json.
Используйте простой идентификатор провайдера. flatkey лучше, чем flatkey-prod-openai-compatible-gateway-v2, потому что вы будете вводить его в идентификаторах моделей и заметках по откату.
Шаг 3: Добавьте конфигурацию провайдера OpenCode
Создайте или обновите opencode.json в корне проекта, который вы хотите протестировать.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"flatkey": {
"npm": "@ai-sdk/openai-compatible",
"name": "Flatkey",
"options": {
"baseURL": "https://router.flatkey.ai/v1"
},
"models": {
"your-current-flatkey-model-alias": {
"name": "Flatkey primary model"
}
}
}
},
"model": "flatkey/your-current-flatkey-model-alias"
}
Это самая минимальная конфигурация для OpenAI-совместимого провайдера в OpenCode. Она предоставляет OpenCode провайдера с именем flatkey, указывает OpenCode использовать пакет AI SDK, совместимый с OpenAI, и отображает один псевдоним модели в средстве выбора моделей.
Если вы хотите, чтобы OpenCode использовал меньший маршрут для легковесных задач, добавьте small_model только после того, как основной маршрут заработает.
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"flatkey": {
"npm": "@ai-sdk/openai-compatible",
"name": "Flatkey",
"options": {
"baseURL": "https://router.flatkey.ai/v1"
},
"models": {
"primary-flatkey-model-alias": {
"name": "Flatkey primary"
},
"lighter-flatkey-model-alias": {
"name": "Flatkey lightweight"
}
}
}
},
"model": "flatkey/primary-flatkey-model-alias",
"small_model": "flatkey/lighter-flatkey-model-alias"
}
Используйте псевдонимы моделей, которые ваш ключ Flatkey действительно может вызывать. Если ваша учетная запись предоставляет аутентифицированный маршрут /v1/models, сравните настроенные идентификаторы моделей с этим ответом. В противном случае скопируйте псевдонимы из текущей панели управления Flatkey или каталога моделей и проверьте их с помощью реального запроса.
Шаг 4: Выберите и протестируйте модель в OpenCode
После сохранения конфигурации откройте средство выбора моделей.
/models
Выберите модель провайдера Flatkey. Затем выполните небольшой запрос в OpenCode:
Reply with exactly: opencode flatkey route ok
Пока не переносите весь рабочий процесс кодирования. Сначала сохраните компактный пакет верификации.
| Проверка | Условие прохождения | Данные для сохранения |
|---|---|---|
| Провайдер отображается | /models показывает настроенную модель Flatkey |
Скриншот или заметка в терминале с выбранным ID модели. |
| Аутентификация работает | OpenCode получает обычный ответ от модели, а не 401 или 403 |
Отредактированный владелец ключа, время ответа и временная метка запроса. |
| Базовый URL корректен | Нет дублирования /v1/v1, нет отсутствующего поведения /chat/completions |
Итоговый options.baseURL и прямая конечная точка curl. |
| Flatkey видит запрос | Запрос появляется в логах использования или запросов Flatkey | Временная метка запроса, псевдоним модели, поля токенов или единиц, метка ключа/рабочей нагрузки. |
| Возможность отката существует | Вы можете вернуться к предыдущему провайдеру/модели одним изменением конфигурации | Предыдущая model, предыдущий ID провайдера и предыдущий владелец ключа. |
Это превращает миграцию OpenAI-совместимого провайдера в OpenCode в небольшое операционное изменение вместо слепой замены провайдера.
Шаг 5: Разделяйте Chat Completions и Responses
В документации OpenCode по пользовательским провайдерам указано разграничение пакетов: используйте @ai-sdk/openai-compatible для OpenAI-совместимых провайдеров, которые используют /v1/chat/completions; если провайдер или модель используют /v1/responses, используйте @ai-sdk/openai.
Это означает, что первый маршрут Flatkey должен быть моделью в стиле Chat Completions, если у вас нет актуальных доказательств того, что выбранная вами модель и клиентский путь используют другое семейство конечных точек.
Используйте эту таблицу принятия решений перед добавлением новых моделей.
| Маршрут модели | Рекомендация по пакету OpenCode | Что тестировать |
|---|---|---|
| Совместимый с Chat Completions | @ai-sdk/openai-compatible |
Обычный чат, потоковая передача, поведение вызова инструментов при необходимости. |
| Маршрут в стиле Responses | @ai-sdk/openai согласно документации OpenCode |
Создание ответа, обработка инструментов и парсинг вывода. |
| Смешанные маршруты в рамках одного провайдера | Переопределение пакета для каждой модели, если ваша конфигурация это использует | По одной модели за раз, с отдельными логами. |
Для большинства настроек начинайте с одного маршрута Chat Completions. Добавляйте потоковую передачу, вызовы инструментов и вторичные псевдонимы моделей после того, как первый дымовой тест OpenAI-совместимого провайдера в OpenCode станет виден в Flatkey.
Шаг 6: Добавьте средства управления для команды после того, как маршрут заработает
Как только OpenCode сможет вызывать Flatkey, сделайте маршрут наблюдаемым.
| Контроль | Почему это помогает |
|---|---|
| Именование ключа | Присвойте ключу метку для OpenCode, среды, команды или репозитория. |
| Утверждение модели | Ограничьте первую конфигурацию утвержденными псевдонимами, прежде чем добавлять широкий выбор моделей. |
| Проверка использования | Проверяйте журналы запросов или использования Flatkey по временной метке после каждого теста OpenCode. |
| Проверка затрат | Сопоставьте использование модели, токенов и ключа с владельцем бюджета. |
| Политика тайм-аута | Используйте опции провайдера OpenCode только после того, как убедитесь, что базовый маршрут работает. |
| Заметка для отката | Сохраните предыдущие значения провайдера и модели, прежде чем делать Flatkey провайдером по умолчанию. |
Именно здесь Flatkey становится чем-то большим, чем просто базовый URL. Рабочий OpenAI-совместимый провайдер для OpenCode также должен предоставлять командам платформы, финансов и эксплуатации место для анализа использования моделей и изменения маршрута, не требуя от каждого разработчика управления отдельными учетными записями провайдеров.
Для более широкого планирования миграции используйте это руководство вместе с руководством по миграции OpenAI-совместимого API от Flatkey. Если вы сравниваете смежные инструменты для кодирования, ознакомьтесь с руководством по настройке OpenAI-совместимого провайдера для Continue.dev и руководством по настройке OpenAI-совместимого API для Roo Code.
Устранение неполадок с OpenAI-совместимым провайдером для OpenCode
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
Провайдер не отображается в /models |
Несоответствие ID провайдера или конфигурация не загружена | Убедитесь, что ID в /connect и ключ provider оба имеют значение flatkey; убедитесь, что файл конфигурации находится в корне проекта или в ожидаемом глобальном пути конфигурации. |
401 или 403 |
Отсутствует, отозван или неверный ключ Flatkey | Повторно введите учетные данные с помощью /connect; никогда не выводите полный ключ в журналы. |
404 |
Неверный корневой URL API или семейство конечных точек | options.baseURL должен быть корневым URL API, а не полным URL, таким как /chat/completions. |
| Модель не найдена | Псевдоним недоступен для ключа или семейства конечных точек | Проверьте псевдоним модели в Flatkey и выполните один прямой тестовый запрос. |
| Потоковая передача зависает | Проблема с возможностями маршрута, поддержкой модели или тайм-аутом фрагмента | Сначала проверьте работу чата без потоковой передачи, затем при необходимости настройте chunkTimeout в OpenCode. |
| Данные об использовании отсутствуют в Flatkey | Запрос не прошел через Flatkey или журналы отфильтрованы | Выполните поиск по временной метке, метке ключа, псевдониму модели и среде. |
| Функции ответов не работают | Неверный пакет для семейства конечных точек | Перепроверьте, использует ли выбранный маршрут /v1/chat/completions или /v1/responses. |
Если первый запрос не удался, пока не меняйте промпты, агентов, разрешения или код репозитория. Ограничьте область отладки OpenAI-совместимого провайдера для OpenCode до минимума: учетные данные, ID провайдера, базовый URL, пакет, псевдоним модели и один простой запрос в чат.
Итоговый чек-лист
Прежде чем использовать Flatkey в качестве маршрута по умолчанию для OpenCode, убедитесь в следующем:
- В
/connectесть учетные данные Flatkey с тем же ID провайдера, который используется вopencode.json. provider.flatkey.npmимеет значение@ai-sdk/openai-compatibleдля маршрута Chat Completions.provider.flatkey.options.baseURLимеет значениеhttps://router.flatkey.ai/v1.modelуказывает на настроенное значениеflatkey/<model-alias>.- В
/modelsотображается настроенная модель Flatkey. - Однострочный промпт в OpenCode успешно возвращает ответ.
- В журналах использования или запросов Flatkey отображается тестовый запрос от OpenCode.
- Предыдущий маршрут провайдера/модели задокументирован для возможности отката.
Настройка OpenAI-совместимого провайдера для OpenCode считается завершенной, когда провайдер настроен, доступен для выбора, проверен в журналах Flatkey и его изменения обратимы. Когда вы будете готовы маршрутизировать трафик моделей для кодирования через один ключ, получите ключ Flatkey и начните с одного низкорискового промпта в OpenCode.



