Connectez DeepSeek V4-Pro à Cursor avec les paramètres OpenAI par défaut, lancez un premier appel d’outil, et vous pouvez obtenir une erreur 400. La cause : V4-Pro renvoie un champ reasoning_content, Cursor le supprime dans les requêtes suivantes, puis l’API DeepSeek rejette les messages d’appel d’outil incomplets. Le proxy open-source yxlao/deepseek-cursor-proxy met ce raisonnement en cache et le réinjecte automatiquement avant d’appeler DeepSeek.
TL;DR
- Cursor + DeepSeek V4-Pro peut échouer avec des erreurs 400 après un appel d’outil.
- La raison est le champ DeepSeek
reasoning_content, requis dans les suivis d’appels d’outils mais supprimé par Cursor. -
deepseek-cursor-proxys’intercale entre Cursor et DeepSeek, met en cache le raisonnement et le réinjecte. - Installation :
uv tool install deepseek-cursor-proxy, démarrage du proxy, puis configuration d’un modèle personnalisé dans Cursor. - V4-Pro coûte environ 0,87 $ par million de tokens de sortie. Voir DeepSeek V4-Pro : une réduction de prix de 75 % désormais permanente.
Pourquoi Cursor échoue avec DeepSeek V4-Pro
DeepSeek V4-Pro renvoie deux blocs dans ses réponses :
-
content: la réponse visible classique. -
reasoning_content: le raisonnement du modèle.
Pour une conversation simple, ignorer reasoning_content peut fonctionner. Le problème apparaît avec les appels d’outils.
Le contrat d’API de DeepSeek impose que, lorsqu’une réponse précédente contenait reasoning_content, la requête suivante conserve ce champ avec les résultats de tool_calls.
Cursor suit plutôt un schéma OpenAI Chat Completions. Comme reasoning_content n’appartient pas au schéma OpenAI standard, Cursor le retire. Résultat : DeepSeek reçoit un suivi incomplet et renvoie une erreur HTTP 400.
Ce n’est pas vraiment un bug Cursor. C’est une incompatibilité entre deux surfaces d’API proches, mais pas identiques.
Ce que fait le proxy
deepseek-cursor-proxy agit comme adaptateur entre Cursor et DeepSeek :
- Il écoute les requêtes Cursor sur un port local, par défaut
9000. - Il transmet les requêtes à DeepSeek.
- Il met en cache le
reasoning_contentrenvoyé par DeepSeek. - Lors des requêtes suivantes, il retrouve le raisonnement correspondant et le réinjecte avant de transmettre à DeepSeek.
Le cache est stocké ici :
~/.deepseek-cursor-proxy/reasoning_content.sqlite3
Le proxy indexe les entrées avec un SHA-256 du préfixe canonique de conversation. Deux conversations parallèles ne se mélangent donc pas.
Il expose aussi le service local via ngrok, car Cursor attend une URL HTTPS pour les modèles personnalisés et n’accepte généralement pas localhost.
Prérequis
Avant de commencer, installez ou préparez :
- Cursor 2.0 ou plus récent.
- Une clé API DeepSeek depuis platform.deepseek.com.
- Python 3.11 ou plus récent.
-
uvoupip. Pouruv, voir la documentation officielle d’installation. - Un compte ngrok avec authtoken. Le guide de démarrage ngrok couvre cette étape.
Étape 1 : installer le proxy
Avec uv, l’installation est directe :
uv tool install deepseek-cursor-proxy
Vérifiez que la commande est disponible :
deepseek-cursor-proxy --help
Alternative avec pip :
git clone https://github.com/yxlao/deepseek-cursor-proxy.git
cd deepseek-cursor-proxy
pip install -e .
Étape 2 : configurer ngrok
Cursor a besoin d’une URL HTTPS publique. Ajoutez votre authtoken ngrok :
ngrok config add-authtoken YOUR_NGROK_AUTHTOKEN
Avec le niveau gratuit, ngrok génère souvent une URL différente à chaque redémarrage.
Si vous avez réservé un domaine ngrok, vous pourrez le passer au proxy :
deepseek-cursor-proxy --ngrok-url https://your-reserved.ngrok-free.app
Étape 3 : démarrer le proxy
Lancez simplement :
deepseek-cursor-proxy
Au premier démarrage, le proxy crée sa configuration et affiche une sortie similaire :
Démarrage de deepseek-cursor-proxy
Tunnel : https://random-name.ngrok-free.app
Local : http://127.0.0.1:9000
Cache : /Users/vous/.deepseek-cursor-proxy/reasoning_content.sqlite3
Gardez ce terminal ouvert pendant que vous utilisez Cursor.
Options utiles :
# Changer le port local
deepseek-cursor-proxy --port 9001
# Voir les requêtes/réponses pour déboguer
deepseek-cursor-proxy --verbose
# Désactiver ngrok pour tester avec localhost
deepseek-cursor-proxy --no-ngrok
# Ne pas afficher le raisonnement dans Cursor
deepseek-cursor-proxy --no-display-reasoning
Étape 4 : ajouter DeepSeek V4-Pro dans Cursor
Dans Cursor :
- Ouvrez les paramètres.
- Allez dans Models.
- Ajoutez un modèle personnalisé.
- Configurez les champs.
Utilisez :
| Champ | Valeur |
|---|---|
| Nom du modèle | deepseek-v4-pro |
| URL de base | https://random-name.ngrok-free.app/v1 |
| Clé API | Votre clé API DeepSeek |
Important : l’URL doit se terminer par /v1.
Pour la variante moins chère, utilisez :
deepseek-v4-flash
Le proxy ne traduit pas les noms de modèles. Il les transmet tels quels à DeepSeek.
Étape 5 : tester un appel d’outil
Dans Cursor, sélectionnez le modèle personnalisé, puis envoyez une instruction qui force l’utilisation d’un outil :
Ouvrez le fichier README de ce dépôt, listez chaque bloc de code et dites-moi lesquels n’ont pas d’indications de langage.
Le flux attendu :
- Cursor envoie la requête utilisateur au proxy.
- Le proxy transmet à DeepSeek.
- DeepSeek renvoie
content,reasoning_contentet untool_call. - Le proxy met en cache
reasoning_content. - Cursor exécute l’outil, puis envoie le résultat.
- Cursor ne renvoie pas
reasoning_content. - Le proxy retrouve le raisonnement en cache et le réinjecte.
- DeepSeek accepte la requête et renvoie la réponse finale.
Pour voir l’injection dans les logs :
deepseek-cursor-proxy --verbose
Coût estimé avec Cursor
V4-Pro utilise les tarifs API DeepSeek, pas les crédits Cursor. À partir de mai 2026 :
| Type de jeton | Taux par 1M de jetons |
|---|---|
| Entrée, échec de cache | $0.435 |
| Entrée, succès de cache | $0.003625 |
| Sortie | $0.87 |
Exemple pour une journée intensive :
- 50 tours de chat.
- 8 000 tokens d’entrée par tour.
- 1 500 tokens de sortie par tour.
Calcul au pire cas :
50 × 8 000 × 0,435 $ / 1 000 000 = 0,174 $
50 × 1 500 × 0,87 $ / 1 000 000 = 0,065 $
Avec contexte, historique et chaînes d’outils, le total peut monter autour de 1 $ pour une journée intensive selon votre usage et le taux de cache.
Pour le détail de la réduction de prix, consultez DeepSeek V4-Pro : une réduction de prix de 75 % désormais permanente.
Pour les autres modèles DeepSeek :
Comportement de V4-Pro dans Cursor
1. Les tokens de réflexion sont visibles
Par défaut, le proxy rend le raisonnement dans un bloc markdown escamotable via <details>.
Pour masquer cet affichage :
deepseek-cursor-proxy --no-display-reasoning
Le raisonnement continue de transiter vers DeepSeek. Seul l’affichage dans Cursor est supprimé.
2. Le premier appel d’outil est plus lent
V4-Pro raisonne avant de demander un outil. Attendez-vous à quelques secondes de latence avant le premier tool_call.
3. Les refactorisations multi-fichiers sont le cas d’usage principal
V4-Pro peut être utile pour :
- renommages multi-fichiers ;
- changements de signatures ;
- refactorisations guidées par configuration ;
- corrections nécessitant une lecture de plusieurs fichiers.
Pour d’anciens workflows DeepSeek avec Cursor :
Tester votre configuration DeepSeek avec Apidog
L’intégration Cursor teste seulement le chemin Cursor → proxy → DeepSeek. Si vous utilisez V4-Pro dans un bot CI, un agent backend ou un plugin IDE personnalisé, ajoutez un banc de test API reproductible.
Avec Apidog, créez un environnement pointant vers :
https://api.deepseek.com/v1
Ajoutez votre clé API DeepSeek, puis importez le schéma OpenAI Chat Completions.
Vous pouvez ensuite :
- enregistrer des réponses de référence de V4-Pro ;
- rejouer les mêmes scénarios après chaque changement de prompt ;
- valider la forme des
tool_callsavec des assertions JSON Schema ; - comparer V4-Pro et GPT-5.5 sur les mêmes entrées.
Téléchargez Apidog, importez la spécification OpenAPI de DeepSeek, puis suivez le même flux que dans Comment utiliser l’API DeepSeek V4.
Dépannage
Erreur 400 après le premier appel d’outil
Vérifiez :
- le proxy est bien lancé ;
- Cursor pointe vers l’URL ngrok actuelle ;
- l’URL de base se termine par
/v1; - les logs du proxy montrent les requêtes entrantes.
Le tunnel ngrok change
Avec le niveau gratuit, l’URL peut changer au redémarrage.
Solution : réservez un domaine ngrok et lancez :
deepseek-cursor-proxy --ngrok-url https://your-reserved.ngrok-free.app
Le raisonnement apparaît en double
Cela peut arriver si deux instances du proxy partagent le même cache SQLite.
Corrigez avec :
pkill -f deepseek-cursor-proxy
rm ~/.deepseek-cursor-proxy/reasoning_content.sqlite3
deepseek-cursor-proxy
Le taux de cache est faible
Le cache de prompts DeepSeek exige des préfixes identiques au byte près. Si Cursor injecte des timestamps ou des identifiants de session, les hits de cache diminuent.
Déplacez les contenus variables dans le message utilisateur quand c’est possible.
Cursor indique « modèle introuvable »
Le nom du modèle doit être un identifiant DeepSeek valide, par exemple :
deepseek-v4-pro
deepseek-v4-flash
deepseek-v3-2-pro
deepseek-r1-1
Alternatives
Utiliser V4-Flash sans proxy
deepseek-v4-flash ne renvoie pas reasoning_content. Cursor peut donc l’appeler directement sans contournement.
Vous perdez le raisonnement V4-Pro, mais l’intégration est plus simple. La tarification mentionnée est de 0,14 $ / 0,28 $ par million de tokens.
Utiliser un autre assistant IDE
Certains outils gèrent nativement les modèles avec raisonnement, comme Cline ou Continue. Si vous n’êtes pas attaché à Cursor, cela peut être plus simple que d’exécuter un proxy.
Voir Meilleurs assistants de codage open source en 2026 : alternatives gratuites à Cursor.
Autres intégrations Cursor :
FAQ
Pourquoi Cursor ne prend-il pas DeepSeek V4-Pro en charge nativement ?
Cursor suit le schéma OpenAI Chat Completions. reasoning_content est une extension DeepSeek. Cursor devrait ajouter une logique spécifique fournisseur pour conserver ce champ.
Le proxy fonctionne-t-il avec DeepSeek R1 ou V3.2 ?
Oui, si le modèle DeepSeek renvoie reasoning_content et l’exige dans les suivis d’appels d’outils.
Peut-on laisser le proxy tourner en permanence ?
Oui, mais le cache SQLite contient le raisonnement brut des sessions. Sur une machine partagée, restreignez les permissions du répertoire :
chmod 700 ~/.deepseek-cursor-proxy
Peut-on utiliser le proxy sans ngrok ?
Oui :
deepseek-cursor-proxy --no-ngrok
Il expose alors :
http://127.0.0.1:9000
Mais les versions standard de Cursor rejettent généralement les URLs http:// dans l’interface de modèle personnalisé. Utilisez ngrok, Cloudflare Tunnel ou Tailscale Funnel si nécessaire.
Est-ce compatible avec Cursor Composer 2.5 ?
Oui. Composer utilise le même routage de modèles que le panneau de chat. Les appels d’outils bénéficient donc de la même réinjection de reasoning_content.
Quel est le surcoût de latence ?
Le proxy ajoute surtout :
- un saut local ;
- une lecture SQLite ;
- une manipulation JSON.
Le surcoût annoncé est faible par rapport au temps de génération du modèle. ngrok ajoute aussi une latence réseau selon le point d’entrée utilisé.
Comment le cache est-il sélectionné ?
Le proxy hache le préfixe de conversation avec SHA-256, associe ce hash au dernier reasoning_content, puis recherche ce hash lors de la requête suivante.
Les correspondances partielles ne sont pas utilisées, ce qui évite de polluer deux conversations proches mais différentes.
Prochaines étapes
V4-Pro se rapproche de GPT-5.5 sur certains benchmarks de codage, comme cette comparaison DataCamp, tout en affichant un prix de sortie bien plus bas.
Pour l’utiliser concrètement dans Cursor :
- Installez
deepseek-cursor-proxy. - Configurez ngrok.
- Ajoutez
deepseek-v4-procomme modèle personnalisé dans Cursor. - Testez sur cinq vraies pull requests de votre dépôt.
- Surveillez les erreurs 400 et les hits de cache.
- Ajoutez une suite de régression Apidog contre
api.deepseek.compour tester vos prompts et contrats d’outils hors Cursor.
La taxe sur les tokens de réflexion est payée. Le prix ne l’est pas.

Top comments (0)