APIMaster.ai

Konfiguracja klucza API OpenCode AI — ustawienia zgodne z OpenAI

Jak skonfigurować OpenCode AI z własnym kluczem API z APIMaster.ai. Dodaj APIMaster jako dostawcę zgodnego z OpenAI w opencode.jsonc i uzyskaj dostęp do Claude, GPT-5.5 oraz DeepSeek z obsługą wejścia obrazów (Vision) i opcjonalnymi poziomami Reasoning.

OpenCode Desktop to graficzny klient dla OpenCode (obecnie wersja beta): lokalne sesje agenta, edycja plików i wykonywanie poleceń powłoki. APIMaster.ai jest zgodny z OpenAI – dodaj go w Ustawienia → Dostawcy → Własny dostawca.

Najpierw uzyskaj klucz API. Użyj poniżej zastępczego twoj_klucz_apimaster; zrzuty ekranu maskują prawdziwe klucze.


Wymagania wstępne

  1. OpenCode Desktop zainstalowany ze strony opencode.ai/download.
    • Windows: opencode-desktop-win-x64.exe
    • macOS: brew install --cask opencode-desktop lub .dmg
    • Linux: .deb / .rpm / AppImage
  2. Klucz API APIMaster z konsoli.

Krok 1 – Otwórz dostawców

  1. Uruchom OpenCode Desktop i otwórz obszar roboczy.
  2. Kliknij ikonę koła zębatego (lewy dolny róg).
  3. Wybierz Dostawcy w panelu bocznym.
  4. Przewiń do Własny dostawca (Dodaj dostawcę zgodnego z OpenAI za pomocą podstawowego adresu URL).
  5. Kliknij + Połącz.

Ustawienia → Dostawcy → Własny dostawca


Krok 2 – Formularz własnego dostawcy

Pole Wartość
Identyfikator dostawcy apimaster
Nazwa wyświetlana APIMaster.ai
Podstawowy URL https://apimaster.ai/v1
Klucz API Twój klucz APIMaster

Formularz własnego dostawcy

Pozostaw Nagłówki puste, chyba że uwierzytelniasz się wyłącznie przez nagłówki.


Krok 3 – Dodaj modele i zatwierdź

Na następnym ekranie przypisz modele (lewa strona = etykieta w OpenCode, prawa strona = identyfikator modelu wysyłany do APIMaster – zazwyczaj ten sam):

Lewa Prawa
gpt-5.4 gpt-5.4
claude-sonnet-4-6 claude-sonnet-4-6
  1. Kliknij + Dodaj model, aby dodać więcej wierszy.
  2. Kliknij Zatwierdź.

Dodaj modele i zatwierdź

Wybierz identyfikatory z rynku. Unikaj modeli służących tylko do generowania obrazów (np. gpt-image-2) w czacie agenta.

Potrzebujesz rozpoznawania obrazów (Vision)? gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 oraz claude-haiku-4-5 obsługują wejście obrazów, ale OpenCode wymaga dodatkowej deklaracji możliwości – zobacz Włącz wejście obrazów dla GPT i Claude.


Krok 4 – Wybierz model

  1. Rozpocznij lub otwórz sesję.
  2. Otwórz menu rozwijane modelu poniżej pola wprowadzania.
  3. W sekcji APIMaster.ai wybierz model (np. claude-sonnet-4-6).

Wybór modelu


Krok 5 – Test

Wyślij hello lub małe zadanie programistyczne. Normalna odpowiedź asystenta (edycja plików / powłoka) oznacza, że APIMaster jest podłączony.

Test czatu


Zaawansowane: opencode.jsonc i Reasoning

Powyższy interfejs GUI wystarczy do szybkiego startu. Aby skonfigurować poziomy Reasoning / wysiłek myślenia (low, high, max, …) dla tego samego identyfikatora modelu, edytuj opencode.jsonc.

Lokalizacja pliku konfiguracyjnego

System Ścieżka
macOS / Linux ~/.config/opencode/opencode.jsonc
Windows C:\Users\<nazwa_użytkownika>\.config\opencode\opencode.jsonc

Utwórz plik, jeśli nie istnieje. Uruchom ponownie OpenCode Desktop lub rozpocznij nową sesję po zapisaniu.

Klucz API (nie umieszczaj w jsonc)

Nie przechowuj swojego klucza API w opencode.jsonc.

Użyj:

  • /connect w terminalu, lub
  • Ustawienia → Dostawcy → Połącz dostawcę (tak samo jak w krokach 1–2 powyżej).

Przechowuj sekrety w magazynie uwierzytelniania OpenCode; jsonc definiuje tylko dostawcę, modele i warianty Reasoning.

Dostawca APIMaster w jsonc

Identyfikator dostawcy: apimaster. Pakiet npm: @ai-sdk/openai-compatible.

baseURL musi być:

https://apimaster.ai/v1

Nie https://apimaster.ai/ – OpenCode dodaje /chat/completions. Bez /v1 otrzymasz https://apimaster.ai/chat/completions404 Nie znaleziono.

Również nie https://api.apimaster.ai/v1 – host z prefiksem api. może powodować błędy TLS / połączenia podczas testów. Poprawny host to https://apimaster.ai/v1.

Pełny przykład z wariantami Reasoning – pobierz i zastąp konfigurację OpenCode:

  1. Pobierz opencode.jsonc
  2. Zastąp (lub zapisz jako):
    • macOS / Linux: ~/.config/opencode/opencode.jsonc
    • Windows: C:\Users\<nazwa_użytkownika>\.config\opencode\opencode.jsonc
  3. Skonfiguruj klucz API przez /connect lub GUI (nigdy w jsonc).
  4. Uruchom ponownie OpenCode Desktop lub rozpocznij nową sesję.

Zrób kopię zapasową istniejącego pliku przed zastąpieniem lub scal tylko blok provider.apimaster.

Minimalna struktura:

{
  "$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" }
          }
        }
      }
    }
  }
}

Pola attachment i modalities na gpt-5.5 powyżej włączają wejście obrazów (Vision) – zobacz Włącz wejście obrazów dla GPT i Claude. Pomiń je, jeśli potrzebujesz tylko czatu tekstowego.

Zasady Reasoning

  • variants = wiele poziomów Reasoning dla jednego identyfikatora modelu w GUI.
  • Dla API zgodnych z OpenAI, OpenCode mapuje reasoningEffortreasoning_effort w treści żądania.
  • Nazwy wariantów powinny odpowiadać rzeczywistemu parametrowi (high"reasoningEffort": "high").
  • Każdy model obsługuje inne poziomy – skonfiguruj zgodnie z oficjalną dokumentacją; nie ma ukrytego mapowania.

Poziomy Reasoning według modelu

Model Warianty Reasoning Uwagi
gpt-5.4 low, medium, high, xhigh Reasoning GPT
gpt-5.5 low, medium, high, xhigh Reasoning GPT
deepseek-v4-flash high, max Myślenie DeepSeek (zalecane)
deepseek-v4-pro high, max Myślenie DeepSeek (zalecane)
claude-sonnet-4-6 low, medium, high, max Wysiłek Claude Sonnet
claude-opus-4-7 low, medium, high, xhigh, max Wysiłek Claude Opus
claude-opus-4-8 low, medium, high, xhigh, max Wysiłek Claude Opus
claude-haiku-4-5 brak Brak niepotwierdzonych poziomów wysiłku
minimax-m3 brak Brak niepotwierdzonych poziomów wysiłku

Pełny plik znajdziesz w opencode.jsonc.

Przełączanie Reasoning w OpenCode

  1. Zapisz opencode.jsonc, następnie uruchom ponownie lub nowa sesja.
  2. Użyj menu rozwijanego model / Reasoning (np. gpt-5.4 / high).
  3. Jeśli obsługiwane w twojej kompilacji: Ctrl + Shift + D cyklicznie przełącza poziomy Reasoning.

Włącz wejście obrazów dla GPT i Claude

Modele APIMaster.ai, takie jak gpt-5.5, claude-sonnet-4-6, claude-opus-4-7, claude-opus-4-8 oraz claude-haiku-4-5, obsługują wejście obrazów / Vision – odczytywanie zrzutów ekranu, zdjęć, wykresów w celu rozpoznawania, opisywania, OCR lub kodowania na podstawie obrazu.

Obsługa obrazów przez model ≠ wysłanie obrazu przez OpenCode. Nawet jeśli sam model APIMaster.ai obsługuje Vision, musisz zadeklarować tę możliwość w opencode.jsonc. W przeciwnym razie OpenCode może nie wysłać obrazu jako wejścia multimodalnego – umieści jedynie nazwę załącznika / pliku w promptcie, a model odpowie coś w stylu „bieżący model nie obsługuje wejścia obrazów”.

Dwa pola do zadeklarowania

Dla każdego modelu, którego chcesz używać z obrazami, dodaj:

"attachment": true,
"modalities": {
  "input": ["text", "image"],
  "output": ["text"]
}
  • attachment: true informuje OpenCode, że ten model przyjmuje załączniki.
  • modalities.input zawierające "image" informuje OpenCode, że ten model obsługuje wejście obrazów, więc OpenCode konwertuje obraz na multimodalną treść image_url.

Pełny przykład (GPT i Claude)

Pobierz opencode.jsonc (pola już zawarte) lub scal poniższy blok provider.apimaster z istniejącą konfiguracją:

{
  "$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"]
          }
        }
      }
    }
  }
}

Uwagi:

  • Aby włączyć wejście obrazów tylko dla gpt-5.5, dodaj attachment i modalities wyłącznie do gpt-5.5; pozostaw inne bez zmian.
  • Aby włączyć tylko Claude, dodaj te pola wyłącznie do modeli Claude.
  • Zachowaj istniejące warianty Reasoning każdego modelu (low / medium / high / xhigh / max) – pola obrazów i Reasoning nie kolidują ze sobą.
  • Po edycji opencode.jsonc całkowicie zamknij i uruchom ponownie OpenCode lub przynajmniej rozpocznij nową sesję, aby konfiguracja została przeładowana.
  • Nigdy nie umieszczaj klucza API w tym pliku – skonfiguruj go przez /connect lub GUI (zobacz Bezpieczeństwo poniżej).

Źródło obrazu: preferuj lokalne przesyłanie / base64

  • Zalecane: prześlij lokalny plik PNG / JPG w OpenCode. Idealnie OpenCode konwertuje go na base64 data URL (data:image/png;base64,...) przed wysłaniem do APIMaster – to zweryfikowana, działająca ścieżka.
  • Bezpośrednie przekazanie publicznego URL obrazu może się nie powieść. APIMaster / usługa nadrzędna mogą nie pobrać publicznego obrazu z powodu sieci, formatu, rozmiaru, MIME lub ochrony przed hotlinkingiem, zwracając:
    Error while downloading file. Upstream status code: 400.
    
    W takim przypadku użyj base64 data URL lub lokalnego przesyłania zamiast polegać na tym, że model pobierze publiczny URL.

Sprawdź, czy rozpoznawanie obrazów działa

Opcja A – Test w OpenCode

  1. Przełącz się na apimaster/gpt-5.5 lub apimaster/claude-sonnet-4-6 w menu rozwijanym modelu.
  2. Prześlij obraz PNG / JPG.
  3. Wpisz:
    Describe the main content of this image.
    
  • Przy poprawnej konfiguracji model powinien opisać treść obrazu.
  • Jeśli model wspomina jedynie o nazwie pliku / załącznika lub odpowiada „image input not supported”, OpenCode prawdopodobnie nie wysyła treści obrazu – sprawdź pola attachment i modalities modelu oraz uruchom ponownie OpenCode.

Opcja B – Test bezpośrednio przez API

Przydatne do odróżnienia problemu z modelem APIMaster od problemu z adapterem OpenCode. Nigdy nie umieszczaj prawdziwego klucza na stałe – użyj zmiennej środowiskowej.

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
  }'

Zmień model na claude-sonnet-4-6, aby przetestować Claude w ten sam sposób (zweryfikowane HTTP 200 z rozpoznawaniem obrazów).

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.

Odpowiedź 200, która opisuje obraz, oznacza, że wejście obrazów działa po stronie APIMaster; jeśli OpenCode nadal zawodzi, problem tkwi w konfiguracji attachment / modalities OpenCode lub w braku ponownego uruchomienia.


Rozwiązywanie problemów

Konfiguracja przez GUI

Problem Rozwiązanie
401 Sprawdź klucz; wygeneruj nowy, jeśli został ujawniony
Model nie znaleziony Podstawowy URL musi być https://apimaster.ai/v1; identyfikator modelu musi zgadzać się z rynkiem
Brak modeli APIMaster Edytuj dostawcę w Ustawieniach → dodaj mapowania → Zatwierdź
Wolno / przekroczenie czasu Wypróbuj inny model; użyj Testera kluczy API

Reasoning / jsonc

Dlaczego tylko high i max dla DeepSeek?
Oficjalny wysiłek myślenia zgodny z OpenAI dla DeepSeek to high i max. Unikaj low / medium / xhigh, które są nieprzewidywalnie mapowane.

Dlaczego max dla Claude Sonnet, a nie xhigh?
Najwyższy poziom Sonnet to max; xhigh jest dla Opus (claude-opus-4-7 / claude-opus-4-8).

Dlaczego brak wariantów dla Haiku lub MiniMax M3?
Bez udokumentowanych wartości reasoningEffort, pomiń warianty – model nadal działa; GUI po prostu nie pokaże podpoziomów Reasoning.

Nadal błąd 400?

  1. baseURL = https://apimaster.ai/v1 (nie główna strona).
  2. Pisownia identyfikatora modelu zgadza się z rynkiem.
  3. Klucz skonfigurowany przez /connect lub GUI.
  4. Tymczasowo usuń variants – jeśli zwykłe żądania działają, wybrany reasoning_effort może być nieobsługiwany dla tego modelu.

Wejście obrazów / Vision

Dlaczego OpenCode mówi „the current model does not support image input”?

  • gpt-5.5 APIMaster.ai i kilka modeli Claude obsługują wejście obrazów; ten komunikat zwykle oznacza, że OpenCode nie wysyła obrazu jako wejścia multimodalnego.
  • Sprawdź, czy model w opencode.jsonc ma:
    "attachment": true,
    "modalities": {
      "input": ["text", "image"],
      "output": ["text"]
    }
    
  • Potwierdź, że uruchomiłeś ponownie OpenCode po edycji.
  • Potwierdź, że baseURL to https://apimaster.ai/v1.
  • Potwierdź, że klucz API APIMaster jest ważny.
  • Jeśli publiczny URL obrazu zawodzi, użyj base64 data URL lub lokalnego przesyłania.

Dlaczego model widzi tylko nazwę załącznika, a nie obraz?

  • Zazwyczaj OpenCode nie odczytał i nie przekonwertował załącznika na wejście obrazu – umieścił jedynie nazwę pliku / załącznika w promptcie.
  • Włącz attachment: true i modalities.input: ["text", "image"] oraz użyj modelu obsługującego wejście obrazów.

Dlaczego publiczny URL obrazu zwraca błąd?

  • APIMaster lub usługa nadrzędna mogą być ograniczone przez sieć, format, rozmiar pliku, MIME, ochronę przed hotlinkingiem lub proxy podczas pobierania publicznego obrazu.
  • Przy Error while downloading file. Upstream status code: 400. przełącz się na base64 data URL.

Nadal nie działa po dodaniu attachment?

  1. Całkowicie zamknij i uruchom ponownie OpenCode.
  2. Rozpocznij nową sesję, aby przetestować.
  3. Potwierdź, że aktywny model sesji jest tym, który skonfigurowałeś z polami obrazów.
  4. Potwierdź, że klucz API jest ważny.
  5. Sprawdź logi OpenCode pod kątem błędów 401 / 400 / unsupported image / invalid content type.
  6. Użyj Opcji B – Test bezpośrednio przez API z obrazem base64, aby oddzielić problem z modelem APIMaster od problemu z adapterem OpenCode.

Bezpieczeństwo

  • Nie umieszczaj klucza API APIMaster w opencode.jsonc; ten plik przechowuje tylko dostawcę, modele, możliwości obrazów i Reasoning.
  • Nie wklejaj klucza do czatu, zrzutów ekranu, zgłoszeń, publicznej dokumentacji ani repozytoriów kodu.
  • Wygeneruj ponownie klucze, które pojawiły się na zrzutach ekranu lub w logach – odwołaj i wygeneruj ponownie w konsoli, a następnie zaktualizuj dostawcę w OpenCode.
  • Preferuj przepływ /connect OpenCode, zmienne środowiskowe lub lokalny magazyn poświadczeń do zarządzania kluczem API.
  • OpenCode może odczytywać/zapisywać pliki i uruchamiać polecenia powłoki – używaj tylko zaufanych obszarów roboczych.

Lista kontrolna

  • Zainstalowano OpenCode Desktop
  • Podłączono własnego dostawcę lub dodano apimaster w opencode.jsonc
  • Podstawowy URL / baseURL = https://apimaster.ai/v1 (nie https://apimaster.ai/)
  • Klucz API przez /connect lub GUI (nie w jsonc)
  • Zamapowano co najmniej jeden model czatu
  • (Opcjonalnie) Warianty Reasoning zgodne z oficjalnymi poziomami
  • Testowa wiadomość zakończona sukcesem

Lista kontrolna wejścia obrazów

  • baseURL to https://apimaster.ai/v1 (nie https://api.apimaster.ai/v1)
  • Używasz modelu obsługującego Vision, np. gpt-5.5 lub modelu Claude z obsługą Vision
  • Model ma attachment: true
  • modalities.input modelu zawiera "image"
  • OpenCode uruchomiony ponownie po edycji opencode.jsonc
  • Klucz API jest ważny
  • Obraz testowy jest w popularnym formacie (PNG / JPG)
  • Jeśli publiczny URL obrazu zawodzi, wypróbowano base64 data URL

Podsumowanie

  • Kluczowe elementy: baseURL (https://apimaster.ai/v1), identyfikator modelu, klucz API (/connect lub GUI), opcjonalne warianty Reasoning.
  • Nazwy wariantów = rzeczywiste wartości reasoning_effort.
  • Konfiguruj poziomy dla każdego modelu; pomiń warianty, gdy nie są obsługiwane (Haiku, MiniMax M3).

Zobacz także