Aller au contenu
Inscrivez-vous gratuitement
Configuration des Coding Agents

Configurer DeepSeek Harness : clé API, Base URL et modèles

Connectez DeepSeek Harness à BetterToken via le profil headless. Configurez la clé API, la Base URL et le protocole, puis vérifiez la lecture de fichiers.

Connectez DeepSeek Harness (dsh) à BetterToken avec un fournisseur personnalisé dans le profil headless. Lors des tests sur macOS, @deepseek-ai/dsh@0.2.1-rc.2 a exécuté les requêtes de texte et les appels d’outils de lecture de fichiers avec succès dans les 3 essais de chaque combinaison : Chat Completions avec un modèle GPT, Responses avec un modèle GPT, Anthropic Messages avec un modèle Claude et Anthropic Messages avec un modèle GPT.

Paramètres principaux

ChampValeur
API KeyBetterToken API Key, lue dans la variable d’environnement dont le nom est indiqué par apiKeyEnv
Base URLhttps://bettertoken.ai/v1 — Chat Completions / Responses
Base URL pour Anthropic Messageshttps://bettertoken.ai, sans /v1
ModèleYOUR_MODEL_ID
Fichier de configuration$DSH_HOME/profiles/headless/cordis.patch.yml (DSH_HOME vaut ~/.dsh par défaut)

Prérequis

Installation

Exécutez la version testée ici sans installation globale :

Fenêtre de terminal
npx @deepseek-ai/dsh@0.2.1-rc.2 --help

Lors des tests, le tag npm latest désignait 0.2.1-rc.2, une version candidate. Les autres tags, comme next, n’ont pas été testés.

Configuration manuelle

Exportez la clé API en remplaçant YOUR_API_KEY :

Fenêtre de terminal
export BETTERTOKEN_API_KEY="YOUR_API_KEY"

Créez ~/.dsh/profiles/headless/cordis.patch.yml. Ce fichier contient une liste de correctifs Cordis. Remplacez les deux valeurs YOUR_MODEL_ID par le même Model ID exact :

Chat Completions

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-completions
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Responses

- id: llm-pi-ai
config:
providers:
bettertoken:
api: openai-responses
baseURL: https://bettertoken.ai/v1
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

Anthropic Messages

- id: llm-pi-ai
config:
providers:
bettertoken:
api: anthropic-messages
baseURL: https://bettertoken.ai
apiKeyEnv: BETTERTOKEN_API_KEY
retryPolicy:
mode: normal
maxRetries: 2
models:
- id: YOUR_MODEL_ID
- id: agent-default-model
config:
provider: bettertoken
model: YOUR_MODEL_ID

apiKeyEnv contient le nom d’une variable d’environnement, pas la clé API ni une expression ${...}. Un fournisseur personnalisé nécessite api, baseURL et au moins une entrée dans models ; seul l’id du modèle est obligatoire dans chaque entrée. Si llm-pi-ai est déjà configuré, copiez les fournisseurs à conserver dans le même config, car une nouvelle entrée remplace l’entrée existante.

Le champ api accepte uniquement openai-completions, openai-responses et anthropic-messages pour les fournisseurs personnalisés. La Base URL Anthropic est la racine du site, car le client ajoute lui-même /v1/messages.

Pour vérifier la syntaxe sans envoyer de requête au modèle, exécutez npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --dump-config.

Vérifier la connexion

Exécutez cette commande dans le même terminal :

Fenêtre de terminal
npx @deepseek-ai/dsh@0.2.1-rc.2 --profile headless --json "Reply with only: OK"

--json affiche un événement JSON par ligne. Vérifiez que le code de sortie est 0, que turn_end.reason indique une fin normale et que le champ text du dernier événement final vaut OK. Une exécution en échec peut aussi afficher un événement final vide ; sa seule présence ne suffit donc pas.

Pour vérifier l’accès aux fichiers, créez sample.txt dans un répertoire vide, puis exécutez-y la même commande avec le prompt Read sample.txt using a tool. Reply with only its exact contents.. Confirmez que la sortie contient un tool_call, un tool_result avec le texte du fichier et un texte final identique à ce contenu.

Changer de modèle

Remplacez les deux valeurs YOUR_MODEL_ID par un autre Model ID exact. Si le nouveau modèle utilise un autre protocole, par exemple un modèle Claude via Anthropic Messages, modifiez api et baseURL ensemble. Pour afficher les modèles renvoyés par la passerelle, utilisez Fetch available models avec un fournisseur personnalisé dans l’interface web de DeepSeek Harness. Lors des tests, le même service de découverte a renvoyé la liste des modèles BetterToken pour les trois protocoles.

Erreurs courantes

SymptômeVérification
MISSING_CREDENTIAL, code de sortie 1 et aucune requête dans le tableau de bordLe processus n’a pas reçu la variable indiquée par apiKeyEnv. Exportez-la dans le terminal qui lance dsh et vérifiez son orthographe. Cette vérification est locale.
Le profil headless ignore une Key enregistrée dans l’interface webLe profil headless lit les identifiants uniquement dans cet ordre : environnement de lancement, .env du répertoire courant, puis .env sous DSH_HOME.
404 avec un chemin de requête se terminant par /v1/v1/messagesLa baseURL Anthropic se termine par /v1. Utilisez https://bettertoken.ai.
Modèle introuvableCopiez à nouveau le Model ID depuis le model plaza et utilisez-le aux deux endroits.
Nombreuses tentatives après un échecSans retryPolicy, l’adaptateur effectue 5 nouvelles tentatives par défaut. Définissez explicitement maxRetries, comme dans les exemples.
Erreur de version Node.jsUtilisez Node.js 24.9 ou ultérieur.

Documentation associée

Détails techniques

Lors des tests, les chemins de requête réels étaient /v1/chat/completions, /v1/responses et /v1/messages pour les trois valeurs de api. dsh envoie aussi automatiquement une requête de génération du titre de session via le fournisseur et le modèle configurés ; une tâche peut donc produire plusieurs requêtes. Le client a ajouté des limites de sortie par défaut, par exemple 32768 tokens pour la requête principale ; elles n’étaient pas définies dans la configuration.

Les champs input et contextWindow d’une entrée de modèle sont des déclarations destinées au client. Ils ne consultent ni ne confirment les limites de la passerelle. L’entrée d’images n’a pas été testée. Les tests ont porté uniquement sur macOS.