NL ▾
API-sleutel aanvragen

OpenCode met een OpenAI-compatible API: Instellen

Het aan de praat krijgen van OpenCode met een OpenAI-compatible API vereist één aangepaste provider-invoer. Je definieert een aangepaste provider in het configuratiebestand met een basis-URL, een sleutel en een modelvermelding. Deze gids toont de exacte waarden en hoe je ze eerst kunt testen.

Bijgewerkt

Een terminalpaneel verbonden met een gloeiende kabel met een serverrek, dat een code-agent voorstelt die een aangepaste API aanroept

Belangrijkste punten

  • Verifieer de endpoint met curl voordat je OpenCode aanraakt, zodat je weet of een fout in de configuratie of in de API zit.
  • Een aangepaste provider heeft drie dingen nodig: basis-URL, API-sleutel en een model-ID, die hier uncensored is.
  • Stel de contextlimiet in op 100.000 tokens zodat de agent plant rond het echte venster.
  • Streaming en function calling worden ondersteund, wat een agent-loop nodig heeft.

Wat je nodig hebt voordat je begint

OpenCode is een open-source code-agent die in je terminal draait. Het kan communiceren met veel modelproviders, en het laat je je eigen provider toevoegen als de endpoint de OpenAI-chatopmaak volgt. Deze API doet dat, dus instellen is een kwestie van een paar velden invullen.

Verzamel eerst deze drie waarden:

  • Base URL: https://api.kimicode.top/v1
  • Model ID: uncensored
  • API-sleutel: maak er een aan op de API-sleutelpagina. Nieuwe accounts kunnen daar met één klik $0,50 aan proeftegoed claimen, wat meer dan genoeg is voor de onderstaande tests. De proefsleutel staat 2 gelijktijdige verzoeken en 60 verzoeken per minuut toe.

Houd de sleutel in een omgevingsvariabele in plaats van deze in bestanden te plakken die je commit:

export KIMICODE_API_KEY="your-key-here"

Stap 1: test de endpoint met curl

Doe dit voordat je een tool configureert. Als curl werkt en OpenCode niet, dan weet je dat het probleem in de configuratie zit. Als curl faalt, los je de sleutel of de URL één keer op, niet op twee plaatsen.

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "Say hello in five words."}],
    "max_tokens": 40
  }'

Je zou een JSON-object moeten krijgen met een choices-array en een usage-blok. Een 401 betekent dat de sleutel onjuist is of dat de Bearer-prefix ontbreekt. Een 404 betekent meestal dat de URL verkeerd is getypt of al /chat/completions bevat.

Een code-agent streamt zijn antwoorden en roept tools aan, dus controleer die twee ook:

curl -N https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "stream": true,
    "messages": [{"role": "user", "content": "Count from one to five."}]
  }'

Je zou een reeks data:-regels moeten zien, elk met een kleine JSON-delta, eindigend met de gebruikscijfers en een eindmarker. De -N-vlag schakelt de buffering van curl uit, zodat chunks verschijnen zoals ze aankomen.

Stap 2: voeg een aangepaste provider toe aan OpenCode

OpenCode leest een JSON-configuratiebestand, opencode.json, uit je projectmap of uit zijn globale configuratiedirectory. Aangepaste OpenAI-stijl providers worden gedeclareerd met het OpenAI-compatible package van de AI SDK, een basis-URL en een lijst met modellen. De lay-out hieronder volgt de publieke documentatie van OpenCode op het moment van schrijven. Veldnamen kunnen tussen releases wijzigen, dus vergelijk het met de provider-sectie van de huidige OpenCode-documentatie als iets wordt afgewezen.

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "kimicode": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Kimicode API",
      "options": {
        "baseURL": "https://api.kimicode.top/v1",
        "apiKey": "{env:KIMICODE_API_KEY}"
      },
      "models": {
        "uncensored": {
          "name": "Uncensored",
          "limit": {
            "context": 100000,
            "output": 8192
          }
        }
      }
    }
  },
  "model": "kimicode/uncensored"
}

De sleutel onder models is de exacte model-ID die naar de server wordt gestuurd, dus deze moet uncensored zijn. De laatste regel selecteert de provider en het model als standaard, geschreven als provider-naam, een slash, dan model-ID.

De {env:KIMICODE_API_KEY}-vorm vertelt OpenCode de variabele uit je shell te lezen. Als je versie referenties via zijn eigen login-commando afhandelt, gebruik dan die route en laat de sleutel weg uit het bestand. Hoe dan ook, commit geen echte sleutel.

Projectconfiguratie of globale configuratie

Je kunt de provider-blok op twee plaatsen houden. Een bestand in de projectroot geldt alleen voor die repository, wat geschikt is voor een team dat één setup deelt. Een bestand in je gebruikersconfiguratiemap geldt overal, wat geschikt is voor een persoonlijke standaard. Waar beide bestaan, voegt het projectbestand toe aan of overschrijdt het de globale configuratie.

Geef de voorkeur aan het globale bestand voor de provider-definitie en de omgevingsvariabele voor de sleutel. Dan kan elke repository de endpoint gebruiken, en er staat niets geheim naast je broncode. Als meerdere mensen in één project werken, commit dan alleen het provider-blok zonder sleutel, en laat elke persoon zijn eigen variabele instellen. Dit maakt het ook eenvoudig om een sleutel te roteren: verander de variabele, herstart de terminal, en het configuratiebestand blijft onaangetast.

Stap 3: kies het model en voer een taak uit

Start OpenCode in een projectmap en open de modelkiezer. Je aangepaste provider zou in de lijst moeten verschijnen met de weergavenaam die je hebt ingesteld. Selecteer het, geef de agent dan een kleine, controleerbare taak zoals het uitleggen van een functie of het schrijven van een unit test voor een kort bestand.

Begin klein om twee redenen. Ten eerste kun je zien of function calling werkt: wanneer OpenCode het model vraagt een bestand te lezen of te bewerken, gebeurt dit via de function calling-interface. Ten tweede stuurt een code-agent veel tekst per beurt, inclusief bestandsinhoud en geschiedenis, dus een lange sessie verbruikt tokens snel. De volgende sectie kwantificeert dat.

Als het model niet verschijnt, controleer dan of het bestand geldige JSON is, of het op de plek staat waar OpenCode configuratie zoekt, en of de providernaam overeenkomt met wat je in het model-veld hebt getypt.

Test function calling en JSON-modus direct

OpenCode vertrouwt op function calling om bestanden te lezen, commando's uit te voeren en code te bewerken, dus het is de moeite waard om te bevestigen dat de endpoint een tool-definitie aankan voordat je de agent de schuld geeft van een fout. Dit verzoek biedt één tool en stelt een vraag die het nodig heeft.

curl https://api.kimicode.top/v1/chat/completions \
  -H "Authorization: Bearer $KIMICODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "What is in the file notes.txt?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "read_file",
        "description": "Read a text file by path",
        "parameters": {
          "type": "object",
          "properties": {"path": {"type": "string"}},
          "required": ["path"]
        }
      }
    }],
    "tool_choice": "auto"
  }'

Een goed antwoord bevat een tool_calls-vermelding met de naam read_file met een JSON-argumentreeks. De agent voert de tool uit en stuurt het resultaat terug als een bericht met role ingesteld op tool, en het model gaat daar vanaf. Als je alleen platte tekst ziet, probeer dan een meer directe prompt, omdat het model beslist of het een tool aanroept onderdeel is van zijn gedrag.

JSON-modus is een aparte schakelaar. Het toevoegen van "response_format": {"type": "json_object"} vraagt om geldige JSON-uitvoer, en het helpt wanneer een ander script moet parseren wat terugkomt. Vermeld JSON ook in je prompt, zodat het model weet welke vorm je verwacht.

Contextgrootte en wat een sessie kost

Het contextvenster is 100.000 tokens, tellend de prompt en de completion samen. Het instellen van limit.context op 100000 laat de agent het echte plafond zien, zodat het geschiedenis kan bijsnijden of samenvatten voordat de server een verzoek moet afwijzen. Een completion kan elke resterende ruimte gebruiken, en max_tokens is optioneel.

Facturering is $0,15 per 1M input tokens en $0,50 per 1M output tokens. Agents zijn input-heavy, omdat elke beurt het gesprek opnieuw verzendt. Hier is een uitgewerkt voorbeeld voor een gemiddelde sessie:

  • 40 beurten, elk verzendt ongeveer 30.000 input tokens: 1.200.000 input tokens, wat 1,2 x $0,15 = $0,18 is.
  • Elke beurt retourneert ongeveer 800 output tokens: 32.000 output tokens, wat 0,032 x $0,50 = $0,016 is.
  • Totaal: $0,196, dus ongeveer twintig cent voor de hele sessie.

Je getallen verschillen. Lees de usage-waarden in responsen, of bekijk de X-Balance-USD-header, die je resterende saldo opgeeft bij elk antwoord. Tegoed is prepaid en verloopt nooit, en mislukte of geweigerde verzoeken worden niet in rekening gebracht. Details staan op de prijzenpagina.

Eerlijke verwachtingen voor een code-agent

Dit is een algemeen tekstmodel dat is geoptimaliseerd om te antwoorden zonder inhoudelijke weigeringen voor legaal gebruik door volwassenen. Het is geen model dat specifiek voor code is gebouwd, en deze pagina maakt geen uitspraken over benchmarks. Of het je repository betrouwbaar kan bewerken, moet je zelf testen op je eigen taken, met versiebeheer ingeschakeld, voordat je er belangrijke dingen aan toevertrouwt.

Het behandelt de infrastructuur die een agent nodig heeft: function calling met gestreamde tool_calls, tool-resultaten teruggezonden als role: "tool"-berichten, en JSON-modus via response_format. Het is alleen tekst, zonder afbeeldingen, dus functies die screenshots bijvoegen werken niet.

Twee limieten zijn belangrijk voor agents. Een volledige sleutel staat 8 gelijktijdige verzoeken en 300 verzoeken per minuut toe. Sub-agents of gelijktijdige tool-uitvoeringen die veel calls tegelijk afvuren, kunnen de concurrentielimiet raken, en een gestreamd verzoek houdt zijn slot vast tot de stream eindigt. Als dat gebeurt, krijg je HTTP 429 met de code concurrency. De code rate_limited betekent dat er te veel verzoeken per minuut zijn. Bij tijdelijke overbelasting kun je ook een 429 zien met Retry-After: 5. Verminder het parallelisme of wacht en probeer het opnieuw.

Probleemoplossing

SymptoomWaarschijnlijke oorzaakOplossing
401 Niet geautoriseerdLege of onjuiste sleutel; de omgevingsvariabele is niet ingesteld in de shell die OpenCode lanceerdeVoer echo $KIMICODE_API_KEY uit in dezelfde terminal, en start OpenCode opnieuw
404 Niet gevondenBasis-URL bevat /chat/completions of mist /v1Gebruik exact https://api.kimicode.top/v1
Model niet gevondenModel sleutel verschilt van uncensoredKoppel de sleutel in models aan de ID die wordt teruggegeven door GET /v1/models
429 met concurrencyTe veel verzoeken tegelijkMinder gelijktijdige toolaanroepen, of wacht tot de streams zijn voltooid
Verzoek te grootBody groter dan 8 MB of geschiedenis dicht bij de vensterlimietStart een nieuwe sessie of vat de geschiedenis samen

Voor alles wat hier niet aan bod komt, heeft de documentatiepagina de volledige referentie voor verzoeken, en de integratiegids behandelt dezelfde endpoint vanuit het perspectief van andere OpenAI-compatibele clients.

Vragen en antwoorden

Ondersteunt OpenCode een aangepaste basis-URL?

Ja. Je declareert een aangepaste provider in opencode.json met een base URL, een sleutel en een lijst met modellen. Controleer de huidige documentatie van OpenCode voor de exacte veldnamen, omdat deze tussen versies kunnen wijzigen.

Welke model-ID moet ik invoeren?

Voer uncensored in, precies zoals het geschreven is. Het moet overeenkomen met de sleutel in het models-blok en de ID die wordt teruggegeven door GET /v1/models.

Is er een gratis manier om de setup te testen?

Nieuwe gebruikers kunnen met één klik op de API-sleutelpagina na het aanmaken van een account $0,50 aan proeftegoed claimen. Dit tegoed is 7 dagen geldig, vereist geen creditcard en is beperkt tot één per persoon.

Waarom krijg ik 429-fouten tijdens een agentrun?

Agents sturen vaak meerdere verzoeken tegelijk. De volledige sleutel staat 8 gelijktijdige verzoeken en 300 per minuut toe, en de proefsleutel staat 2 en 60 toe. Verminder het parallelisme of probeer het opnieuw na de Retry-After-wachttijd.

Je sleutel is nog maar één formulier verwijderd

Maak een account aan, kopieer de sleutel, pas de base URL aan. Dat is de hele setup.

API-sleutel aanvragen