APIMaster.ai

Настройка API-ключа OpenCode AI — конфигурация, совместимая с OpenAI

Как настроить OpenCode AI с пользовательским API-ключом от APIMaster.ai. Добавьте APIMaster как совместимого с OpenAI провайдера в opencode.jsonc и получите доступ к Claude, GPT-5.5 и DeepSeek с вводом изображений (Vision) и опциональными уровнями Reasoning.

OpenCode Desktop — это графический клиент для OpenCode (сейчас в бета-версии): локальные сессии агентов, редактирование файлов и выполнение shell-команд. APIMaster.ai совместим с OpenAI — добавьте его через Настройки → Провайдеры → Пользовательский провайдер.

Сначала получите API-ключ. Используйте заглушку your_apimaster_key ниже; на скриншотах ключи скрыты.


Предварительные требования

  1. OpenCode Desktop установлен с opencode.ai/download.
    • Windows: opencode-desktop-win-x64.exe
    • macOS: brew install --cask opencode-desktop или .dmg
    • Linux: .deb / .rpm / AppImage
  2. API-ключ APIMaster из консоли.

Шаг 1 — Открыть Провайдеров

  1. Запустите OpenCode Desktop и откройте рабочее пространство.
  2. Нажмите на значок шестеренки (внизу слева).
  3. Выберите Провайдеры на боковой панели.
  4. Прокрутите до Пользовательский провайдер (Добавить провайдера, совместимого с OpenAI, по базовому URL).
  5. Нажмите + Подключить.

Настройки → Провайдеры → Пользовательский провайдер


Шаг 2 — Форма пользовательского провайдера

Поле Значение
ID провайдера apimaster
Отображаемое имя APIMaster.ai
Базовый URL https://apimaster.ai/v1
API-ключ Ваш ключ APIMaster

Форма пользовательского провайдера

Оставьте Заголовки пустыми, если вы не аутентифицируетесь только через заголовки.


Шаг 3 — Добавить модели и Отправить

На следующем экране сопоставьте модели (слева = метка в OpenCode, справа = id модели, отправляемый в APIMaster — обычно одинаковые):

Слева Справа
gpt-5.4 gpt-5.4
claude-sonnet-4-6 claude-sonnet-4-6
  1. Нажмите + Добавить модель для добавления строк.
  2. Нажмите Отправить.

Добавить модели и Отправить

Выбирайте id из маркетплейса. Избегайте моделей только для генерации изображений (например, gpt-image-2) для чата с агентом.

Нужно распознавание изображений (Vision)? gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 и claude-haiku-4-5 поддерживают ввод изображений, но OpenCode требует дополнительного объявления возможности — см. Включение ввода изображений для GPT и Claude.


Шаг 4 — Выбрать модель

  1. Начните или откройте сессию.
  2. Откройте выпадающий список моделей под полем ввода.
  3. В разделе APIMaster.ai выберите модель (например, claude-sonnet-4-6).

Выбор модели


Шаг 5 — Тест

Отправьте hello или небольшое задание по коду. Обычный ответ Ассистента (редактирование файлов / shell) означает, что APIMaster подключен.

Тест чата


Расширенная настройка: opencode.jsonc и Reasoning

Описанного выше интерфейса достаточно для быстрого старта. Чтобы настроить уровни Reasoning / усилия мышления (low, high, max, …) для одного и того же id модели, отредактируйте opencode.jsonc.

Расположение файла конфигурации

ОС Путь
macOS / Linux ~/.config/opencode/opencode.jsonc
Windows C:\Users\<имя_пользователя>\.config\opencode\opencode.jsonc

Создайте файл, если его нет. Перезапустите OpenCode Desktop или начните новую сессию после сохранения.

API-ключ (не помещайте в jsonc)

Не храните ваш API-ключ в opencode.jsonc.

Используйте:

  • /connect в терминале, или
  • Настройки → Провайдеры → Подключить провайдера (как на Шагах 1–2 выше).

Храните секреты в хранилище аутентификации OpenCode; jsonc определяет только провайдера, модели и варианты Reasoning.

Провайдер APIMaster в jsonc

ID провайдера: apimaster. npm-пакет: @ai-sdk/openai-compatible.

baseURL должен быть:

https://apimaster.ai/v1

Не https://apimaster.ai/ — OpenCode добавляет /chat/completions. Без /v1 вы получите https://apimaster.ai/chat/completions404 Not Found.

Также не https://api.apimaster.ai/v1 — хост с префиксом api. может вызывать сбои TLS / подключения при тестировании. Правильный хост — https://apimaster.ai/v1.

Полный пример с вариантами Reasoning — скачайте и замените конфиг OpenCode:

  1. Скачайте opencode.jsonc
  2. Замените (или сохраните как):
    • macOS / Linux: ~/.config/opencode/opencode.jsonc
    • Windows: C:\Users\<имя_пользователя>\.config\opencode\opencode.jsonc
  3. Настройте API-ключ через /connect или интерфейс (никогда в jsonc).
  4. Перезапустите OpenCode Desktop или начните новую сессию.

Сделайте резервную копию существующего файла перед заменой или объедините только блок provider.apimaster.

Минимальная структура:

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "apimaster": {
      "name": "APIMaster.ai",
      "npm": "@ai-sdk/openai-compatible",
      "options": { "baseURL": "https://apimaster.ai/v1" },
      "models": {
        "gpt-5.5": {
          "name": "gpt-5.5",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "variants": {
            "low": { "reasoningEffort": "low" },
            "high": { "reasoningEffort": "high" }
          }
        }
      }
    }
  }
}

Поля attachment и modalities у gpt-5.5 выше включают ввод изображений (Vision) — см. Включение ввода изображений для GPT и Claude. Опустите их, если вам нужен только текстовый чат.

Принципы Reasoning

  • variants = несколько уровней Reasoning для одного id модели в интерфейсе.
  • Для API, совместимых с OpenAI, OpenCode преобразует reasoningEffortreasoning_effort в теле запроса.
  • Имена вариантов должны соответствовать фактическому параметру (high"reasoningEffort": "high").
  • Каждая модель поддерживает разные уровни — настраивайте в соответствии с официальной документацией; скрытого переназначения нет.

Уровни Reasoning по моделям

Модель Варианты Reasoning Примечания
gpt-5.4 low, medium, high, xhigh GPT reasoning
gpt-5.5 low, medium, high, xhigh GPT reasoning
deepseek-v4-flash high, max DeepSeek thinking (рекомендуется)
deepseek-v4-pro high, max DeepSeek thinking (рекомендуется)
claude-sonnet-4-6 low, medium, high, max Claude Sonnet effort
claude-opus-4-7 low, medium, high, xhigh, max Claude Opus effort
claude-opus-4-8 low, medium, high, xhigh, max Claude Opus effort
claude-haiku-4-5 нет Нет неподтвержденных уровней effort
minimax-m3 нет Нет неподтвержденных уровней effort

Полный файл см. в opencode.jsonc.

Переключение Reasoning в OpenCode

  1. Сохраните opencode.jsonc, затем перезапустите или начните новую сессию.
  2. Используйте выпадающий список модели / Reasoning (например, gpt-5.4 / high).
  3. Если поддерживается в вашей сборке: Ctrl + Shift + D циклически переключает уровни Reasoning.

Включение ввода изображений для GPT и Claude

Модели APIMaster.ai, такие как gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 и claude-haiku-4-5, поддерживают ввод изображений / Vision — чтение скриншотов, фотографий, диаграмм для распознавания, описания, OCR или программирования по изображению.

Поддержка изображений моделью ≠ отправка изображения OpenCode. Даже если сама модель APIMaster.ai поддерживает Vision, вы должны объявить эту возможность в opencode.jsonc. Иначе OpenCode может не отправить изображение как мультимодальный ввод — он просто вставляет имя вложения / файла в промпт, и модель отвечает что-то вроде «текущая модель не поддерживает ввод изображений».

Два поля для объявления

Для каждой модели, которую вы хотите использовать с изображениями, добавьте:

"attachment": true,
"modalities": {
  "input": ["text", "image"],
  "output": ["text"]
}
  • attachment: true сообщает OpenCode, что эта модель принимает вложения.
  • modalities.input, содержащий "image", сообщает OpenCode, что эта модель поддерживает ввод изображений, поэтому OpenCode преобразует изображение в мультимодальный контент image_url.

Полный пример (GPT и Claude)

Скачайте opencode.jsonc (поля уже включены) или объедините блок provider.apimaster ниже с вашей существующей конфигурацией:

{
  "$schema": "https://opencode.ai/config.json",
  "disabled_providers": [],
  "provider": {
    "apimaster": {
      "name": "APIMaster.ai",
      "npm": "@ai-sdk/openai-compatible",
      "options": {
        "baseURL": "https://apimaster.ai/v1"
      },
      "models": {
        "gpt-5.5": {
          "name": "gpt-5.5",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "variants": {
            "low": { "reasoningEffort": "low" },
            "medium": { "reasoningEffort": "medium" },
            "high": { "reasoningEffort": "high" },
            "xhigh": { "reasoningEffort": "xhigh" }
          }
        },
        "claude-sonnet-4-6": {
          "name": "claude-sonnet-4-6",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "variants": {
            "low": { "reasoningEffort": "low" },
            "medium": { "reasoningEffort": "medium" },
            "high": { "reasoningEffort": "high" },
            "max": { "reasoningEffort": "max" }
          }
        },
        "claude-opus-4-7": {
          "name": "claude-opus-4-7",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "variants": {
            "low": { "reasoningEffort": "low" },
            "medium": { "reasoningEffort": "medium" },
            "high": { "reasoningEffort": "high" },
            "xhigh": { "reasoningEffort": "xhigh" },
            "max": { "reasoningEffort": "max" }
          }
        },
        "claude-opus-4-8": {
          "name": "claude-opus-4-8",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          },
          "variants": {
            "low": { "reasoningEffort": "low" },
            "medium": { "reasoningEffort": "medium" },
            "high": { "reasoningEffort": "high" },
            "xhigh": { "reasoningEffort": "xhigh" },
            "max": { "reasoningEffort": "max" }
          }
        },
        "claude-haiku-4-5": {
          "name": "claude-haiku-4-5",
          "attachment": true,
          "modalities": {
            "input": ["text", "image"],
            "output": ["text"]
          }
        }
      }
    }
  }
}

Примечания:

  • Чтобы включить ввод изображений только для gpt-5.5, добавьте attachment и modalities только к gpt-5.5; остальные оставьте без изменений.
  • Чтобы включить только Claude, добавьте эти поля только к моделям Claude.
  • Сохраните существующие варианты Reasoning каждой модели (low / medium / high / xhigh / max) — поля изображений и Reasoning не конфликтуют.
  • После редактирования opencode.jsonc полностью закройте и перезапустите OpenCode или хотя бы начните новую сессию, чтобы конфигурация перезагрузилась.
  • Никогда не помещайте API-ключ в этот файл — настраивайте его через /connect или интерфейс (см. Безопасность ниже).

Источник изображения: предпочтительна локальная загрузка / base64

  • Рекомендуется: загружайте локальный PNG / JPG в OpenCode. В идеале OpenCode преобразует его в data URL base64 (data:image/png;base64,...) перед отправкой в APIMaster — это проверенный рабочий путь.
  • Передача публичного URL изображения напрямую может не сработать. APIMaster / вышестоящий провайдер может не суметь скачать публичное изображение из-за сети, формата, размера, MIME или защиты от хотлинкинга, возвращая:
    Error while downloading file. Upstream status code: 400.
    
    В этом случае используйте data URL base64 или локальную загрузку вместо того, чтобы полагаться на скачивание публичного URL со стороны модели.

Проверка работы распознавания изображений

Вариант A — Тест в OpenCode

  1. Переключитесь на apimaster/gpt-5.5 или apimaster/claude-sonnet-4-6 в выпадающем списке моделей.
  2. Загрузите изображение PNG / JPG.
  3. Введите:
    Describe the main content of this image.
    
  • При правильной конфигурации модель должна описать содержимое изображения.
  • Если модель упоминает только имя файла / вложения или отвечает «image input not supported», OpenCode, вероятно, не отправляет содержимое изображения — проверьте поля attachment и modalities модели и перезапустите OpenCode.

Вариант B — Тест напрямую через API

Полезно, чтобы отличить проблему модели APIMaster от проблемы адаптера OpenCode. Никогда не прописывайте реальный ключ жестко — используйте переменную окружения.

Linux / macOS:

export APIMASTER_API_KEY="your APIMaster API key"

curl https://apimaster.ai/v1/chat/completions \
  -H "Authorization: Bearer $APIMASTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [
      {
        "role": "user",
        "content": [
          { "type": "text", "text": "Describe this image." },
          {
            "type": "image_url",
            "image_url": {
              "url": "data:image/png;base64,YOUR_IMAGE_BASE64"
            }
          }
        ]
      }
    ],
    "max_tokens": 1000
  }'

Замените model на claude-sonnet-4-6, чтобы протестировать Claude тем же способом (проверено HTTP 200 с распознаванием изображений).

Windows PowerShell:

$env:APIMASTER_API_KEY = "your APIMaster API key"
# Convert a local image to base64, put it into image_url.url as data:image/png;base64,...
# Then call https://apimaster.ai/v1/chat/completions with the same JSON body.

Ответ 200 с описанием изображения означает, что ввод изображений работает на стороне APIMaster; если OpenCode все еще не работает, проблема в конфигурации attachment / modalities OpenCode или в отсутствии перезапуска.


Устранение неполадок

Настройка через интерфейс

Проблема Решение
401 Проверьте ключ; смените, если был раскрыт
Модель не найдена Базовый URL должен быть https://apimaster.ai/v1; id модели должен совпадать с маркетплейсом
Нет моделей APIMaster Отредактируйте провайдера в Настройках → добавьте сопоставления → Отправить
Медленно / таймаут Попробуйте другую модель; используйте Тестер API-ключей

Reasoning / jsonc

Почему только high и max для DeepSeek?
Официальное усилие мышления, совместимое с OpenAI для DeepSeek, — это high и max. Избегайте low / medium / xhigh, которые могут непредсказуемо переназначаться.

Почему max для Claude Sonnet, а не xhigh?
Высший уровень Sonnet — max; xhigh предназначен для Opus (claude-opus-4-7 / claude-opus-4-8).

Почему нет вариантов для Haiku или MiniMax M3?
Без задокументированных значений reasoningEffort пропустите варианты — модель все равно работает; в интерфейсе просто не будут отображаться подуровни Reasoning.

Все еще получаете 400?

  1. baseURL = https://apimaster.ai/v1 (не корень сайта).
  2. Написание id модели соответствует маркетплейсу.
  3. Ключ настроен через /connect или интерфейс.
  4. Временно удалите variants — если обычные запросы работают, выбранный reasoning_effort может не поддерживаться для этой модели.

Ввод изображений / Vision

Почему OpenCode пишет «текущая модель не поддерживает ввод изображений»?

  • gpt-5.5 и несколько моделей Claude от APIMaster.ai поддерживают ввод изображений; это сообщение обычно означает, что OpenCode не отправляет изображение как мультимодальный ввод.
  • Проверьте, что у модели в opencode.jsonc есть:
    "attachment": true,
    "modalities": {
      "input": ["text", "image"],
      "output": ["text"]
    }
    
  • Убедитесь, что вы перезапустили OpenCode после редактирования.
  • Убедитесь, что baseURL — это https://apimaster.ai/v1.
  • Убедитесь, что API-ключ APIMaster действителен.
  • Если публичный URL изображения не работает, используйте data URL base64 или локальную загрузку.

Почему модель видит только имя вложения, а не изображение?

  • Обычно OpenCode не прочитал и не преобразовал вложение в ввод изображения — он просто вставил имя файла / вложения в промпт.
  • Включите attachment: true и modalities.input: ["text", "image"] и используйте модель, поддерживающую ввод изображений.

Почему публичный URL изображения выдает ошибку?

  • APIMaster или вышестоящий провайдер может быть ограничен сетью, форматом, размером файла, MIME, защитой от хотлинкинга или прокси при скачивании публичного изображения.
  • При Error while downloading file. Upstream status code: 400. переключитесь на data URL base64.

Все еще не работает после добавления attachment?

  1. Полностью закройте и перезапустите OpenCode.
  2. Начните новую сессию для теста.
  3. Убедитесь, что активная модель сессии та самая, которую вы настроили с полями изображений.
  4. Убедитесь, что API-ключ действителен.
  5. Проверьте логи OpenCode на ошибки 401 / 400 / unsupported image / invalid content type.
  6. Используйте Вариант B — Тест напрямую через API с изображением base64, чтобы отделить проблему модели APIMaster от проблемы адаптера OpenCode.

Безопасность

  • Не помещайте API-ключ APIMaster в opencode.jsonc; этот файл содержит только провайдера, модели, возможности изображений и Reasoning.
  • Не вставляйте ключ в чат, скриншоты, issue, публичную документацию или репозитории кода.
  • Меняйте ключи, которые появились на скриншотах или в логах — отзовите и создайте заново в консоли, затем обновите провайдера в OpenCode.
  • Предпочитайте поток /connect в OpenCode, переменные окружения или локальное хранилище учетных данных для управления API-ключом.
  • OpenCode может читать/записывать файлы и выполнять shell-команды — используйте только доверенные рабочие пространства.

Контрольный список

  • OpenCode Desktop установлен
  • Пользовательский провайдер подключен или apimaster в opencode.jsonc
  • Базовый URL / baseURL = https://apimaster.ai/v1 (не https://apimaster.ai/)
  • API-ключ через /connect или интерфейс (не в jsonc)
  • Сопоставлена хотя бы одна чат-модель
  • (Опционально) Варианты Reasoning соответствуют официальным уровням
  • Тестовое сообщение успешно отправлено

Контрольный список ввода изображений

  • baseURL — это https://apimaster.ai/v1 (не https://api.apimaster.ai/v1)
  • Используется модель с поддержкой Vision, например gpt-5.5 или Claude с поддержкой Vision
  • У модели есть attachment: true
  • modalities.input модели содержит "image"
  • OpenCode перезапущен после редактирования opencode.jsonc
  • API-ключ действителен
  • Тестовое изображение в распространенном формате (PNG / JPG)
  • Если публичный URL изображения не работает, попробован data URL base64

Краткий итог

  • Ключи: baseURL (https://apimaster.ai/v1), id модели, API-ключ (/connect или интерфейс), опциональные варианты Reasoning.
  • Имена вариантов = фактические значения reasoning_effort.
  • Настраивайте уровни для каждой модели; пропускайте варианты, если они не поддерживаются (Haiku, MiniMax M3).

Смотрите также