FR ▾
Obtenir une clé API

OpenCode avec une API compatible OpenAI : configuration

Pour obtenir un accès à l'API OpenAI compatible avec OpenCode, il suffit d'une seule entrée de fournisseur personnalisé. Vous définissez un fournisseur personnalisé dans le fichier de configuration avec une URL de base, une clé et une entrée de modèle. Ce guide indique les valeurs exactes et comment les tester d'abord.

Mis à jour le

Un panneau terminal relié par un câble lumineux à un rack de serveurs, représentant un agent de codage appelant une API personnalisée

Points clés

  • Vérifiez l'endpoint avec curl avant de toucher à OpenCode, afin de savoir si un échec vient de la configuration ou de l'API.
  • Un fournisseur personnalisé nécessite trois éléments : URL de base, clé API et un ID de modèle, qui est uncensored ici.
  • Définissez la limite de contexte à 100 000 tokens afin que l'agent planifie autour de la fenêtre réelle.
  • Le streaming et l'appel de fonctions sont pris en charge, ce dont a besoin une boucle d'exécution.

Ce dont vous avez besoin avant de commencer

OpenCode est un agent de codage open-source qui s'exécute dans votre terminal. Il peut communiquer avec de nombreux fournisseurs de modèles et vous permet d'ajouter votre propre fournisseur si l'endpoint suit le format de chat OpenAI. Cette API le fait, la configuration consiste donc à remplir quelques champs.

Rassemblez d'abord ces trois valeurs :

  • URL de base : https://api.kimicode.top/v1
  • ID de modèle : uncensored
  • Clé API : créez-en une sur la page clé API. Les nouveaux comptes peuvent y réclamer un crédit d'essai de 0,50 $ en un clic, ce qui est largement suffisant pour les tests ci-dessous. La clé d'essai permet 2 requêtes simultanées et 60 requêtes par minute.

Conservez la clé dans une variable d'environnement au lieu de la coller dans des fichiers que vous commiterez :

export KIMICODE_API_KEY="your-key-here"

Étape 1 : tester l'endpoint avec curl

Faites ceci avant de configurer n'importe quel outil. Si curl fonctionne et OpenCode non, vous savez que le problème vient de la configuration. Si curl échoue, vous corrigez la clé ou l'URL une seule fois, pas à deux endroits.

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

Vous devriez obtenir un objet JSON avec un tableau choices et un bloc usage. Un 401 signifie que la clé est incorrecte ou manque le préfixe Bearer. Un 404 signifie généralement que l'URL a été mal tapée ou inclut déjà /chat/completions.

Un agent de codage diffuse ses réponses et appelle des outils, vérifiez donc ces deux points également :

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."}]
  }'

Vous devriez voir une série de lignes data:, chacune avec un petit delta JSON, se terminant par les chiffres d'utilisation et un marqueur final. Le drapeau -N désactive la mise en mémoire tampon de curl afin que les chunks apparaissent à mesure qu'ils arrivent.

Étape 2 : ajouter un fournisseur personnalisé à OpenCode

OpenCode lit un fichier de configuration JSON, opencode.json, depuis votre dossier de projet ou depuis son répertoire de configuration global. Les fournisseurs personnalisés de style OpenAI sont déclarés avec le package compatible OpenAI de l'AI SDK, une URL de base et une liste de modèles. La disposition ci-dessous suit la documentation publique d'OpenCode au moment de la rédaction. Les noms de champs peuvent changer entre les versions, alors comparez-le avec la section fournisseur de la documentation OpenCode actuelle si quelque chose est rejeté.

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

La clé sous models est l'ID de modèle exact envoyé au serveur, elle doit donc lire uncensored. La dernière ligne sélectionne le fournisseur et le modèle par défaut, écrits sous la forme nom du fournisseur, une barre oblique, puis l'ID du modèle.

La forme {env:KIMICODE_API_KEY} indique à OpenCode de lire la variable depuis votre shell. Si votre version gère les identifiants via sa propre commande de connexion, utilisez cette méthode et laissez la clé hors du fichier. Dans les deux cas, ne committez pas une vraie clé.

Configuration du projet ou configuration globale

Vous pouvez conserver le bloc fournisseur à deux endroits. Un fichier à la racine du projet s'applique uniquement à ce dépôt, ce qui convient à une équipe partageant une seule configuration. Un fichier dans votre répertoire de configuration utilisateur s'applique partout, ce qui convient à un défaut personnel. Lorsque les deux existent, le fichier du projet s'ajoute ou écrase le fichier global.

Préférez le fichier global pour la définition du fournisseur et la variable d'environnement pour la clé. Ainsi, chaque dépôt peut utiliser l'endpoint, et rien de secret ne se trouve à côté de votre code source. Si plusieurs personnes travaillent sur un même projet, committez uniquement le bloc fournisseur sans clé, et faites en sorte que chaque personne définisse sa propre variable. Cela rend également simple la rotation d'une clé : changez la variable, redémarrez le terminal, et le fichier de configuration reste inchangé.

Étape 3 : choisir le modèle et exécuter une tâche

Démarrez OpenCode dans un dossier de projet et ouvrez son sélecteur de modèles. Votre fournisseur personnalisé devrait apparaître dans la liste avec le nom d'affichage que vous avez défini. Sélectionnez-le, puis donnez à l'agent une petite tâche vérifiable telle qu'expliquer une fonction ou écrire un test unitaire pour un fichier court.

Commencez petit pour deux raisons. Premièrement, vous pouvez voir si les appels de fonctions fonctionnent : lorsque OpenCode demande au modèle de lire ou de modifier un fichier, il le fait via l'interface d'appel de fonctions. Deuxièmement, un agent de codage envoie beaucoup de texte par tour, y compris le contenu des fichiers et l'historique, donc une longue session consomme des tokens rapidement. La section suivante met des chiffres sur cela.

Si le modèle n'apparaît pas, vérifiez que le fichier est un JSON valide, qu'il se trouve là où OpenCode cherche la configuration, et que le nom du fournisseur correspond à ce que vous avez tapé dans le champ model.

Tester l'appel de fonctions et le mode JSON directement

OpenCode repose sur l'appel de fonctions pour lire des fichiers, exécuter des commandes et éditer du code, il vaut donc la peine de confirmer que l'endpoint gère une définition d'outil avant de blâmer l'agent pour un échec. Cette requête propose un outil et pose une question qui en a besoin.

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

Une bonne réponse contient une entrée tool_calls nommant read_file avec une chaîne d'arguments JSON. L'agent exécute l'outil, puis renvoie le résultat sous forme de message avec role défini sur tool, et le modèle continue à partir de là. Si vous ne voyez que du texte brut, essayez un prompt plus direct, car le fait que le modèle décide d'appeler un outil fait partie de son comportement.

Le mode JSON est un interrupteur séparé. Ajouter "response_format": {"type": "json_object"} demande une sortie JSON valide, et cela aide lorsqu'un autre script doit analyser ce qui revient. Mentionnez JSON dans votre prompt également, afin que le modèle sache quelle forme vous attendez.

Taille du contexte et coût d'une session

La fenêtre de contexte est de 100 000 tokens, comptant le prompt et la complétion ensemble. Définir limit.context à 100000 permet à l'agent de connaître le plafond réel, afin qu'il puisse tronquer ou résumer l'historique avant que le serveur n'ait à rejeter une requête. Une complétion peut utiliser tout l'espace restant, et max_tokens est optionnel.

La facturation est de $0,15 par 1 M de tokens d'entrée et de $0,50 par 1 M de tokens de sortie. Les agents sont lourds en entrée, car chaque tour renvoie la conversation. Voici un exemple détaillé pour une session modérée :

  • 40 tours, chacun envoyant environ 30 000 tokens d'entrée : 1 200 000 tokens d'entrée, soit 1,2 x $0,15 = $0,18.
  • Chaque tour retourne environ 800 tokens de sortie : 32 000 tokens de sortie, soit 0,032 x $0,50 = $0,016.
  • Total : $0,196, soit environ vingt cents pour toute la session.

Vos chiffres varieront. Lisez les valeurs usage dans les réponses, ou surveillez l'en-tête X-Balance-USD, qui indique votre solde restant à chaque réponse. Le crédit est prépayé et n'expire jamais, et les requêtes échouées ou refusées ne sont pas facturées. Les détails sont sur la page tarifs.

Attentes réalistes pour un agent de développement

Il s'agit d'un modèle de texte général ajusté pour répondre sans refus de contenu pour un usage adulte légal. Ce n'est pas un modèle construit spécifiquement pour le code, et cette page ne fait aucune affirmation de benchmark. Le fait qu'il modifie votre dépôt de manière fiable est quelque chose que vous devriez tester sur vos propres tâches, avec le contrôle de version activé, avant de lui confier quelque chose d'important.

Il gère les mécanismes dont a besoin un agent : appel d'outils avec des tool_calls en streaming, résultats d'outils envoyés en tant que messages role: "tool", et mode JSON via response_format. Il est uniquement textuel, sans images, donc les fonctionnalités qui attachent des captures d'écran ne fonctionneront pas.

Deux limites sont importantes pour les agents. Une clé complète permet 8 requêtes simultanées et 300 requêtes par minute. Les sous-agents ou les exécutions d'outils en parallèle qui déclenchent de nombreux appels à la fois peuvent atteindre la limite de concurrence, et une requête en streaming conserve sa place jusqu'à la fin du flux. Lorsque cela se produit, vous obtenez une erreur HTTP 429 avec le code concurrency. Le code rate_limited signifie trop de requêtes par minute. En cas de surcharge temporaire, vous pouvez également voir un 429 avec Retry-After: 5. Réduisez le parallélisme ou attendez et réessayez.

Dépannage

SymptômeCause probableCorrection
401 Accès refuséClé vide ou incorrecte ; la variable d'environnement n'est pas définie dans le shell qui a lancé OpenCodeExécutez echo $KIMICODE_API_KEY dans le même terminal, puis redémarrez OpenCode
404 Non trouvéL'URL de base inclut /chat/completions ou manque /v1Utilisez exactement https://api.kimicode.top/v1
Modèle non trouvéL'ID du modèle diffère de uncensoredFaites correspondre la clé dans models à l'ID retourné par GET /v1/models
429 avec concurrencyTrop de requêtes à la foisRéduisez le nombre d'appels d'outils en parallèle, ou attendez la fin des flux
Requête trop volumineuseCorps de plus de 8 Mo ou historique proche de la limite de la fenêtre de contexteCommencez une nouvelle session ou résumez l'historique

Pour tout ce qui n'est pas couvert ici, la page de documentation contient la référence complète des requêtes, et le guide d'intégration couvre le même endpoint sous l'angle d'autres clients de style OpenAI.

Questions et réponses

OpenCode prend-il en charge une URL de base personnalisée ?

Oui. Vous déclarez un fournisseur personnalisé dans opencode.json avec une URL de base, une clé et une liste de modèles. Consultez la documentation actuelle d'OpenCode pour les noms exacts des champs, car ils peuvent changer entre les versions.

Quel ID de modèle dois-je saisir ?

Saisissez uncensored, exactement comme écrit. Il doit correspondre à la clé dans le bloc models et à l'ID retourné par GET /v1/models.

Existe-t-il un moyen gratuit de tester la configuration ?

Les nouveaux utilisateurs peuvent obtenir 0,50 $ de crédit d'essai en un clic sur la page clé API après l'inscription. Il dure 7 jours, ne nécessite pas de carte et est limité à un par personne.

Pourquoi obtiens-je des erreurs 429 lors de l'exécution d'un agent ?

Les agents envoient souvent plusieurs requêtes à la fois. La clé complète permet 8 requêtes simultanées et 300 par minute, et la clé d'essai en permet 2 et 60. Réduisez le parallélisme ou réessayez après le délai Retry-After.

Votre clé est à un formulaire de vous

Créez un compte, copiez la clé, modifiez l'URL de base. C'est toute la configuration.

Obtenir une clé API