Changer le thème

L'IA génère toujours du mauvais code ? 5 techniques de prompt Cursor pour gagner 50 % d'efficacité

Easton editorial illustration: solo-founder business system console

Vendredi, 16 h 30. Cursor venait de générer du code, et j’étais complètement abasourdi.

Je voulais seulement un endpoint de connexion utilisateur. Il m’a sorti un monstre de 300 lignes — types de paramètres erronés, connexion base de données en dur dans le code, trois styles différents de gestion d’erreurs mélangés. Grande inspiration, suppression, nouvel essai. La deuxième fois, il avait modifié des fichiers de configuration que je ne lui avais pas demandé de toucher.

Ce jour-là, j’ai compris : le problème n’était pas l’IA, c’était que je ne lui avais jamais dit clairement « quoi faire » et « quoi ne pas faire ».

L’outil de programmation IA était installé, l’enthousiasme était là, mais au bout d’un moment — le code généré était soit à côté de la plaque, soit correct en apparence mais explosait à l’exécution. Après plusieurs allers-retours, écrire soi-même allait plus vite.

Un collègue utilisait le même Cursor pour la même fonctionnalité : dix minutes là où moi j’en passais une heure. La différence ? Son prompt était structuré, le contexte complet, les limites claires.

Cet article vous guide pas à pas à travers 5 techniques de prompt Cursor immédiatement efficaces. Pas de théorie abstraite — des formules concrètes issues de l’expérience terrain. Vous saurez comment faire comprendre vos besoins à l’IA et obtenir du code précis et utilisable.

Pourquoi vos prompts « ne marchent pas »

L’IA ne lit pas dans vos pensées — elle ne « voit » que ce que vous donnez

Beaucoup pensent que l’IA est si intelligente qu’elle devine ce qu’ils veulent. Faux. Même puissante, l’IA reste un « compléteur de texte avancé » — elle ne raisonne qu’à partir de ce que vous fournissez. Ce que vous ne dites pas, elle doit le deviner.

C’est comme appeler un ami pour qu’il vous achète un café en ne disant que « achète-moi un café ». Arrivé au comptoir, il hésite : americano ou latte ? grand ou moyen ? sucre ? Il finit par choisir au hasard. L’IA fait pareil.

Dans un grand projet, le problème de « mémoire » est encore plus visible. La fenêtre de contexte est limitée — elle ne peut pas charger toute votre base de code. Vous lui demandez de modifier une fonction qu’elle ignore être appelée à 20 endroits : un changement, et tout casse.

Trois catastrophes de prompt courantes

Catastrophe 1 : trop vague

❌ « Aide-moi à implémenter un tri »

Comme dire au GPS « je vais à Pékin » — où à Pékin ? comment ? quand arriver ? L’IA improvise : tri à bulles, ou bibliothèque tierce absente de votre projet.

✅ « Dans le fichier utils/array.ts, ajoute une fonction qui trie la liste des utilisateurs par date d’inscription décroissante, avec Array.sort() natif, sans nouvelle dépendance »

La différence : fichier, données, méthode, contraintes — tout est explicite.

Catastrophe 2 : manque de contexte

❌ « Ajoute la gestion d’erreurs »

L’IA : où ? quelles erreurs ? try-catch ou codes d’erreur ? quel format de retour ?

Comme un médecin qui demande « où avez-vous mal ? » et vous répondez « mal ».

✅ « Dans api/login.ts, fonction handleLogin, ajoute la gestion d’erreurs :

  • Capturer les échecs de requête réseau (try-catch)
  • Retourner le format unifié { success: false, error: string }
  • Suivre le traitement de api/register.ts »

Catastrophe 3 : absence de contraintes

❌ « Optimise les performances de ce composant »

L’IA peut tout refondre — nouvelles bibliothèques, gestion d’état, architecture entière. Vous vouliez juste React.memo, elle vous fait une opération majeure.

✅ « Optimise les performances du composant UserList.tsx :

  • Utiliser uniquement React.memo ou useMemo
  • Ne pas modifier l’interface props du composant
  • Ne pas introduire de nouvelle bibliothèque tierce »

La vérité sur les « hallucinations » de l’IA

Vous avez déjà vu du code qui appelle une fonction inexistante ou référence une variable absente du projet ? C’est une hallucination.

Selon les bonnes pratiques officielles de Cursor, un contexte clair réduit 70 % des hallucinations. Pourquoi ?

Face à une information incomplète, l’IA « comble » par des suppositions. Sans montrer le code existant, elle devine selon des schémas courants. Vous demandez une connexion, elle suppose un authService.login() — que votre projet n’a peut-être pas.

La solution est simple : montrez explicitement le code existant pertinent.

Avant chaque prompt, je me pose trois questions :

  1. L’IA sait-elle dans quel fichier intervenir ?
  2. Connaît-elle la structure du code existant ?
  3. Sait-elle ce qui peut ou ne peut pas être modifié ?

Si je ne peux pas répondre, je n’envoie pas encore le prompt.

La formule d’or du prompt structuré

Le cadre 5W1H : faire comprendre votre besoin à l’IA

Les journalistes utilisent 5W1H (Who, What, When, Where, Why, How). Les prompts aussi.

  • What (quoi) : que doit faire l’IA ?
  • Why (pourquoi) : quelle est l’intention ?
  • Where (où) : quel fichier ou module ?
  • When (quand) : dans quelles conditions ?
  • Who (qui/quoi) : quelles données ?
  • How (comment) : quelle stack ou bibliothèque ?

Pas besoin de tout remplir à chaque fois. L’essentiel : éviter que l’IA devine.

Exemple — ajouter une validation de saisie :

❌ Version floue :

Ajouter la validation des entrées utilisateur

✅ Version 5W1H :

**What** : Ajouter la validation au formulaire d'inscription
**Where** : src/components/RegisterForm.tsx
**Who** : Valider nom d'utilisateur, e-mail et mot de passe
**How** : Utiliser la bibliothèque Yup existante (déjà installée)
**When** : Au clic sur le bouton Envoyer
**Why** : Empêcher l'envoi de données invalides au backend

Avec ça, l’IA ne part presque jamais en vrille.

Le modèle structuré recommandé par Cursor

L’équipe Cursor a condensé un modèle très pratique — je l’utilise depuis des mois :

## Goal (objectif)
[Une phrase décrivant ce qu'il faut réaliser]

## Context (contexte)
[Fichier actuel, code pertinent, stack technique]

## Current Behavior (comportement actuel)
[État actuel]

## Desired Behavior (comportement attendu)
[Résultat souhaité]

## Acceptance Criteria (critères d'acceptation)
[Quand considérer la tâche terminée]

## Constraints (contraintes)
[Ce qu'il ne faut pas modifier, règles obligatoires]

Le point fort : la section Constraints. Beaucoup ne disent que « quoi faire », pas « quoi ne pas faire » — l’IA sur-interprète.

Cas pratique : fonctionnalité de connexion React

Comparons un scénario réel — ajouter la connexion utilisateur à un projet React.

❌ Prompt flou (débutant) :

Aide-moi à implémenter la connexion utilisateur

L’IA peut produire un composant de 200 lignes, des bibliothèques inutiles, voire inventer une API inexistante.

✅ Prompt structuré (confirmé) :

## Goal
Implémenter la connexion utilisateur dans le projet React

## Context
- Stack : React 18 + TypeScript
- État : Redux Toolkit
- Service API existant : src/services/authService.ts (méthode login)
- UI : Ant Design 5.x

## Current Behavior
La page Login (src/pages/Login.tsx) n'a qu'une UI statique, sans logique

## Desired Behavior
1. L'utilisateur saisit identifiant et mot de passe puis clique sur Connexion
2. Appel à authService.login() pour vérifier
3. Succès : enregistrer le token dans Redux, rediriger vers /dashboard
4. Échec : message d'erreur (Ant Design message.error)

## Acceptance Criteria
- [ ] Validation : identifiant et mot de passe obligatoires
- [ ] État loading pendant la connexion
- [ ] Champ mot de passe avec type="password"
- [ ] Passer ESLint et TypeScript

## Constraints
- **Ne pas modifier** authService.ts
- **Ne pas introduire** de nouvelle bibliothèque tierce
- **Utiliser obligatoirement** le slice Redux existant (src/store/authSlice.ts)

Effet généré :

Premier prompt — l’IA peut produire :

// ❌ Résultat de l'improvisation
import { useState } from 'react';
import axios from 'axios'; // bibliothèque non demandée

function Login() {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');

  const handleLogin = async () => {
    const res = await axios.post('/api/auth/login', { username, password });
    localStorage.setItem('token', res.data.token); // pas de Redux
  };

  // ... 150 lignes inutiles
}

Deuxième prompt — l’IA suit vos contraintes :

// ✅ Résultat du prompt structuré
import { useState } from 'react';
import { Form, Input, Button, message } from 'antd';
import { useDispatch } from 'react-redux';
import { login } from '@/services/authService';
import { setToken } from '@/store/authSlice';
import { useNavigate } from 'react-router-dom';

export default function Login() {
  const [loading, setLoading] = useState(false);
  const dispatch = useDispatch();
  const navigate = useNavigate();

  const handleSubmit = async (values: { username: string; password: string }) => {
    setLoading(true);
    try {
      const { token } = await login(values.username, values.password);
      dispatch(setToken(token));
      navigate('/dashboard');
    } catch (error) {
      message.error('Échec de connexion, vérifiez identifiant et mot de passe');
    } finally {
      setLoading(false);
    }
  };

  return (
    <Form onFinish={handleSubmit}>
      <Form.Item name="username" rules={[{ required: true, message: 'Saisissez votre identifiant' }]}>
        <Input placeholder="Identifiant" />
      </Form.Item>
      <Form.Item name="password" rules={[{ required: true, message: 'Saisissez votre mot de passe' }]}>
        <Input.Password placeholder="Mot de passe" />
      </Form.Item>
      <Button type="primary" htmlType="submit" loading={loading}>
        Connexion
      </Button>
    </Form>
  );
}

La différence :

  • Composants Ant Design demandés
  • authService existant utilisé
  • Token stocké via Redux
  • Validation et loading présents
  • Aucune nouvelle dépendance

Voilà la puissance du prompt structuré.

5 techniques de prompt immédiatement efficaces

Technique 1 : planifier avant de coder (Plan Mode)

La fonctionnalité qui m’a le plus surpris.

Avant, je laissais l’IA coder directement — fichiers modifiés à tort, code critique supprimé, logique incohérente. Puis j’ai découvert le mode Plan de Cursor (Shift+Tab) — ça a changé mon flux de travail.

La logique : l’IA réfléchit d’abord, agit ensuite.

Flux :

  1. Vous décrivez le besoin
  2. L’IA analyse la base de code et pose des questions (« Conserver la gestion d’erreurs actuelle ? »)
  3. Elle élabore un plan (fichiers modifiés, fonctionnalités ajoutées)
  4. Vous validez et ajustez le plan
  5. Elle ne code qu’après confirmation

Pourquoi c’est utile ? Vous avez une « seconde chance ».

Exemple : la semaine dernière, j’ai demandé l’internationalisation. En mode Plan :

Plan :
1. Installer i18next et react-i18next
2. Créer src/i18n/locales/
3. Modifier App.tsx pour ajouter I18nProvider
4. Mettre à jour le texte en dur de tous les composants (~ 30 fichiers)

À l’étape 4, j’ai stoppé : « Attends, ne touche pas aux 30 fichiers — commence par 3 pages. » Plan ajusté, puis exécution.

Sans Plan Mode, les 30 fichiers auraient déjà été modifiés — difficile à annuler.

Valeur pratique : évite que l’IA casse le code en agissant directement — idéal pour refactorisations larges et nouvelles fonctionnalités.

Technique 2 : fournir des exemples de code concrets

L’IA excelle à « reproduire un modèle ». Quelques exemples suffisent pour imiter votre style — c’est le Few-shot Prompting.

Scénario : écrire un endpoint API dans votre style de gestion d’erreurs.

❌ Sans exemple :

Écris un endpoint API pour lister les utilisateurs

L’IA peut produire :

app.get('/users', (req, res) => {
  const users = db.getUsers();
  res.json(users);
});

✅ Avec exemple :

Écris un endpoint pour lister les utilisateurs, en suivant le style de cet endpoint existant :

**Exemple 1** :
\`\`\`typescript
export const getProductById = async (req: Request, res: Response) => {
  try {
    const { id } = req.params;
    const product = await productService.findById(id);

    if (!product) {
      return res.status(404).json({
        success: false,
        error: 'Product not found'
      });
    }

    res.json({ success: true, data: product });
  } catch (error) {
    logger.error('Error fetching product:', error);
    res.status(500).json({
      success: false,
      error: 'Internal server error'
    });
  }
};
\`\`\`

Implémente getUserList dans le même style :
- async/await
- Gestion d'erreurs unifiée
- Format de retour : { success, data/error }
- logger pour les erreurs

Résultat :

export const getUserList = async (req: Request, res: Response) => {
  try {
    const users = await userService.findAll();
    res.json({ success: true, data: users });
  } catch (error) {
    logger.error('Error fetching users:', error);
    res.status(500).json({
      success: false,
      error: 'Internal server error'
    });
  }
};

Parfaitement aligné avec votre style.

Astuce : créez prompts/templates.md à la racine avec vos exemples courants — copiez-collez dans le prompt au besoin.

Technique 3 : préciser ce qu’il ne faut pas faire

Cette technique m’a sauvé d’innombrables fois.

Par défaut, l’IA « aide » — parfois trop. Vous demandez de corriger un bug, elle « optimise » aussi le code voisin et introduit de nouveaux problèmes.

Selon les recherches de l’équipe Cursor, des contraintes explicites réduisent 60 % des modifications inattendues.

❌ Sans contraintes :

Corrige le bug de pagination du composant UserList

L’IA peut :

  • Modifier l’interface props (erreur dans le composant parent)
  • Réécrire toute la pagination (nouveau bug)
  • Introduire une bibliothèque tierce

✅ Avec contraintes :

Corrige le bug de pagination du composant UserList

**Contraintes** :
- **Ne pas modifier** l'interface props (types TypeScript)
- **Ne pas introduire** de nouvelle bibliothèque tierce
- **Modifier uniquement** la logique interne de handlePageChange
- **Ne pas toucher** aux styles ni à la structure UI

L’IA respecte ces règles et ne change que le nécessaire.

Technique avancée : demander à l’IA de lister ses hypothèses d’abord.

Corrige le bug de pagination. Avant de commencer, liste tes hypothèses :
1. Quelle cause de bug envisages-tu ?
2. Quel code comptes-tu modifier ?
3. Introduiras-tu des dépendances ou changeras-tu des interfaces ?

Vous validez sa compréhension avant qu’elle n’agisse — idéal pour les bugs complexes.

Technique 4 : utiliser les critères d’acceptation comme ancre

Emprunté au développement agile.

Définissez les critères d’acceptation en tête de prompt (pas en fin) — l’IA s’en sert comme objectif, comme une étoile polaire.

❌ Sans critères :

Refactoriser les performances du composant DataTable

L’IA : refactoriser comment ? avec quelles méthodes ? selon quels critères ?

✅ Avec critères :

Refactoriser les performances du composant DataTable

**Critères d'acceptation** (tous obligatoires) :
- [ ] Avec 1000 lignes, FPS ≥ 55
- [ ] Utiliser React.memo et useMemo
- [ ] Ne pas modifier l'API du composant (props et callbacks)
- [ ] Passer tous les tests unitaires existants
- [ ] Passer ESLint

**Problème actuel** :
Avec 500 lignes, FPS tombe à 20, défilement saccadé

L’IA optimise en gardant ces critères en vue. Si une optimisation casse les tests ou l’API, elle l’évite.

Bénéfice : évite les changements « utiles en apparence mais inutiles en pratique ».

Technique 5 : distinguer Inline Edit et Agent Mode

Cursor propose deux modes — le bon choix double l’efficacité.

Inline Edit (Cmd+K) :

  • Pour : petites modifications mono-fichier, refactorisation, correction de bug
  • Atouts : rapide, précis, pas de modifications cross-fichiers
  • Exemples : renommer une fonction, ajouter un paramètre, corriger un bug

Agent Mode (Cmd+I ou Chat) :

  • Pour : raisonnement multi-fichiers, nouvelles fonctionnalités, changements d’architecture
  • Atouts : analyse toute la base de code, opérations cross-fichiers, planification
  • Exemples : nouvelle fonctionnalité, refactorisation large, migration de stack

Je utilisais Agent Mode pour tout — inefficace. Inline Edit pour le simple, Agent Mode pour le complexe.

Arbre de décision :

Plusieurs fichiers à modifier ?
├─ Oui → Agent Mode
└─ Non → Contexte complexe à comprendre ?
    ├─ Oui → Agent Mode
    └─ Non → Inline Edit

Exemples :

Scénario 1 : renommer getUserData en fetchUserData
Inline Edit : sélectionner, Cmd+K, « renommer en fetchUserData », instantané.

Scénario 2 : gestion des permissions utilisateur (Model, Controller, View, Config)
Agent Mode : analyse, questions, plan, implémentation multi-fichiers.

Conséquences d’un mauvais choix :

  • Inline Edit sur une tâche complexe → pas de vue globale, oublis
  • Agent Mode sur une tâche simple → attente longue, sur-interprétation

Astuce : en cas de doute, Plan en Agent Mode pour voir combien de fichiers seront touchés ; s’il n’y en a qu’un ou deux, repassez en Inline Edit.

Aller plus loin : construire votre boîte à outils de prompts

Créer des modèles de prompts réutilisables

Après un moment, vous remarquez des tâches répétitives — nouveaux endpoints API, composants, tests unitaires, migrations…

Plutôt que de tout réécrire, créez des modèles.

Mon projet a un dossier prompts/ classé par type :

prompts/
├── api-endpoint.md       # Modèle d'endpoint API
├── react-component.md    # Modèle de composant React
├── unit-test.md          # Modèle de test unitaire
├── migration.md          # Modèle de migration BDD
└── refactor.md           # Modèle de refactorisation

Exemple : modèle d’endpoint API (prompts/api-endpoint.md)

# Modèle d'endpoint API

## Goal
Ajouter un endpoint API [description] dans [module]

## Context
- Fichier de routes : src/routes/[module].routes.ts
- Contrôleur : src/controllers/[module].controller.ts
- Service : src/services/[module].service.ts
- Modèle : src/models/[module].model.ts

## Desired Behavior
**Requête** :
- Method: [GET/POST/PUT/DELETE]
- Path: /api/[chemin]
- Body/Query: [paramètres]

**Réponse** :
- Succès : { success: true, data: [...] }
- Échec : { success: false, error: "..." }

## Acceptance Criteria
- [ ] Suivre le modèle de gestion d'erreurs existant
- [ ] Utiliser async/await
- [ ] Validation des entrées (Joi ou Zod)
- [ ] Journaliser les erreurs (logger)
- [ ] Passer la vérification TypeScript

## Constraints
- **Ne pas modifier** la structure de configuration des routes
- **Ne pas introduire** de nouvelle bibliothèque (sauf justification)
- **Utiliser** la connexion base de données existante

Copiez, complétez, envoyez.

Pour l’équipe : modèles partagés → style cohérent, onboarding plus rapide.

Utiliser Agent Skills (nouveauté 2026)

Grande tendance des outils de programmation IA en 2026.

Agent Skills = « applications IA » réutilisables. Vous encapsulez vos bonnes pratiques dans un Skill et l’invoquez comme une fonction.

Exemple personnel : pour mes articles de blog, j’avais créé un Skill qui :

  1. Analyse le contenu
  2. Identifie les sections à illustrer
  3. Génère les prompts d’image
  4. Indique les emplacements d’insertion

Un lancement, tout le flux est automatisé.

Comment créer des Agent Skills ?

Dans Cursor, sous .cursor/skills/ :

.cursor/
└── skills/
    ├── code-review.md      # Skill de revue de code
    ├── test-generator.md   # Skill de génération de tests
    └── api-doc.md          # Skill de documentation API

Actualité : en décembre 2025, Agent Skills est devenu une spécification ouverte — Claude Code, Cursor, VS Code, GitHub Copilot la supportent. Vos Skills voyagent entre outils.

Au début, je trouvais ça « sur-ingénierisé » — jusqu’à un projet multi-personnes avec Skills partagés : qualité et efficacité en nette hausse.

Optimiser la structure du projet pour aider l’IA

L’IA ne lit pas le code comme nous. Un projet clair → de meilleurs résultats.

Recommandations :

  1. Créer le dossier /prompts
    Modèles et exemples de code, prêts à copier.

  2. Utiliser .cursor/ pour le contexte projet
    Fichier .cursor/context.md avec :

    • Stack technique
    • Conventions de style
    • Bibliothèques courantes
    • Règles spéciales (ex. « méthodes privées préfixées par `_ »)

    L’IA lit ce fichier automatiquement.

  3. Arborescence et nommage clairs
    utils.ts, helpers.ts, common.ts — l’IA ne sait pas quoi en faire.

    Mieux :

    utils/
    ├── date-formatter.ts
    ├── string-validator.ts
    └── array-helpers.ts

Mon expérience : plus le projet est désordonné, plus l’IA hallucine. Un dossier propre aide les humains et l’IA.

Guide anti-pièges : erreurs courantes et solutions

Erreur 1 : surcharge d’information — tout donner d’un coup

Au début, j’ai collé le cahier des charges, trois fichiers et cinq articles — « plus d’info, mieux c’est ».

Résultat : l’IA noyée. Elle rate l’essentiel, comprend de travers, ou time-out. Comme raconter dix choses à la fois — on retient moins.

Bonne approche : divulgation progressive

  1. D’abord le besoin central
  2. Détails quand l’IA pose des questions
  3. Contexte par étapes

❌ Surcharge :

Aide-moi à refactoriser le module d'authentification.
[500 lignes de code]
[cahier des charges]
[trois articles]
Objectifs : performance, sécurité, élégance...

✅ Progressif :

Tour 1 :
Je veux refactoriser l'authentification pour renforcer la sécurité.
JWT actuellement, problème : pas de refresh token.
De quoi as-tu besoin ?

[L'IA demande : durée d'expiration ? stockage ?]

Tour 2 :
Expiration 1 h, stockage localStorage.
Logique actuelle (extrait) :
[50 lignes clés]

Comment améliorer ?

[L'IA propose, vous validez avant exécution]

L’IA reste focalisée ; vous corrigez sa compréhension à temps.

Erreur 2 : trop compter sur l’IA sans revoir le code

Le piège le plus douloureux pour moi.

Une fois, l’IA a écrit une fonction de traitement de données — pas d’erreur, tests OK, code propre, merge direct. En production : cas limites mal gérés, données utilisateur corrompues.

Le code qui « a l’air parfait » est le plus dangereux.

Alerte : plus l’IA génère vite, plus vous devez relire attentivement.

Ma routine après génération :

  1. Cas limites : tableaux vides, null, undefined, extrêmes — gérés ?
  2. Effets de bord : impact sur d’autres modules ?
  3. Performance : boucles infinies, fuites mémoire, calculs redondants ?

Astuce : demander à l’IA de revoir son code.

Revoyez le code que vous venez de générer :
1. Que se passe-t-il si l'entrée est un tableau vide ?
2. Y a-t-il un problème de performance ?
3. Quelles hypothèses avez-vous utilisées ? Sont-elles toujours valides ?

Elle trouve souvent ses propres erreurs.

Erreur 3 : attendre la perfection du premier coup

Beaucoup voient l’IA comme un « bouton magique » — besoin in, code parfait out. Irréaliste.

L’IA est un collaborateur, pas un générateur entièrement automatique. Le flux efficace : dialogue itératif.

  1. Vous décrivez
  2. L’IA propose ou questionne
  3. Vous confirmez, corrigez, complétez
  4. L’IA ajuste
  5. Répétez 3-4

Exemple :

Vous : Implémente la recherche dans la liste utilisateurs

IA : J'ajoute une barre de recherche avec filtrage en temps réel.
     Quels champs ? Nom, e-mail, autre ?

Vous : Nom et e-mail, pas de filtrage temps réel —
       déclencher au clic sur Rechercher

IA : Filtrage frontend ou requête backend ?

Vous : Frontend, volume de données modeste

IA : D'accord, Array.filter() —
     voici le plan d'implémentation...

C’est une conversation, pas un ordre unique.

Astuce : activez Show Work dans les paramètres Cursor — vous voyez le raisonnement et repérez les écarts plus tôt.

Hors-sujet : ne perdez pas de temps à « dresser » le prompt

Conseil contre-intuitif : ne cherchez pas le prompt parfait.

J’ai vu des gens passer 30 minutes sur un prompt pour un résultat pire qu’un code écrit à la main. Contre-productif.

L’ingénierie des prompts sert l’efficacité, pas la démonstration. Si vous pouvez le faire en 10 minutes, ne passez pas 20 minutes à rédiger un prompt.

Quand utiliser l’IA ?

  • ✅ Tâches répétitives (modifications en lot, modèles)
  • ✅ Domaines peu familiers (nouvelle stack, nouvelle bibliothèque)
  • ✅ Tâches complexes mais structurées (API, CRUD)

Quand s’en passer ?

  • ❌ Code trivial
  • ❌ Conception algorithmique profonde
  • ❌ Code très personnalisé sans modèle

Rappel : l’IA est un outil, pas une fin. Résoudre vite le problème, c’est ça l’objectif.

Conclusion

Bien rédiger un prompt n’est pas de la haute technologie. Trois piliers : objectif clair, contexte suffisant, limites définies.

Récap des 5 techniques clés :

  1. Plan Mode d’abord — une « seconde chance » avant d’agir
  2. Exemples de code — l’IA écrit dans votre style
  3. Contraintes explicites — ce qu’il ne faut pas toucher
  4. Critères d’acceptation — une cible claire
  5. Bon mode de travail — Inline Edit pour le simple, Agent Mode pour le complexe

Avec ça, l’IA cesse d’être un « assistant maladroit » et devient un vrai partenaire de productivité. Chez moi, la précision du code généré a gagné au moins 50 % ; beaucoup de tâches répétitives tiennent en 10 minutes.

Ouvrez Cursor maintenant et testez le modèle structuré. Pour votre prochaine fonctionnalité, format Goal - Context - Desired Behavior - Constraints. Vous sentirez la différence tout de suite.

Rappelez-vous : l’avenir de la programmation IA n’est pas « l’IA remplace les développeurs », c’est « les développeurs qui maîtrisent l’IA remplacent ceux qui ne la maîtrisent pas ». Cet écart commence avec votre premier prompt de qualité.

Améliorer la qualité du code IA avec des prompts structurés

Maîtriser le flux complet de l'ingénierie des prompts Cursor, des instructions floues à une sortie précise

⏱️ Estimated time: 30 min

  1. 1

    Step 1: Comprendre le fonctionnement de l'IA : éviter les catastrophes de prompt courantes

    L'IA ne raisonne qu'à partir des informations que vous fournissez — elle ne lit pas dans vos pensées. Trois catastrophes fréquentes :

    **Trop vague** :
    ❌ « Aide-moi à implémenter un tri »
    ✅ « Dans le fichier utils/array.ts, ajoute une fonction qui trie la liste des utilisateurs par date d'inscription décroissante, en utilisant Array.sort() natif, sans nouvelle dépendance »

    **Manque de contexte** :
    ❌ « Ajoute la gestion d'erreurs »
    ✅ « Dans api/login.ts, dans la fonction handleLogin, ajoute la gestion d'erreurs : capturer les échecs de requête réseau (try-catch), retourner le format unifié &#123; success: false, error: string &#125;, en suivant le traitement de api/register.ts »

    **Absence de contraintes** :
    ❌ « Optimise les performances de ce composant »
    ✅ « Optimise les performances du composant UserList.tsx : utiliser uniquement React.memo ou useMemo, ne pas modifier l'interface props, ne pas introduire de nouvelle bibliothèque tierce »

    Point clé : un contexte clair réduit 70 % des hallucinations IA ; des contraintes explicites réduisent 60 % des modifications inattendues.
  2. 2

    Step 2: Utiliser la formule d'or du prompt structuré

    Adoptez le modèle en 6 parties recommandé par Cursor :

    ## Goal (objectif)
    Une phrase décrivant ce qu'il faut réaliser

    ## Context (contexte)
    • Stack technique (React 18 + TypeScript)
    • Chemins des fichiers concernés (src/pages/Login.tsx)
    • Services existants (src/services/authService.ts)
    • Bibliothèques utilisées (Ant Design 5.x)

    ## Current Behavior (comportement actuel)
    La page de connexion n'a qu'une UI statique, sans logique interactive

    ## Desired Behavior (comportement attendu)
    1. L'utilisateur saisit identifiant et mot de passe puis clique sur Connexion
    2. Appel à authService.login() pour vérifier
    3. Succès : enregistrer le token dans Redux, rediriger vers /dashboard
    4. Échec : afficher un message d'erreur (Ant Design message.error)

    ## Acceptance Criteria (critères d'acceptation)
    • Validation du formulaire : identifiant et mot de passe obligatoires
    • Afficher un état loading pendant la connexion
    • Champ mot de passe avec type=&quot;password&quot;
    • Passer ESLint et la vérification TypeScript

    ## Constraints (contraintes)
    • Ne pas modifier le fichier authService.ts
    • Ne pas introduire de nouvelle bibliothèque tierce
    • Utiliser obligatoirement le slice Redux existant (src/store/authSlice.ts)

    Ce modèle évite que l'IA devine et produit du code conforme à vos conventions.
  3. 3

    Step 3: Maîtriser 5 techniques pratiques immédiatement efficaces

    **Technique 1 : planifier avant de coder (Plan Mode)**
    • Appuyez sur Shift+Tab pour passer en mode Plan
    • L'IA analyse d'abord la base de code et pose des questions
    • Élabore un plan d'action (quels fichiers seront modifiés)
    • Vous validez et ajustez le plan avant exécution
    • Évite que l'IA modifie directement et casse le code

    **Technique 2 : fournir des exemples de code concrets (Few-shot Prompting)**
    • Collez vos exemples de code existants dans le prompt
    • L'IA imite votre style et vos habitudes de gestion d'erreurs
    • Créez prompts/templates.md pour stocker les exemples courants

    **Technique 3 : préciser ce qu'il ne faut pas faire**
    • Listez les interdictions dans Constraints
    • Réduit 60 % des modifications inattendues
    • Avancé : demandez à l'IA de lister d'abord ses hypothèses (cause du bug, périmètre, dépendances)

    **Technique 4 : utiliser les critères d'acceptation comme ancre**
    • Définissez-les en tête de prompt
    • L'IA s'en sert comme étoile polaire pour raisonner
    • Évite les changements « utiles en apparence mais inutiles en pratique »

    **Technique 5 : distinguer Inline Edit et Agent Mode**
    • Inline Edit (Cmd+K) : petites modifications mono-fichier, rapide et précis
    • Agent Mode (Cmd+I) : raisonnement multi-fichiers, nouvelles fonctionnalités, changements d'architecture
    • Arbre de décision : plusieurs fichiers à modifier ? → Agent, sinon Inline
  4. 4

    Step 4: Construire une boîte à outils de prompts réutilisables

    **Créer une bibliothèque de modèles de prompts** :
    Créez un dossier prompts/ à la racine du projet, classé par catégorie :
    • api-endpoint.md (modèle d'endpoint API)
    • react-component.md (modèle de composant React)
    • unit-test.md (modèle de test unitaire)
    • migration.md (modèle de migration base de données)
    • refactor.md (modèle de refactorisation)

    Chaque modèle contient Goal, Context, Desired Behavior, Acceptance Criteria et Constraints — copiez et complétez à l'usage.

    **Utiliser Agent Skills (nouveauté 2026)** :
    Créez des applications IA réutilisables dans .cursor/skills/ :
    • code-review.md (Skill de revue de code)
    • test-generator.md (Skill de génération de tests)
    • api-doc.md (Skill de documentation API)

    En décembre 2025, Agent Skills est devenu une spécification ouverte, utilisable dans Cursor, VS Code, GitHub Copilot, etc.

    **Optimiser la structure du projet pour aider l'IA** :
    • Créez .cursor/context.md avec stack, conventions de style et règles spéciales
    • Utilisez une arborescence et des noms de fichiers clairs (date-formatter.ts plutôt que utils.ts)
    • Plus le projet est désordonné, plus l'IA hallucine
  5. 5

    Step 5: Éviter trois erreurs courantes

    **Erreur 1 : surcharge d'information**
    ❌ Coller 500 lignes de code + cahier des charges + articles techniques d'un coup
    ✅ Divulgation progressive : besoin central → questions de l'IA → détails → contexte par étapes

    **Erreur 2 : trop compter sur l'IA sans revoir le code**
    Après génération, posez-vous trois questions :
    • Les cas limites (tableau vide, null, undefined, extrêmes) sont-ils gérés ?
    • Ce code impacte-t-il d'autres modules ?
    • Y a-t-il boucles infinies, fuites mémoire ou calculs redondants ?

    Astuce : demandez à l'IA de revoir son code — « Que se passe-t-il si l'entrée est un tableau vide ? », « Y a-t-il un problème de performance ? », « Quelles hypothèses as-tu utilisées ? »

    **Erreur 3 : attendre une réponse parfaite du premier coup**
    L'IA est un collaborateur, pas un bouton magique — itérez en dialogue :
    1. Vous décrivez le besoin
    2. L'IA propose une première approche ou pose des questions
    3. Vous confirmez, corrigez, complétez
    4. L'IA optimise selon vos retours
    5. Répétez 3-4 jusqu'à satisfaction

    Activez le mode Show Work de Cursor pour voir le raisonnement de l'IA et repérer les problèmes.

FAQ

Pourquoi mon prompt détaillé produit-il encore du mauvais code ?
Vérifiez si vous avez omis un contexte clé :

• Avez-vous précisé le chemin du fichier ? (l'IA ne sait pas où intervenir)
• Avez-vous fourni des exemples de code existants ? (l'IA ne connaît pas votre style)
• Avez-vous indiqué les contraintes ? (l'IA improvise trop)

En pratique, répondez à trois questions dans le prompt : l'IA sait-elle dans quel fichier intervenir ? Connaît-elle la structure du code existant ? Sait-elle ce qui peut ou ne peut pas être modifié ? Si non, complétez avant d'envoyer.

Utilisez aussi Plan Mode pour que l'IA élabore d'abord un plan que vous validez avant exécution.
Quand utiliser Inline Edit plutôt qu'Agent Mode ?
Arbre de décision :

**Plusieurs fichiers à modifier ?**
• Oui → Agent Mode (Cmd+I ou Chat)
• Non → Contexte complexe à comprendre ?
- Oui → Agent Mode
- Non → Inline Edit (Cmd+K)

Scénarios concrets :
• Inline Edit : renommer une fonction, ajouter un paramètre, corriger un bug, refactoriser une fonction
• Agent Mode : nouvelle fonctionnalité (Model/Controller/View), refactorisation large, migration de stack, tâches nécessitant d'analyser toute la base de code

Astuce : en cas de doute, utilisez d'abord Plan en Agent Mode pour voir combien de fichiers seront touchés ; s'il n'y en a qu'un ou deux, repassez en Inline Edit.
Comment faire générer à l'IA du code conforme au style de mon projet ?
Trois méthodes :

**Méthode 1 : fournir des exemples de code concrets (la plus efficace)**
Collez vos exemples dans le prompt — l'IA imite votre style, gestion d'erreurs et conventions de nommage. C'est le Few-shot Prompting.

**Méthode 2 : créer un fichier de contexte projet**
Dans .cursor/context.md, documentez :
• Stack technique
• Conventions de style (ex. « nous préfixons les méthodes privées par _ »)
• Bibliothèques tierces courantes
• Règles spéciales

L'IA lit automatiquement ce fichier.

**Méthode 3 : modèles de prompts réutilisables**
Créez prompts/ à la racine avec des modèles pour endpoints API, composants React, tests unitaires, etc. L'équipe partage les modèles pour un style cohérent.
Le code semble correct mais plante à l'exécution — que faire ?
C'est le cas le plus dangereux : du code qui « a l'air parfait ». Solutions :

**Revoyez toujours le code généré par l'IA**, en vous posant :
1. Les cas limites sont-ils gérés ? (tableau vide, null, undefined, valeurs extrêmes)
2. Ce code impacte-t-il d'autres modules ? (effets de bord)
3. Y a-t-il des problèmes de performance ? (boucles infinies, fuites mémoire, calculs inutiles)

**Astuce pratique** : demandez à l'IA de revoir son propre code
« Revoyez le code que vous venez de générer et répondez : 1) Que se passe-t-il si l'entrée est un tableau vide ? 2) Y a-t-il un problème de performance ? 3) Quelles hypothèses avez-vous utilisées ? Sont-elles toujours valides ? »

L'IA se corrige souvent elle-même. Activez aussi Show Work dans Cursor pour voir son raisonnement.
Quand vaut-il la peine d'utiliser l'IA pour coder, et quand non ?
Cas où l'IA vaut le coup :
• Tâches répétitives (modifications en lot, génération de modèles, refactorisation de logique dupliquée)
• Domaines peu familiers (nouvelle stack, nouvelle bibliothèque, API peu utilisée)
• Tâches complexes mais structurées (endpoints API, CRUD, validation de formulaires, transformation de données)

Cas où l'IA ne vaut pas le coup :
• Code si simple qu'on l'écrirait les yeux fermés (renommer une variable, ajouter un commentaire)
• Conception algorithmique exigeant une réflexion profonde (logique métier critique, optimisation complexe)
• Code très personnalisé sans modèle de référence (fonctionnalités innovantes, cas métier atypiques)

Règle : si vous pouvez le faire en 10 minutes, ne passez pas 20 minutes à rédiger un prompt. L'ingénierie des prompts sert l'efficacité, pas la démonstration. L'IA est un outil, pas une fin en soi.
Comment utiliser Plan Mode concrètement ? Dans quels scénarios est-il le plus efficace ?
**Comment utiliser Plan Mode** :
1. Appuyez sur Shift+Tab pour passer en mode Plan
2. Décrivez votre besoin
3. L'IA analyse la base de code et pose des questions (ex. « Souhaitez-vous conserver la gestion d'erreurs actuelle ? »)
4. L'IA élabore un plan d'action (fichiers modifiés, fonctionnalités ajoutées)
5. Vous validez et ajustez ce plan
6. L'IA ne code qu'après votre confirmation

**Scénarios les plus efficaces** :
• Refactorisation large (évite de modifier le mauvais fichier ou supprimer du code critique)
• Développement de nouvelles fonctionnalités multi-fichiers
• Quand vous doutez de la compréhension de l'IA (le plan valide sa lecture du besoin)
• Tâches complexes (internationalisation, migration de base de données)

Plan Mode vous donne une « seconde chance » avant que l'IA ne casse le code — idéal pour les changements difficilement réversibles.
Comment éviter que l'IA introduise des bibliothèques tierces inutiles ?
Précisez les contraintes dans la section Constraints :

**Interdire explicitement les nouvelles bibliothèques** :
« **Ne pas introduire** de nouvelle bibliothèque tierce »
« **Ne pas installer** de paquet npm »
« **Utiliser uniquement** les dépendances existantes (celles du package.json) »

**Spécifier les bibliothèques obligatoires** :
« **Utiliser obligatoirement** les composants Ant Design existants (version 5.x installée) »
« **Utiliser obligatoirement** authService du projet (src/services/authService.ts) »

**Fournir des exemples des bibliothèques existantes** :
Listez dans Context les dépendances du projet et leur usage — l'IA privilégiera celles-ci plutôt que d'en « inventer » de nouvelles.

**Utiliser Plan Mode** :
Le plan révèle les bibliothèques que l'IA compte introduire — vous pouvez les bloquer à temps.

Rappel : plus les contraintes sont explicites, moins l'IA improvise.

17 min de lecture · Publié le: 29 janv. 2026 · Mis à jour le: 27 juil. 2026

Articles liés

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog