Wróć do bloga
Przewodnik dla programistówNovember 12, 20268 min czytania

Jeden klucz. Każdy model. Codex i Claude Code też.

Codex CLI i Claude Code łączą się teraz z unbottled.ai bezpośrednio, tak jak OpenCode, Continue, Aider i Cline. Jeden adres bazowy, jeden klucz, jedno polecenie na narzędzie.

Twój agent kodujący jest przywiązany do modeli jednego dostawcy. Chcesz drugiej opinii z innego laboratorium, taniego modelu do czarnej roboty albo takiego, który nie odmawia? To kolejne konto, kolejny klucz, kolejny rachunek.

unbottled.ai mówi wszystkimi trzema formatami, których używają agenci kodujący: OpenAI chat completions, OpenAI Responses API i Anthropic Messages API. Nic pośrodku, nic do instalowania. Podłączasz narzędzie raz i przełączasz się między Claude, GPT, DeepSeek, GLM, Kimi, Qwen i modelami niecenzurowanymi, zmieniając jedno ID modelu.

Po co to wszystko

  • Jeden klucz, jedno saldo. Bez osobnych kont w Anthropic, OpenAI, DeepSeek, Moonshot i Z.ai.
  • Modele niecenzurowane w edytorze. Badania bezpieczeństwa, prompty red-teamowe, narzędzia do fikcji, dane, na których wykładają się filtry głównego nurtu. Poziom filtrowania wybierasz ty, nie dostawca.
  • Właściwy model do zadania. Model z górnej półki do trudnego refaktoru, model flash do zmiany nazw i szkieletów testów. Ta sama konfiguracja, inne ID.
  • Te same kredyty co w aplikacji czatu, te same ceny. Każda odpowiedź podaje, ile kosztowała.

Zdobądź klucz i adres bazowy

Dwie wartości. Każde narzędzie poniżej potrzebuje dokładnie ich.

Utwórz klucz w Ustawienia > Klucze API. Zaczyna się od sk-unb- i zobaczysz go tylko raz. API jest w każdym płatnym planie: aktywna subskrypcja albo dowolny pakiet kredytów je odblokowuje.

Adres bazowy: https://unbottled.ai/api/pl-DE/v1

Dla narzędzi w stylu OpenAI: Codex, OpenCode, Continue, Aider, Cline. Locale w ścieżce zmienia tylko język komunikatów o błędach.

Adres bazowy Anthropic: https://unbottled.ai/api/pl-DE

Dla Claude Code i SDK Anthropic. Ten sam adres bez /v1: /v1/messages dopisują same.

Sprawdź klucz
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"

curl https://unbottled.ai/api/pl-DE/v1/models \
  -H "Authorization: Bearer $UNBOTTLED_API_KEY"
Pierwsze żądanie
terminal
curl https://unbottled.ai/api/pl-DE/v1/chat/completions \
  -H "Authorization: Bearer $UNBOTTLED_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"glm-5.3","messages":[{"role":"user","content":"Hello"}]}'

Trzymaj klucz w zmiennej środowiskowej, nigdy w pliku, który commitujesz. Wywołanie curl potwierdza, że klucz działa, i wypisuje każde ID modelu dostępne dla twojego konta, z rozmiarem kontekstu, obsługą narzędzi i cenami w kredytach.

Najszybciej: zaraz po utworzeniu klucza strona Klucze API pokazuje każdy blok z tego wpisu, z twoim kluczem już wpisanym. Wybierasz narzędzie, kopiujesz, odpalasz.

Każde narzędzie łączy się bezpośrednio

Agenci kodujący mówią trzema różnymi formatami. Obsługujemy wszystkie trzy, na tym samym kluczu i tych samych modelach.

  • Codex CLI: OpenAI Responses API.
  • Claude Code: Anthropic Messages API.
  • OpenCode, Continue, Aider, Cline: OpenAI chat completions.

Każde inne narzędzie z polem na adres bazowy działa tak samo: adres bazowy, klucz, ID modelu.

Ustawienia
settings
# OpenAI-compatible tools (chat completions or Responses API)
Base URL:  https://unbottled.ai/api/pl-DE/v1
API key:   sk-unb-YOUR_KEY
Model:     glm-5.3

# Anthropic-compatible tools (Messages API)
Base URL:  https://unbottled.ai/api/pl-DE
API key:   sk-unb-YOUR_KEY
Model:     glm-5.3
Responses API

Codex CLI

Terminalowy agent od OpenAI. Czyta repo, uruchamia polecenia, edytuje pliki. Testowane na Codex CLI 0.118.0.

Codex mówi Responses API, my też. Jedno polecenie definiuje dostawcę w locie: nic do edycji, nic do instalowania. Na co dzień dopisz konfigurację raz i uruchamiaj Codex z profilem.

Jedno polecenie
terminal
UNBOTTLED_API_KEY="sk-unb-YOUR_KEY" codex \
  -c 'model_providers.unbottled={name="unbottled.ai",base_url="https://unbottled.ai/api/pl-DE/v1",env_key="UNBOTTLED_API_KEY",wire_api="responses"}' \
  -c model_provider=unbottled \
  -m glm-5.3
Na stałe
~/.codex/config.toml
[model_providers.unbottled]
name = "unbottled.ai"
base_url = "https://unbottled.ai/api/pl-DE/v1"
env_key = "UNBOTTLED_API_KEY"
wire_api = "responses"

[profiles.unbottled]
model_provider = "unbottled"
model = "glm-5.3"
Potem uruchom
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
codex --profile unbottled

Model zmieniasz przez -m albo linię model w profilu. Zostaw wire_api = "responses": aktualny Codex nie przyjmuje niczego innego.

Messages API

Claude Code

Terminalowy agent od Anthropic. Planuje, edytuje, odpala testy, wysyła subagentów. Testowane na Claude Code 2.1.323.

Claude Code czyta bramkę ze zmiennych środowiskowych. ANTHROPIC_BASE_URL to adres bazowy bez /v1. ANTHROPIC_MODEL ustawia główny model. Domyślne OPUS i SONNET obsługują wybór modelu i tryb planowania, domyślny HAIKU przenosi zadania w tle, na przykład tytuły sesji, na tani model, a CLAUDE_CODE_SUBAGENT_MODEL dotyczy subagentów. CLAUDE_CODE_MAX_CONTEXT_TOKENS podaje Claude Code prawdziwy rozmiar kontekstu modelu spoza rodziny Claude, więc kompaktuje rozmowę we właściwym momencie.

Jedno polecenie
terminal
ANTHROPIC_BASE_URL="https://unbottled.ai/api/pl-DE" \
ANTHROPIC_AUTH_TOKEN="sk-unb-YOUR_KEY" \
ANTHROPIC_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.3" \
ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-5.3-flash" \
CLAUDE_CODE_SUBAGENT_MODEL="glm-5.3" \
CLAUDE_CODE_MAX_CONTEXT_TOKENS="1048576" \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1" \
claude
Na stałe
~/.claude/settings.json
{
  "env": {
    "ANTHROPIC_BASE_URL": "https://unbottled.ai/api/pl-DE",
    "ANTHROPIC_AUTH_TOKEN": "sk-unb-YOUR_KEY",
    "ANTHROPIC_MODEL": "glm-5.3",
    "ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-5.3",
    "ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-5.3",
    "ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-5.3-flash",
    "CLAUDE_CODE_SUBAGENT_MODEL": "glm-5.3",
    "CLAUDE_CODE_MAX_CONTEXT_TOKENS": "1048576",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  }
}
Potem uruchom
terminal
claude

Wolisz samego Claude? Usuń linie z modelami. Claude Code poprosi o swoje zwykłe ID Claude, a my skierujemy je do naszego odpowiadającego modelu Claude, rozliczanego w kredytach.

Claude Code wysyła duży prompt systemowy, ponad 30k tokenów wejściowych nawet przy banalnym zadaniu. Tani model domyślny trzyma koszty w ryzach.

Chat completions

OpenCode

Otwartoźródłowy agent do terminala, z TUI i trybem bez interfejsu. Testowane na OpenCode 1.19.5.

Zapisz konfigurację jako opencode.json w projekcie albo jako ~/.config/opencode/opencode.json dla wszystkich projektów. Klucz zostaje w twoim środowisku. Do mapy models dodasz dowolne ID z GET /v1/models, a w TUI wybierzesz je przez /models.

Jedno polecenie
terminal
UNBOTTLED_API_KEY="sk-unb-YOUR_KEY" \
OPENCODE_CONFIG_CONTENT='{"provider":{"unbottled":{"npm":"@ai-sdk/openai-compatible","options":{"baseURL":"https://unbottled.ai/api/pl-DE/v1","apiKey":"{env:UNBOTTLED_API_KEY}"},"models":{"glm-5.3":{}}}},"model":"unbottled/glm-5.3"}' \
opencode
Na stałe
opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "unbottled": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "unbottled.ai",
      "options": {
        "baseURL": "https://unbottled.ai/api/pl-DE/v1",
        "apiKey": "{env:UNBOTTLED_API_KEY}"
      },
      "models": {
        "glm-5.3": { "name": "GLM-5.3" },
        "claude-sonnet-5.5": { "name": "Claude Sonnet 5.5" },
        "glm-5.3-uncensored": { "name": "GLM 5.3 Uncensored" }
      }
    }
  },
  "model": "unbottled/glm-5.3"
}
Potem uruchom
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
opencode
Najpierw zaktualizuj OpenCode. Stare wersje 1.0.x pobierają najnowszy pakiet @ai-sdk/openai-compatible i padają po pierwszym wywołaniu narzędzia z DecimalError: Invalid argument. 1.19.5 uruchamia tę samą konfigurację bez błędów.
Chat completions

Continue

Asystent kodowania dla VS Code i JetBrains, do tego CLI cn. Testowane na Continue 1.5.47.

Na stałe
config.yaml
name: unbottled
version: 1.0.0
schema: v1
models:
  - name: GLM-5.3
    provider: openai
    model: glm-5.3
    apiBase: https://unbottled.ai/api/pl-DE/v1
    apiKey: ${{ secrets.UNBOTTLED_API_KEY }}
    roles: [chat, edit, apply]
Potem uruchom
terminal
export UNBOTTLED_API_KEY="sk-unb-YOUR_KEY"
cn --config ./config.yaml

secrets.UNBOTTLED_API_KEY jest brany z twojego środowiska. Dodaj -p z promptem, a działa bez interfejsu. Rozszerzenie IDE czyta ~/.continue/config.yaml: wpisz tam ten sam model.

Chat completions

Aider

Programowanie w parze w terminalu, razem z commitami. Testowane na Aider 0.86.2.

Jedno polecenie, zero plików konfiguracyjnych. Aider chce openai/ przed ID modelu i sam je usuwa, zanim nas wywoła. --edit-format diff trzyma zmiany w ryzach; bez tego przy nieznanym ID modelu Aider wysyła całe pliki od nowa. Pliki do edycji podajesz w poleceniu, jak zwykle w Aiderze.

Jedno polecenie
terminal
OPENAI_API_BASE="https://unbottled.ai/api/pl-DE/v1" \
OPENAI_API_KEY="sk-unb-YOUR_KEY" \
aider --model openai/glm-5.3 --edit-format diff --no-show-model-warnings
Chat completions

Cline

Autonomiczny agent kodujący, w VS Code i jako CLI. Testowane na Cline 3.0.74.

Dwa polecenia w Cline CLI: raz zapisujesz dostawcę, potem uruchamiasz cline. Adres bazowy, klucz i ID modelu to te same trzy wartości co wszędzie.

Jedno polecenie
terminal
cline auth -p openai -k "sk-unb-YOUR_KEY" -b "https://unbottled.ai/api/pl-DE/v1" -m glm-5.3
Potem uruchom
terminal
cline

Jaki model do jakiej roboty

Wszystkie poniżej obsługują wywołania narzędzi, bez których agent nie pracuje. ID wpisujesz do konfiguracji.

Trudne problemy

Duże refaktory, nieznane bazy kodu, wieloetapowe debugowanie. Wyższe ceny w kredytach, mniej błądzenia.

  • claude-sonnet-5.5Claude Sonnet 5.5
  • claude-opus-5.5Claude Opus 5.5
  • gpt-6.1-solGPT-6.1 Sol
  • kimi-k3.1-proKimi K3.1 Pro
  • deepseek-v4-proDeepSeek V4 Pro

Tanio i szybko

Zmiany nazw, testy, boilerplate, zadania w tle. Ułamek ceny modelu z górnej półki. Dobry wybór domyślny dla agentów z dużymi promptami.

  • glm-5.3GLM-5.3
  • glm-5.3-flashGLM-5.3 Flash
  • qwen-3.8-flashQwen 3.8 Flash
  • claude-haiku-5.5Claude Haiku 5.5

Niecenzurowane

Ten sam sposób pracy agenta, bez odruchu odmowy. Analiza exploitów, narzędzia red-teamowe, potoki fikcji dla dorosłych, scrapery, przy których inne modele prawią kazania. Za to, co budujesz, odpowiadasz ty.

  • glm-5.3-uncensoredGLM 5.3 Uncensored
  • venice-deepseek-v4.1-flash-uncensoredDeepSeek V4.1 Flash Uncensored
  • qwen-3.6-plus-uncensoredQwen 3.6 Plus Uncensored
  • venice-uncensoredVenice Uncensored 1.2
ID zmieniają się, gdy modele są zastępowane. Źródłem prawdy jest GET /v1/models: jeśli ID nie ma na liście dla twojego klucza, API zwraca 404 model_not_found. Jedyne mapowanie dotyczy Claude Code: jego wbudowane ID Claude trafiają do naszego najnowszego Claude z tej samej rodziny.

Pułapki, na które wpadliśmy

Żebyś ty nie musiał.

  • Skopiuj adres bazowy dokładnie, razem z /api/<locale>/v1. Bez locale dostaniesz przekierowanie, które część klientów gubi. Bez /api dostaniesz stronę HTML zamiast JSON.
  • Claude Code dostaje adres bazowy bez /v1. Z /v1 wywoła /v1/v1/messages i trafi na 404.
  • Używaj dokładnie ID z GET /v1/models, na przykład glm-5.3. Aider chce openai/ z przodu. Wbudowane ID Claude z Claude Code trafiają same do naszego najnowszego Claude z tej samej rodziny. Każde inne nieznane ID zwraca 404 model_not_found.
  • HTTP 402 z paid_plan_required znaczy, że konto nie ma jeszcze płatnego planu. Naprawia to dowolny pakiet kredytów.
  • Model bez obsługi narzędzi zwraca 400 tools_not_supported, gdy tylko agent wyśle narzędzia. Sprawdź supports_tools w GET /v1/models.
  • Każdy klucz to 60 żądań na minutę. Agenci strzelają wieloma małymi wywołaniami. Jeśli trafisz na 429, daj agentowi osobny klucz.

Podłączone jednym poleceniem.

Utwórz klucz, skopiuj blok dla swojego narzędzia, wybierz model. Dokumentacja API opisuje każdy endpoint, każde pole, każdy kod błędu i każdy szczegół streamingu.

Wróć do bloga