TL;DR
Skonfiguruj raz CometAPI w OpenCode, a następnie wybierz do zadania programistycznego Claude, GPT lub DeepSeek. Ten przewodnik rozszerza oficjalny przewodnik integracji CometAPI z OpenCode do kompletnej konfiguracji projektu: jeden klucz API CometAPI, plik konfiguracyjny z trzema przykładami modeli, polecenia przełączania modeli oraz małe zadanie w JavaScripcie z powtarzalną weryfikacją.
Kluczowe wnioski
- Konfiguracja CometAPI w OpenCode wymaga identyfikatora dostawcy, bazowego adresu URL API, poświadczenia i identyfikatora modelu.
- Użyj {env:COMETAPI_KEY}, aby nie umieszczać rzeczywistego klucza API w opencode.json.
- Zarejestruj przykłady Claude, GPT i DeepSeek w jednym opencode.json; wszystkie trzy wpisy używają tego samego klucza CometAPI i bramki.
- Przełączaj wybranego dostawcę/model w OpenCode bez uzyskiwania osobnych kluczy do Anthropic, OpenAI i DeepSeek.
- Zwracaj uwagę na brakujące zmienne środowiskowe, niedopasowane trasy API oraz monity o zatwierdzenie, które mogą wyglądać jak zawieszone żądania.
Czym jest OpenCode i dlaczego używać go z CometAPI?
OpenCode to otwartoźródłowy agent do kodowania z interfejsem terminalowym, aplikacją desktopową i rozszerzeniem do IDE. W projekcie może wyjaśniać istniejący kod, planować zmiany, edytować pliki i uruchamiać polecenia w ramach skonfigurowanych uprawnień. Ten samouczek używa przepływu pracy w terminalu: zlecasz agentowi małe zadanie programistyczne, przeglądasz proponowane działania i weryfikujesz wynikowe pliki lokalnym testem. Zobacz oficjalną dokumentację OpenCode dotyczącą instalacji i użytkowania.
CometAPI zapewnia warstwę dostępu do modeli. Przepływ pracy z wieloma modelami w innym wypadku wymaga zarządzania poświadczeniami, rozliczeniami i ustawieniami połączeń u różnych dostawców. Przeprowadzenie obsługiwanych modeli przez jedno konto CometAPI daje temu projektowi wspólny klucz i bazowy adres URL, podczas gdy OpenCode zachowuje repozytorium i instrukcje zadania. To przydatne przy porównywaniu modeli na tym samym zadaniu lub zmianie wybranego modelu bez reorganizacji projektu. Bramka agregacyjna jest opcjonalna: bezpośredni dostęp do dostawcy może pasować do przepływu pracy z jednym dostawcą lub do określonych wymagań umownych. Korzyścią tutaj jest prostszy dostęp do wielu dostawców; formaty API, zachowanie modeli i kompatybilność narzędzi nadal wymagają osobnej weryfikacji.
CometAPI obsługuje Chat Completions zgodny z OpenAI i udostępnia także inne formaty API. Oficjalna integracja wybiera adapter dla każdego formatu. Tutaj Claude Sonnet 5 używa Messages, GPT-6.1 Sol używa Responses, a DeepSeek V4.1 Flash używa Chat Completions, zgodnie z przykładami podlinkowanymi poniżej. Wszystkie żądania nadal trafiają do CometAPI z tym samym kluczem. Nazwa dostawcy i format API opisują różne rzeczy; nie należy zakładać, że pojedynczy model akceptuje każdy format.
| Konfiguracja | Claude Sonnet 5 API w CometAPI | GPT-6.1 Sol API w CometAPI | DeepSeek V4.1 Flash API w CometAPI |
|---|---|---|---|
| Dostawca modelu | Anthropic | OpenAI | DeepSeek |
| Identyfikator modelu | claude-sonnet-5 | gpt-6.1-sol | deepseek-v4.1-flash |
| ID dostawcy w OpenCode | cometapi-messages | cometapi-responses | cometapi-chat |
| Używany tutaj format API | Messages | Responses/ chat | Chat Completions |
| Adapter | @ai-sdk/anthropic | @ai-sdk/openai | @ai-sdk/openai-compatible |
Czego potrzebujesz przed skonfigurowaniem CometAPI w OpenCode?
Użyj terminala, Node.js z npm, konta CometAPI z dostępem do API i dostępnym saldem oraz jednorazowego katalogu projektu. Przykłady w Bash dotyczą macOS, Linux lub WSL; oznaczone przykłady w PowerShell używają składni Windows. Node.js musi być także dostępny w tej samej sesji do późniejszej kontroli w JavaScripcie.
Ten przewodnik używa stylu konfiguracji OpenCode 1. Oficjalna dokumentacja rozróżnia OpenCode 1 i OpenCode 2; oba używają polecenia opencode. Zanotuj opencode --version przed rozpoczęciem i użyj dokumentacji konfiguracji dla tej głównej wersji. Poniższy przepływ pracy z trzema modelami to przewodnik integracyjny z oczekiwanymi rezultatami, a nie deklaracja ukończonego kompleksowego testu end-to-end.
Zanotuj swoją wersję CLI, Node.js, npm, system operacyjny i datę testu podczas uruchamiania przykładów. Zużycie API jest rozliczane na Twoim koncie CometAPI. Poniższe polecenia to praktyczny walkthrough z oczekiwanymi wynikami; nie deklaruje się tu wyników wygenerowanych przez model ani udanego, w pełni działającego uruchomienia integracji z trzema modelami.
node --versionnpm --versionopencode --version
Jak krok po kroku skonfigurować CometAPI w OpenCode?
Krok 1: Zainstaluj OpenCode
Zainstaluj oficjalny pakiet npm, jeśli OpenCode nie jest jeszcze dostępny. Instalacja bez przypiętej wersji śledzi bieżące wydanie pakietu; zanotuj zainstalowaną wersję przed użyciem konfiguracji. Jeśli potrzebujesz odtworzyć środowisko z przewodnika źródłowego, zadeklarowana tam wersja CLI to 1.18.16.
Zainstaluj CLI OpenCode i wyświetl jego wersję.
npm install -g opencode-aiopencode --version
Otwórz nowy terminal, jeśli po instalacji nie znaleziono pliku wykonywalnego. Kontynuuj w jednorazowym katalogu projektu, aby pierwsze zadanie agenta miało wyraźnie wyznaczone granice.
Utwórz katalog projektu i wejdź do niego.
mkdir cometapi-opencode-democd cometapi-opencode-demo
Krok 2: Utwórz klucz API CometAPI
Wygeneruj klucz API ze swojego konta CometAPI i ustaw go w tym samym terminalu, z którego uruchomisz OpenCode. Lokalnie zastąp placeholder. Nie commituj klucza, nie wklejaj go do promptów ani nie umieszczaj w udostępnianych logach.
Zmienna dotyczy bieżącej powłoki i procesów z niej uruchamianych. Nie rób zrzutów ekranu z prawdziwym tokenem. Poniższe sprawdzenia raportują, czy zmienna istnieje, bez drukowania jej wartości.
Ustaw klucz CometAPI dla bieżącej sesji Bash.
export COMETAPI_KEY="YOUR_COMETAPI_KEY"
Ustaw klucz CometAPI dla bieżącej sesji PowerShell.
$env:COMETAPI_KEY = "YOUR_COMETAPI_KEY"test -n "$COMETAPI_KEY" && printf "COMETAPI_KEY is set\n" || printf "COMETAPI_KEY is missing\n"if ([string]::IsNullOrWhiteSpace($env:COMETAPI_KEY)) { "COMETAPI_KEY is missing"} else { "COMETAPI_KEY is set"}
Krok 3: Utwórz opencode.json
Utwórz opencode.json w katalogu głównym projektu lub użyj ~/.config/opencode/opencode.json, aby udostępnić wpisy między projektami. Plik projektu utrzymuje samowystarczalność tego samouczka. Użyj pojedynczego obiektu provider zawierającego trzy poniższe wpisy; jeśli obiekt provider już istnieje, scal jego wpisy zamiast tworzyć duplikat klucza JSON.
W przypadku konfliktów pól konfiguracja projektu nadpisuje konfigurację globalną; pola niekolidujące są zachowane. Niestandardowy plik OPENCODE_CONFIG jest ładowany między konfiguracją globalną a projektową. Sprawdź udokumentowany łańcuch priorytetów, jeśli obecne są również ustawienia zarządzane lub inline.
Zapisz poniższą kompletną konfigurację jako opencode.json. Każdy dostawca odczytuje COMETAPI_KEY ze środowiska. Domyślny model jest celowo pominięty, abyś mógł jawnie wybrać jeden z trzech przykładów.
Wariant Flash jednoznacznie wskazuje żądany przykład DeepSeek V4.1. Pozostaw GPT na adapterze Responses dla obsługi narzędzi; przewodnik CometAPI dla DeepSeek dokumentuje trasę Chat Completions używaną tutaj. Przed uruchomieniem przykładów ponownie sprawdź dostępność modeli i uprawnienia na swoim koncie.
{ "$schema": "https://opencode.ai/config.json", "provider": { "cometapi-messages": { "npm": "@ai-sdk/anthropic", "name": "CometAPI Claude", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "claude-sonnet-5": { "name": "Claude Sonnet 5" } } }, "cometapi-responses": { "npm": "@ai-sdk/openai", "name": "CometAPI GPT", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "gpt-6.1-sol": { "name": "GPT-6.1 Sol" } } }, "cometapi-chat": { "npm": "@ai-sdk/openai-compatible", "name": "CometAPI DeepSeek", "options": { "baseURL": "https://api.cometapi.com/v1", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "deepseek-v4.1-flash": { "name": "DeepSeek V4.1 Flash" } } } }, "permission": { "edit": "ask", "shell": "ask" }}
Poprawny baseURL: https://api.cometapi.com/v1. Nieprawidłowy baseURL: https://api.cometapi.com/v1/chat/completions. Adapter dodaje ścieżkę endpointu. Scal przykład z istniejącym opencode.json bez usuwania niepowiązanych ustawień.
Ustawienia edit i shell proszą o zatwierdzenie zmian plików i poleceń zgodnie z obecnymi zasadami uprawnień OpenCode. Uruchamiaj przykłady kodowania interaktywnie i przeglądaj te prośby. OpenCode dziedziczy też uprawnienia systemu operacyjnego procesu, który go uruchomił; użyj jednorazowego katalogu do tego ćwiczenia.
Krok 4: Sprawdź połączenie z bramką
Opcjonalna konfiguracja i weryfikacja Gemini są podane po poniższych trzech kontrolach połączenia modeli.
Poniższy przykład HTTP sprawdza bezpośrednio wpis DeepSeek Chat Completions. To przydatny sposób na odizolowanie połączenia z bramką od OpenCode. Claude i GPT używają swoich wybranych tras adapterów w następnym kroku; zmiana identyfikatora modelu w tym żądaniu HTTP nie zmienia automatycznie jego protokołu.
Wyślij minimalne żądanie Chat Completions z Bash.
curl --silent --show-error \ --output response.json \ --write-out "HTTP %{http_code}\n" \ https://api.cometapi.com/v1/chat/completions \ -H "Authorization: Bearer $COMETAPI_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"deepseek-v4.1-flash","messages":[{"role":"user","content":"Reply with a short greeting."}]}'
To polecenie używa opcji write-out i output w curl, aby oddzielić status HTTP od response.json. Udany transfer może nadal zawierać błąd HTTP, więc sprawdź wydrukowany status i treść JSON. To unika zależności od --fail-with-body, które wymaga curl 7.76.0 lub nowszego.
Wyślij to samo żądanie z PowerShell bez specyficznego dla powłoki cudzysłowu JSON.
$body = @{ model = "deepseek-v4.1-flash" messages = @(@{ role = "user"; content = "Reply with a short greeting." })} | ConvertTo-Json -Depth 4$response = Invoke-WebRequest -UseBasicParsing -Method Post ` -Uri "https://api.cometapi.com/v1/chat/completions" ` -Headers @{ Authorization = "Bearer $env:COMETAPI_KEY" } ` -ContentType "application/json" ` -Body $body$response.Content | Set-Content -Encoding UTF8 response.json"HTTP $($response.StatusCode)"
W przypadku błędu HTTP PowerShell może zgłosić wyjątek, zanim wykonają się dwie ostatnie linie. Zapisz status i zredagowane szczegóły błędu z tego niepowodzenia; nie odnotowuj go jako udanej odpowiedzi.
Oczekiwany wynik dla żądania DeepSeek: HTTP 200 i niepusty tekst w choices[0].message.content. Sprawdź zapisany response.json zamiast akceptowania samego HTTP 200. Poniższe dodatki pokazują kształt odpowiedzi i sposób sprawdzenia wszystkich trzech skonfigurowanych tras. Przykłady są poglądowe; ta wersja nie deklaruje wyników żywych testów CometAPI. Żądanie wyłącznie tekstowe nie weryfikuje streamingu ani wywołań narzędzi.
Poglądowy kształt odpowiedzi DeepSeek: pozdrowienie, wartości usage i inne pola zależą od faktycznego żądania. Poniższy JSON jest celowo skróconym przykładem, a nie zarejestrowaną odpowiedzią API.
{"choices":[{"message":{"role":"assistant","content":"Hello!"}}]}
Po faktycznie udanym żądaniu HTTP linia statusu powinna brzmieć HTTP 200, a response.json powinien zawierać niepusty tekst asystenta. Zachowaj rzeczywisty status i treść dla swojego uruchomienia; nie kopiuj przykładu jako dowodu testu.
Krok 5: Przełączanie między Claude, GPT i DeepSeek
Polecenia w tym kroku powinny zwrócić żądane znaczniki asystenta. Ilustracyjny tekst asystenta, bez banerów terminala, timingów i metadanych:
Claude: CLAUDE_READYGPT: GPT_READYDeepSeek: DEEPSEEK_READY
Te linie pokazują tylko oczekiwaną treść. To nie jest transkrypt z terminala. Zanotuj rzeczywisty wynik i kod zakończenia procesu dla każdego dostawcy; brak znacznika lub nieudane żądanie wymagają analizy.
Rozpocznij w katalogu zawierającym opencode.json. Wypisz modele dla każdego skonfigurowanego dostawcy, a następnie wykonaj krótkie żądanie tekstowe do każdego wpisu. Te polecenia zmieniają wybrany model i adapter; klucz CometAPI i bazowy adres URL pozostają takie same.
Użyj tych poleceń, aby sprawdzić, że wszystkie trzy wpisy są widoczne i mogą zwracać tekst.
opencode models cometapi-messagesopencode models cometapi-responsesopencode models cometapi-chatopencode run --model cometapi-messages/claude-sonnet-5 "Reply exactly with: CLAUDE_READY"opencode run --model cometapi-responses/gpt-6.1-sol "Reply exactly with: GPT_READY"opencode run --model cometapi-chat/deepseek-v4.1-flash "Reply exactly with: DEEPSEEK_READY"
Dla przełączania interaktywnego uruchom opencode, wpisz /models i wybierz CometAPI Claude, CometAPI GPT lub CometAPI DeepSeek. OpenCode używa pary dostawca/model z tego wpisu. Nie potrzebujesz trzech kont dostawców ani trzech kluczy API. Przy tej konfiguracji opartej na środowisku nie używaj /connect do podawania drugiego poświadczenia; brakujący COMETAPI_KEY należy naprawić w powłoce, z której uruchamiasz.
Oczekiwany wynik: każde krótkie żądanie zwraca swój żądany znacznik. Zanotuj rzeczywisty rezultat dla każdego modelu. Widoczny wpis modelu potwierdza rejestrację; udana odpowiedź tekstowa potwierdza tę ścieżkę żądania. Żaden z tych elementów sam nie dowodzi działania narzędzi plikowych.
Gemini używa osobnego dostawcy i protokołu. Zachowaj powyższe wpisy dla Claude, GPT i DeepSeek; scal poniższy wpis z istniejącym obiektem provider. Poniższy baseURL podąża za konfiguracją CometAPI dostarczoną przez recenzenta. Przed użyciem potwierdź jego bieżącą trasę i dostęp do modelu na swoim koncie CometAPI.
Adapter Google obsługuje niestandardowy baseURL i wysyła apiKey przy użyciu x-goog-api-key. Zobacz oficjalną referencję dostawcy Google w AI SDK. To potwierdza ustawienia adaptera; nie dowodzi, że określony model Gemini jest włączony w bramce CometAPI.
{ "provider": { "cometapi-gemini": { "npm": "@ai-sdk/google", "name": "CometAPI Gemini", "options": { "baseURL": "https://api.cometapi.com/v1beta", "apiKey": "{env:COMETAPI_KEY}" }, "models": { "YOUR_GEMINI_MODEL_ID": { "name": "CometAPI Gemini (account-selected model)" } } } }}
Zastąp YOUR_GEMINI_MODEL_ID zarówno w kluczu JSON, jak i w poleceniu poniżej dokładnym identyfikatorem modelu Gemini włączonym dla Twojego konta CometAPI. To placeholder, a nie prawdziwy identyfikator modelu. Scal ten wpis dostawcy bez duplikowania klucza provider najwyższego poziomu i uruchom OpenCode z tej samej powłoki, w której ustawiono COMETAPI_KEY.
opencode models cometapi-geminiopencode run --model cometapi-gemini/YOUR_GEMINI_MODEL_ID "Reply exactly with: GEMINI_READY"
Oczekiwany tekst asystenta: GEMINI_READY. Widoczny model potwierdza lokalną rejestrację; otrzymanie znacznika potwierdza żądanie tekstowe. Zapisz rzeczywistą odpowiedź i kod zakończenia. Aby zweryfikować narzędzia do kodowania, uruchom opencode --model cometapi-gemini/YOUR_GEMINI_MODEL_ID w nowym jednorazowym katalogu i powtórz zadanie greet.cjs/check.cjs poniżej. Sam tekstowy sukces nie weryfikuje streamingu, edycji ani wywołań narzędzi.
Jak uruchomić zadanie programistyczne z Claude, GPT i DeepSeek?
Użyj tego samego małego zadania dla każdego modelu: utwórz funkcję powitalną, dodaj asercję i uruchom ją. Zachowaj trzy świeże katalogi, aby drugi model nie mógł po prostu ponownie użyć plików utworzonych przez pierwszy. To sprawdza przepływ pracy integracji bez zamieniania artykułu w ranking wydajności.
Zapisz prepare-runs.cjs obok opencode.json i uruchom go raz. Tworzy trzy nowe katalogi i kopiuje tylko wspólną konfigurację. Zatrzymuje się, jeśli którykolwiek katalog docelowy już istnieje, dzięki czemu poprzednia praca nie zostanie nadpisana.
const fs = require("node:fs");const path = require("node:path");const root = __dirname;const names = ["claude-demo", "gpt-demo", "deepseek-demo"];const config = path.join(root, "opencode.json");if (!fs.existsSync(config)) throw new Error("Missing opencode.json");for (const name of names) { if (fs.existsSync(path.join(root, name))) { throw new Error(`Directory already exists: ${name}`); }}for (const name of names) { const dir = path.join(root, name); fs.mkdirSync(dir); fs.copyFileSync(config, path.join(dir, "opencode.json"));}node prepare-runs.cjscd claude-demoopencode --model cometapi-messages/claude-sonnet-5# After exiting OpenCode:cd ..cd gpt-demoopencode --model cometapi-responses/gpt-6.1-sol# After exiting OpenCode:cd ..cd deepseek-demoopencode --model cometapi-chat/deepseek-v4.1-flash# After exiting OpenCode:cd ..
Uruchamiaj po jednej z poniższych sesji na raz, zaczynając od katalogu nadrzędnego projektu. Zakończ sesję przed przejściem do następnego przykładu. W każdej sesji przekaż agentowi to samo zadanie poniżej i przejrzyj proponowane edycje i polecenia. Node.js musi być dostępny dla procesu uruchamiającego OpenCode.
Poproś agenta o utworzenie i weryfikację małej funkcji JavaScript.
Create greet.cjs in this directory.Export a function named greet(name) that returns "Hello, " + name + "!".Create check.cjs using node:assert/strict.Assert that greet("Ada") equals "Hello, Ada!".Run node check.cjs and report its actual exit status.Do not modify opencode.json or unrelated files.
Oczekiwany wynik: agent poprosi o wymagane zatwierdzenia, utworzy oba pliki i zakończy node check.cjs z kodem wyjścia 0. Zanotuj, co faktycznie się wydarzyło. Sprawdź pliki i uruchom kontrolę ponownie samodzielnie; sama deklaracja sukcesu prozą nie wystarczy. Jeśli wywołanie narzędzia zostanie odrzucone lub błędnie sformułowane, zbadaj kompatybilność trasy osobno od oczekującego zatwierdzenia.
Pliki referencyjne i weryfikacja lokalna
Poniższe pliki są referencyjną implementacją żądanego zadania. Zostały napisane bezpośrednio na potrzeby tego przewodnika; nie są prezentowane jako artefakty wygenerowane przez model. Dopasowanie ich obserwowalnego zachowania jest warunkiem akceptacji Twojego uruchomienia agenta.
function greet(name) { return "Hello, " + name + "!";}module.exports = { greet };const assert = require("node:assert/strict");const { greet } = require("./greet.cjs");assert.equal(greet("Ada"), "Hello, Ada!");node check.cjsprintf "exit=%s\n" "$?"node check.cjs"exit=$LASTEXITCODE"
Lokalna kontrola referencyjna: Windows, Node.js v24.19.0, 22 października 2026; node check.cjs zwróciło kod wyjścia 0 bez standardowego wyjścia. To sprawdza tylko dwa pliki referencyjne. Nie weryfikuje instalacji OpenCode, dostępu do CometAPI, monitów o zatwierdzenie ani wywołań narzędzi modelu.
| Uruchomienie | Wybrany wpis modelu | Co zarejestrować |
|---|---|---|
| Claude | cometapi-messages/claude-sonnet-5 | Odpowiedź, wygenerowane pliki, zatwierdzenia, kod wyjścia testu |
| GPT | cometapi-responses/gpt-6.1-sol | Odpowiedź, wygenerowane pliki, zatwierdzenia, kod wyjścia testu |
| DeepSeek | cometapi-chat/deepseek-v4.1-flash | Odpowiedź, wygenerowane pliki, zatwierdzenia, kod wyjścia testu |
Zachowaj jeden rekord wyniku na model: wybrany dostawca/model, czy nadeszła odpowiedź, czy utworzono greet.cjs i check.cjs, czy pojawiły się prośby o zatwierdzenia oraz kod zakończenia node check.cjs. Rejestruj niepowodzenia jako niepowodzenia; nie wnioskuj o zaliczeniu na podstawie implementacji referencyjnej.
Chroń poświadczenia i weryfikuj niezawodność
Przechowuj COMETAPI_KEY w zmiennej środowiskowej zamiast w plikach konfiguracyjnych czy udostępnianych logach. Pozostaw włączone zatwierdzenia edycji plików i poleceń powłoki oraz testuj nowe konfiguracje w jednorazowym projekcie.
Weryfikuj osobno bezpośrednie żądanie API, odpowiedź OpenCode i przepływ pracy edycji plików. Rejestruj błędy i wyniki testów, ponawiaj tylko przejściowe niepowodzenia i sprawdzaj przestrzeń roboczą przed powtarzaniem przerwanych zadań.
CometAPI upraszcza przełączanie między modelami, ale OpenCode nie zapewnia automatycznego przełączania awaryjnego między modelami przez tę konfigurację. Jeśli model stanie się niedostępny, ręcznie wybierz inny zweryfikowany model i powtórz test akceptacyjny.
Ile kosztuje używanie Opencode z CometAPI?
Ceny CometAPI i jak wygląda rozliczanie
CometAPI oferuje rozliczanie pay‑as‑you‑go bez miesięcznych abonamentów, pobierając opłaty tylko za faktyczne użycie API. Stawki dla oficjalnych modeli są z reguły o 20% niższe niż standardowe ceny dostawców, z dodatkowymi rabatami wolumenowymi. Deweloperzy mogą korzystać z Claude, GPT, DeepSeek i innych modeli przez jedno konto, płacąc na podstawie zużycia tokenów wybranego modelu. Sprawdź stronę cen CometAPI dla aktualnych stawek.
Dla żądań bez cache i dodatkowych opłat:
Koszt = (Tokeny wejściowe × Stawka wejściowa + Tokeny wyjściowe × Stawka wyjściowa) / 1 000 000
Na przykład, przy hipotetycznych stawkach 1 USD/M tokenów wejściowych i 4 USD/M tokenów wyjściowych, użycie 20 000 tokenów wejściowych i 2 000 tokenów wyjściowych kosztuje 0,028 USD. To stawki poglądowe, a nie rzeczywiste ceny modeli.
Rejestruj użycie tokenów, łączne opłaty API, czas wykonania oraz wyniki testów dla każdego zadania. Aby zmniejszyć koszty, ogranicz zbędny kontekst, używaj zwięzłych promptów, unikaj powtarzania nieudanych żądań i wybieraj tańsze modele, gdy spełniają te same wymagania jakościowe.
Strategie optymalizacji kosztów API w OpenCode
Aby ograniczyć koszty OpenCode bez utraty jakości kodowania, skup się na wyborze modelu, efektywności tokenów i zbędnych żądaniach API.
- Wybierz właściwy model: Używaj tańszych modeli, takich jak DeepSeek, do rutynowych zadań, rezerwując Claude lub GPT do złożonego debugowania, refaktoryzacji i wnioskowania.
- Ogranicz zużycie tokenów: Zachowuj zwięzłe prompty, udostępniaj tylko istotne pliki projektu i unikaj wielokrotnego wysyłania dużych fragmentów kontekstu repozytorium.
- Używaj cache promptów: Wykorzystuj obsługiwane mechanizmy buforowania dla powtarzalnego kontekstu, np. instrukcje projektu i odniesienia do kodu, aby zmniejszyć koszty wejściowe.
- Unikaj zbędnych ponowień: Napraw błędy konfiguracji i uwierzytelniania przed ponawianiem żądań i przeglądaj wcześniejsze wyniki, by zapobiegać podwójnej pracy.
- Monitoruj rzeczywiste wydatki: Śledź zużycie tokenów, opłaty API i skuteczne ukończenie zadań poprzez CometAPI. Porównuj koszt na pomyślne zadanie, a nie same ceny tokenów.
W połączeniu z rabatową, rozliczaną zgodnie z użyciem ofertą CometAPI praktyki te pomagają kontrolować wydatki, utrzymując niezawodne działanie w OpenCode.
Jak rozszerzyć konfigurację CometAPI?
Aby dodać kolejny model, umieść jego identyfikator pod tym dostawcą, którego format API obsługuje, lub dodaj nowy wpis dostawcy z wymaganym adapterem. Następnie wybierz tego dostawcę/model przez /models. Zachowaj poświadczenia w COMETAPI_KEY i nie usuwaj istniejących wpisów, aby przełączanie pozostało operacją wyboru.
Oficjalny przewodnik obejmuje cztery formaty API, w tym Gemini. Ten artykuł używa trzech wpisów wymaganych dla Claude, GPT i DeepSeek. Jeśli kilka wybranych modeli obsługuje Chat Completions, mogą współdzielić jedną mapę modeli cometapi-chat. Nie przenoś trasy wyłącznie dla Responses lub Messages do tej mapy tylko po to, by zmniejszyć liczbę wpisów.
Wybierz adapter na podstawie trasy, którą zamierzasz wywołać, a model na podstawie zadania programistycznego. Zmiana dostawcy nie wymaga nowego klucza CometAPI; zmiana formatu API wymaga dopasowanego, skonfigurowanego adaptera.
Jak rozwiązywać problemy z CometAPI w OpenCode?
Podążaj za pierwszym zawodnym etapem: żądanie HTTP → dostawca OpenCode → narzędzia plikowe. Jeśli HTTP zawiedzie, sprawdź poświadczenia, dostęp do modelu i szczegóły endpointu. Jeśli HTTP działa, a OpenCode zawodzi, sprawdź konfigurację i środowisko uruchomieniowe. Jeśli oba testy tekstowe działają, a działania na plikach zawodzą, sprawdź uprawnienia i kompatybilność wywołań narzędzi.
| Objaw | Pierwsza kontrola | Kolejne działanie | Polecenie diagnostyczne / dowód |
|---|---|---|---|
| Odpowiedź 401 | Wartość klucza i nagłówek Authorization | Ustaw klucz w bieżącym terminalu; sprawdź przypadkowe białe znaki. | Sprawdź obecność zmiennej bez drukowania klucza; zachowaj status HTTP i zredagowany błąd. |
| 403 lub ograniczenia konta | Treść błędu i uprawnienia konta | Potwierdź dostęp do modelu i status konta w CometAPI. | Zapisz zredagowany błąd odpowiedzi i potwierdź dostęp do konta. |
| Odpowiedź 404 | Host, ścieżka endpointu i identyfikator modelu | Porównaj żądanie z dokumentacją API wybranego modelu. | Porównaj response.json z żądanym modelem i endpointem. |
| Brak modelu w OpenCode | Katalog projektu i konfiguracja dostawcy | Sprawdź poprawny JSON oraz zgodne nazwy dostawcy/modelu; uruchom ponownie po edycji. | Uruchom opencode models cometapi-chat, opencode models cometapi-messages oraz opencode models cometapi-responses; zanotuj opencode --version. |
| Tekst działa, narzędzia nie | Odpowiedź z wywołaniem narzędzi i kompatybilność adaptera | Zweryfikuj wsparcie trasy; odróżnij odrzucone wywołanie narzędzia od monitu o zatwierdzenie. | Porównaj krótkie żądanie tekstowe z nieudaną akcją narzędzia; zachowaj błąd. |
| Polecenie czeka na zgodę | Sesja interaktywna i ustawienia uprawnień | Przejrzyj i zatwierdź zamierzoną akcję; nie traktuj oczekującej prośby jako awarii API. | Użyj sesji interaktywnej; zanotuj żądaną akcję i wynik zatwierdzenia. |
| 429 lub przejściowy błąd serwera | Szczegóły błędu i limity użycia | Zmniejsz współbieżność żądań; postępuj zgodnie ze wskazówkami retry zamiast ciągłego ponawiania. | Zachowaj status HTTP i wskazówki retry; zmniejsz współbieżność. |
Udostępniając problem, dołącz wersję OpenCode, system operacyjny, identyfikator modelu, ścieżkę endpointu i zredagowany tekst błędu. Nie podawaj kluczy API ani prywatnej zawartości repozytorium. Zachowaj najmniejsze żądanie, które odtwarza niepowodzenie, aby można było osobno zbadać problemy z konfiguracją i narzędziami.
FAQ
Dlaczego OpenCode traci mój klucz CometAPI w nowym terminalu?
Polecenia export i PowerShell powyżej ustawiają zmienną środowiskową dla bieżącej sesji i procesów potomnych. Osobno otwarty terminal lub już uruchomiony edytor mogą jej nie odziedziczyć. Ustaw klucz w środowisku, które uruchamia OpenCode, i zrestartuj ten proces. Dla ustawień trwałych użyj menedżera poświadczeń swojego środowiska zamiast osadzania sekretu w pliku repozytorium.
Czy OpenCode automatycznie ładuje COMETAPI_KEY z pliku .env?
Wyrażenie {env:COMETAPI_KEY} odczytuje środowisko procesu. Samo utworzenie pliku .env nie oznacza, że zmienna została załadowana. Użyj swojej powłoki lub jawnie skonfigurowanego loadera środowiska przed uruchomieniem OpenCode. Diagnozuj pustą wartość w procesie uruchamiającym zamiast zakładać, że dostawca jest niedostępny.
Czy globalna konfiguracja OpenCode może zmienić ustawienia tego projektu?
OpenCode scala konfiguracje, a nie zastępuje każdego wcześniejszego pliku. Plik projektu nadpisuje nakładające się pola w pliku globalnym, podczas gdy niepowiązane ustawienia globalne pozostają. Niestandardowy plik OPENCODE_CONFIG jest ładowany między nimi. Jeśli zachowanie różni się między repozytoriami, porównaj te źródła oraz ewentualne ustawienia zarządzane lub inline, zamiast zakładać, że lokalny plik jest jedynym wejściem.
Czy odświeżenie listy modeli włącza dostęp do CometAPI?
Nie. Opcja odświeżania modeli aktualizuje cache models.dev; nie przyznaje dostępu do konta ani nie dowodzi, że endpoint akceptuje identyfikator modelu. Ręcznie skonfigurowany wpis może być widoczny przed jakąkolwiek udaną odpowiedzią. Użyj faktycznego żądania, aby sprawdzić trasę, i skonsultuj ustawienia konta CometAPI pod kątem ograniczeń dostępu.
Dlaczego curl działa, a OpenCode nie może wywołać CometAPI?
Oba procesy mogą ładować różne poświadczenia, używać różnych identyfikatorów modeli lub wysyłać różne kształty żądań. Najpierw powtórz krótkie żądanie tekstowe z tego samego terminala, co udane żądanie HTTP. Następnie porównaj bazowy adres URL dostawcy, adapter i wybrany model. Jeśli prosty tekst działa, a zadanie agenta zawodzi, zachowaj błąd związany z narzędziami osobno; sama łączność HTTP nie dowodzi kompatybilności narzędzi.
Podsumowanie
Masz teraz jeden opencode.json z przykładami dla Claude, GPT i DeepSeek, wspólne poświadczenie CometAPI oraz polecenia do przełączania aktywnego modelu. Użyj krótkich żądań tekstowych, aby sprawdzić dostęp, a następnie uruchom to samo zadanie tworzenia plików w osobnych katalogach, aby zweryfikować przepływ pracy kodowania. Zachowaj zaobserwowane wyniki wraz ze szczegółami swojego środowiska przed zastosowaniem konfiguracji w większym repozytorium.
