# Comment transformer une demande en langage courant en code qui fonctionne avec Codex?

Date: 2021-09-15 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/demande-en-langage-courant-code-codex/

**Answer:** Rédigez votre demande comme le début du fichier voulu, dans des commentaires qui nomment le langage, les éléments et les cas limites, puis laissez Codex poursuivre. Avancez par petites rondes : exécutez ce qu’il écrit, voyez ce qui manque, et ajoutez chaque fois une ligne de consigne plus précise.

Depuis août, les développeurs admis à la version bêta privée d’OpenAI Codex peuvent lui envoyer une description en langage courant et recevoir du code en retour. Les premiers essais déçoivent souvent : une demande vague produit du code vague. La bonne nouvelle, c’est qu’une méthode courte et reproductible rend les résultats beaucoup plus fiables, et qu’elle fonctionne aussi bien pour un développeur chevronné que pour quelqu’un qui écrit sa toute première page Web.

La méthode repose sur un fait. Codex est un descendant de GPT-3 qui a aussi appris à partir de milliards de lignes de code public. Comme GPT-3, il prolonge un texte. Il n’« obéit » pas tant à votre demande qu’il ne devine ce que contiendrait la suite d’un fichier bien écrit qui commencerait par vos mots. Votre travail consiste à rendre le début de ce fichier si clair que le bon code en soit la suite évidente.

## Étape 1 : formuler la demande comme un cahier des charges

Une demande utile répond aux questions qu’un programmeur attentif se poserait avant de commencer :

| Question | Formulation faible | Formulation plus solide |
|---|---|---|
| Quel langage et quel format? | « fais une calculatrice » | « une seule page HTML avec CSS et JavaScript intégrés » |
| Quels sont les éléments? | « avec des champs » | « une case numérique pour l’addition, un menu pour 15 %, 18 % ou 20 %, un bouton Calculer » |
| Que doit-il se passer? | « affiche la réponse » | « affiche le pourboire et le total, arrondis à deux décimales, dans un paragraphe avec l’id result » |
| Et une mauvaise entrée? | (rien) | « si le montant est vide ou négatif, affiche un message d’erreur poli » |

Chaque choix que vous omettez est un choix que Codex fait à votre place, habituellement le plus courant dans ses données d’entraînement. Ce n’est peut-être pas celui que vous voulez.

## Étape 2 : placer la demande là où le code commencerait

Écrivez la demande sous forme de commentaires en haut du fichier, dans le style de commentaire du langage visé, puis commencez vous-même le code. Ces premières lignes de vrai code sont des lignes de contexte : elles montrent au modèle quel langage, quelle structure et quel style suivre. Pour une page Web, le début pourrait ressembler à ceci :

```prompt
<!-- Une seule page HTML avec CSS et JavaScript intégrés. Titre : "Calculateur de pourboire". -->
<!-- Un champ numérique pour le montant de l’addition (id "bill"). -->
<!-- Un menu déroulant avec les choix de pourboire 15 %, 18 % et 20 % (id "rate"). -->
<!-- Un bouton intitulé "Calculer". Au clic, affiche le pourboire et le total, -->
<!-- chacun arrondi à 2 décimales, dans un paragraphe avec l’id "result". -->
<!-- Si le montant est vide ou négatif, affiche plutôt "Veuillez entrer un montant valide." -->
<!DOCTYPE html>
<html lang="en">
<head>
```

Les trois dernières lignes comptent plus qu’il n’y paraît. Elles engagent Codex vers le HTML, vers une page complète et vers un début par la section head; il risque donc moins de dériver vers un autre langage ou un fragment de code.

## Étape 3 : l’exécuter, puis ajouter une ligne à la fois

Enregistrez ce que Codex écrit dans un fichier, ouvrez-le dans un navigateur et essayez-le. Améliorez-le ensuite par rondes, en ne changeant qu’une chose à la fois :

1. **Vérifiez l’essentiel.** Entrez 50 et choisissez 20 % : vous devriez voir un pourboire de 10.00 et un total de 60.00.
2. **Testez les cas limites.** Laissez la case vide, puis tapez -5. Si aucune erreur n’apparaît, ajoutez un commentaire plus précis sur la validation et générez de nouveau.
3. **Ajoutez une fonction avec un nouveau commentaire.** Par exemple : `<!-- Ajoute un champ numérique "Partager entre"; affiche aussi le montant par personne. -->`
4. **Gardez ce qui fonctionne.** Recollez la bonne version comme contexte, pour que la ronde suivante s’appuie dessus au lieu de repartir de zéro.

Les petites rondes gardent chaque changement facile à vérifier. Elles jouent aussi en faveur des forces de Codex : l’article de recherche qui le sous-tend a constaté que le modèle réussit bien les fonctions courtes et bien décrites, et moins bien quand une seule description enchaîne de nombreuses étapes.

OpenAI affirme que Codex a une mémoire d’environ 14 Ko pour le code Python, plus de trois fois celle de GPT-3, mais cet espace finit tout de même par se remplir. Si votre fichier grossit, gardez les commentaires qui décrivent l’objectif actuel vers la fin, près de l’endroit où Codex écrira.

> **À essayer :** écrivez les six lignes de commentaire ci-dessus pour une page que vous voulez vraiment, comme un convertisseur d’unités ou une minuterie de lecture. Générez une version, puis testez-la avec une valeur normale, une valeur vide et une valeur farfelue. Ajoutez une seule ligne de commentaire pour corriger ce qui a flanché, et générez de nouveau.

## Quels genres de tâches Codex rate-t-il encore?

Les données les plus claires viennent de l’article publié par OpenAI en juillet, *Evaluating Large Language Models Trained on Code*. Sur son banc d’essai HumanEval, composé de courts problèmes Python vérifiés par des tests unitaires, la version de recherche de Codex en a résolu 28,8 % du premier coup. Avec 100 tentatives par problème, au moins un échantillon fonctionnait pour 70,2 % d’entre eux. Autrement dit, la première réponse n’est généralement pas la bonne, et quelqu’un doit départager le bon du mauvais. OpenAI décrit le modèle de l’API comme amélioré, mais n’a pas publié de nouveaux résultats pour celui-ci.

L’article nomme aussi des points faibles précis. Codex peine quand une description énumère une longue chaîne d’opérations, et quand il doit suivre quelle opération s’applique à quelle variable. En pratique, cela donne du code qui gère les premières exigences et laisse tomber les autres en silence, ou qui confond deux valeurs semblables, comme le pourboire et le total.

Certains échecs viennent de la demande plutôt que du modèle. Une formulation ambiguë mène à du code correct pour une autre lecture de vos mots. Des cas limites oubliés mènent à du code qui ne fonctionne qu’avec des entrées bien sages. Et comme Codex a appris à partir de code public de tous âges et de toutes qualités, il peut répéter des pratiques dépassées ou dangereuses; l’article traite de la sécurité comme de l’un des risques plus larges de la génération de code. La bonne habitude est la même que pour tout code que vous n’avez pas écrit vous-même : lisez-le, testez-le avec des entrées difficiles, et ne le collez jamais dans quoi que ce soit qui gère des mots de passe, des paiements ou des renseignements personnels sans un examen attentif.

## Sources

- OpenAI Codex: https://openai.com/index/openai-codex/
- Evaluating Large Language Models Trained on Code: https://arxiv.org/abs/2107.03374
