Unité 2 / 12

Scripts et saisie semi-automatique

Gains :

  • Possibilité de mapper le mode de discussion pour corriger le type de tâche avec achèvement en ligne
  • Capacité à rédiger des invites de production puissantes qui incluent des contrats d'entrée/sortie, des cas extrêmes et des contraintes de style
  • Possibilité de valider le code généré et toute nouvelle dépendance proposée avant la fusion

Le premier point de contact d'un développeur avec l'IA est souvent la saisie semi-automatique – une fonctionnalité qui suggère la ligne suivante au fur et à mesure que vous tapez – ou en disant « tapez cette fonction » dans une fenêtre de discussion. Ils utilisent tous deux le même moteur mais nécessitent des disciplines différentes. Dans cette unité, nous transformons la génération de code d'une simple « écriture » aléatoire en une étape d'ingénierie dont le résultat est prévisible et vérifiable.

L’objectif est de transformer l’IA d’un outil qui accélère votre machine à écrire en un apprenti qui travaille dans le cadre des contraintes que vous définissez. Un apprenti bien guidé gagne du temps ; Un apprenti non guidé crée un désordre que vous devrez nettoyer plus tard.

Deux modes d'utilisation : complétion en ligne et discussion

La complétion en ligne entre en jeu lorsque vous tapez dans votre éditeur ; Vous tapez une signature de fonction ou une ligne de commentaire et cela suggère le reste. C'est génial pour la vitesse, mais son contexte est restreint : il ne voit que le code dans la zone immédiate. C'est pourquoi cela fonctionne mieux lorsque vous écrivez clairement votre intention dans un commentaire. Par exemple, //valider l'e-mail de l'utilisateur, lancer ValidationError si un commentaire non valide améliore considérablement la suggestion ci-dessous.

Le mode Chat est destiné aux tâches plus volumineuses et structurées : "Ajouter une pagination à cette classe", "Extraire une interface de ce service". Ici, vous avez le luxe de donner un rôle, un contexte et un format. La règle générale est la suivante : achèvement pour les tâches petites et fluides, conversation pour les tâches qui nécessitent réflexion et structure.

Astuce : N'acceptez pas aveuglément la suggestion de complétion avec "Tab". Lisez la ligne suggérée pendant une seconde ; Un nom de variable incorrect ou une condition inversée s'échappe le plus souvent d'ici.

Étapes pour traduire l'intention en code

  1. Définir le contrat. Quel est le comportement d’entrée, de sortie et d’erreur de la fonction ? Comme "Recevoir un e-mail, normaliser si valide, générer une erreur si invalide".
  2. Énoncez les contraintes. Vous n'utilisez pas de dépendance externe ? Un guide de style spécifique ? Y a-t-il une limite de performances ?
  3. Donnez un exemple. Une paire entrée-sortie (« ali@x.com → valide, ali@ → erreur ») fait passer la compréhension de l'intention du modèle de la prédiction à la précision.
  4. Demandez des petits morceaux. Une fonction, une responsabilité. Passez ensuite au suivant.
  5. Lisez et exécutez le code généré. La compilation + un essai manuel rapide est l'étape d'assurance la moins chère.

Trois mini-étuis

Cas 1 — La production basée sur les commentaires augmente la précision. Un développeur a d'abord demandé une fonction d'analyse de date avec un corps vide et a obtenu le résultat correct en 3 tours. Lors de la deuxième tentative, lorsque j'ai défini la fonction avec un commentaire de 4 lignes (formats acceptés, règle de fuseau horaire, condition d'erreur) et que je l'ai demandé, le code qui a fonctionné au premier tour est arrivé. Même modèle, même jour ; la différence n'était que la clarté de l'intention.

Cas 2 — Ne pas spécifier de version coûte cher. Une équipe a eu du mal à remplacer fs.promises par l'ancienne API basée sur le rappel dans le code produit pour Node.js. Lorsque la ligne « Utiliser le nœud 20, ESM, async/await » a été ajoutée à l'invite, la production a suivi le projet pour la première fois ; La moyenne des 12 minutes consacrées à la correction a été réinitialisée.

Cas 3 — Gain réel dans le code passe-partout. Un microservice nécessitait 6 nouveaux DTO (Data Transfer Object — une simple classe de données qui transporte les données entre les couches) et leurs règles de validation. Ce qui représentait auparavant environ 90 minutes de travail manuel a été réduit à 35 minutes une fois produit et examiné par l'IA ; Étant donné que la répétition du code est élevée et que le modèle est clair, l’IA a travaillé ici dans son domaine le plus efficace.

Quatre modèles copiables

Génération de fonctions basées sur un contrat :

Rôle : Vous êtes un développeur {{langue}} assidu.Contrat de fonction :- Nom : {{nom}}- Entrée : {{types et leur signification}}- Sortie : {{type et signification}}- Statut d'erreur : {{ce qui est lancé/renvoyé quand}}Contraintes : {{aucune dépendance externe/style/performance}}Exemples :- {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Donnez d'abord la signature + le plan court, puis le code. Écrire des tests, juste fonctionner.

Pour correspondre au style existant (adapter à la base de code) :

Vous trouverez ci-dessous un exemple de fonction de notre projet ; Apprenez la dénomination, la gestion des erreurs et le style de commentaire ici. Écrivez une fonction pour {{new_task}} avec le MÊME style. Exemple : {{current_code}}

Du squelette au remplissage (stub → implémentation) :

Remplissez le squelette de fonction ci-dessous en fonction des TODO dans les commentaires. MODIFIEZ la signature et le type de retour. Ne créez pas une fonction d'assistance qui n'existe pas ; si nécessaire, faites-moi savoir "cette aide est nécessaire". {{skelet_kod}}

Comparaison d'applications alternatives :

Donnez 2 implémentations différentes pour {{task}} : (a) donner la priorité à la lisibilité, (b) donner la priorité aux performances. Écrivez 1 phrase « quand est-il préférable » sous chacun d'entre eux.

Invite faible/Invite forte

Faible : "Écrivez-moi une fonction de vérification des e-mails."
Strong : "TypeScript 5, bibliothèque standard uniquement. Écrivez isValidEmail(input: string): boolean. Coupez les espaces, ne respectez pas la casse, a@b.co est valide, a@, @b.co, la chaîne vide n'est pas valide. Si vous envisagez d'utiliser une expression régulière, ne soyez pas trop complexe ; ajoutez 2 lignes de commentaires."

Version puissante ; Renvoie la langue, la version, la signature, les cas extrêmes et une contrainte de style. Ainsi, le code généré fonctionne et s'intègre dans votre projet.

Approche

Quand utiliser

Attention

Achèvement en ligne

Petits inserts en flux

N'acceptez pas la suggestion sans la lire

Production sous contrat dans le chat

Nouvelle fonction/classe

Donnez un exemple et un cas limite

Production par échantillon de style

Ajout au code existant

Sélectionnez l'exemple de code actuel

farce squelette

Signature fixe, corps vierge

Changer la signature

Duplication de code et piège des dépendances

L'IA recommande souvent une nouvelle bibliothèque pour lui faciliter la tâche. Parfois cela est exact, parfois cela ajoute une dépendance inutile à votre projet ou suggère un package qui n'existe pas (une hallucination). Règle : vous confirmez chaque nouvelle dépendance. Ne l'ajoutez pas au projet sans vérifier que le package existe réellement, qu'il est maintenu et qu'il dispose de la licence appropriée. La plupart du temps, une aide déjà présente dans le projet vaut mieux qu'un nouveau package.

Attention : Vérifiez les lignes d'importation suggérées par AI. Un nom de package inexistant (qui peut également ressembler à de faux packages appelés « typo-squatting ») interrompt la compilation et présente un risque de sécurité.

Erreurs courantes

  • Avoir la signature déterminée par le modèle. Si l’on ne corrige pas les types d’entrées/sorties, une signature différente accompagne chaque production et l’intégration devient difficile.
  • Sans parler des cas extrêmes. Entrée vide, nul, nombre négatif, valeur très grande — si vous ne les spécifiez pas, le modèle écrit le « chemin heureux », en sautant les arêtes.
  • Combiner la suggestion sans la tester. Un code qui semble fonctionner ne veut pas dire qu'il fonctionne.
  • Accepter une dépendance inutile. L'ajout d'une bibliothèque entière pour un one-liner crée une dette technique.
  • Incohérence de style. Des noms différents et une gestion des erreurs par rapport au reste du projet rendent la base de code inégale.

En résumé

La génération de code est puissante lorsque vous traduisez l’intention en un contrat clair. Utilisez la complétion en ligne pour les petites tâches en flux et pour les tâches qui établissent la structure de la conversation. Vous spécifiez les types d'entrée/sortie, les cas extrêmes, la version et le style ; Donnez un exemple du modèle ; vérifier chaque nouvelle dépendance ; et exécuter et lire chaque pièce produite. L’IA est plus rentable dans le code formel et répétitif : exécutez-la directement sur place, dans les limites que vous définissez.

Tâche de candidature

Choisissez une petite fonction de votre projet que vous devez écrire. Imprimez-le d'abord sur l'IA avec le modèle « génération de fonctions basées sur un contrat », donnant les types d'entrée/sortie, deux cas extrêmes et une contrainte de style. Compilez le code généré et essayez-le avec deux entrées différentes. Ensuite, demandez à nouveau la même fonction, cette fois « écrivez-moi ceci » sans aucun contexte, et comparez les deux sorties ligne par ligne : quels cas extrêmes ont été manqués, combien de corrections ont été nécessaires ?

liste de contrôle

  • [ ] Je sais où utiliser le mode chat avec complétion en ligne.
  • [ ] Je détermine le contrat d'entrée/sortie et les cas extrêmes dans la génération de fonctions.
  • [ ] J'ai pris l'habitude d'ajouter des informations sur la langue et la version à l'invite.
  • [ ] Je compile et teste chaque pièce produite avant de l'assembler.
  • [ ] Je confirme chaque nouvelle dépendance proposée par l'IA en vérifiant son existence et sa nécessité.
  • [ ] Je vérifie que le code généré correspond au style du projet.