# Qu’est-ce qu’OpenAI Codex, et peut-il vraiment écrire du code?

Date: 2021-08-11 · Author: Robert Scales · https://guidetoartificialintelligence.com/fr/apprendre/qu-est-ce-que-openai-codex/

**Answer:** OpenAI Codex est un descendant de GPT-3 entraîné sur du langage naturel et des milliards de lignes de code public; depuis le 10 août 2021, une version améliorée est offerte en version bêta privée par l’API d’OpenAI. Il peut écrire du code qui fonctionne à partir de demandes en langage courant, mais seulement une partie du temps; ce qu’il produit doit donc être lu et testé.

Hier, OpenAI a mis à la disposition des développeurs, par son API, une version améliorée de Codex, son système qui transforme le langage naturel en code. C’est aussi le moteur derrière GitHub Copilot, le programmeur en binôme IA que GitHub a présenté en aperçu il y a environ six semaines. Jusqu’ici, on ne pouvait le rencontrer que dans Copilot; avec l’API, les développeurs peuvent créer leurs propres outils par-dessus. L’accès commence par une version bêta privée avec liste d’attente, et OpenAI affirme que le modèle est gratuit pendant cette première période.

Codex est issu de GPT-3. Il garde une bonne partie de la maîtrise de l’anglais de GPT-3, mais ses données d’entraînement ajoutent des milliards de lignes de code source tirées de sources publiques, dont des dépôts GitHub. Le résultat est un modèle qui lit une demande comme « rends l’arrière-plan bleu » et écrit les instructions dont un ordinateur a besoin pour le faire.

## Ce que Codex fait bien

Selon OpenAI, Codex est le plus performant en Python et se débrouille aussi dans plus d’une douzaine d’autres langages, dont JavaScript, Go, PHP, Ruby, Swift, TypeScript et même Shell, le langage de commande d’un terminal. Il peut garder en mémoire 14 Ko de code Python pendant qu’il travaille, contre 4 Ko pour GPT-3; il peut donc tenir compte de plus de trois fois plus de code environnant.

OpenAI décrit la programmation comme deux activités : découper un problème en morceaux plus petits, puis relier ces morceaux à du code qui existe déjà, comme des bibliothèques et des fonctions. Codex excelle surtout dans la seconde, qui est souvent la plus fastidieuse. OpenAI affirme avoir aussi utilisé Codex pour traduire du code d’un langage à l’autre, expliquer du code et le réusiner (le restructurer). Ses démonstrations comprennent la création d’un jeu spatial simple et la conversion de Python en Ruby.

## Peut-il vraiment écrire du code? Les chiffres

Un article qu’OpenAI a mis en ligne en juillet, *Evaluating Large Language Models Trained on Code*, donne une réponse prudente. L’équipe a construit un ensemble de test appelé HumanEval : des problèmes de programmation, chacun décrit par une docstring (une courte description en tête d’une fonction) et chacun vérifié en exécutant des tests unitaires. Seul le code qui fonctionne réellement compte.

| Modèle | Problèmes HumanEval résolus |
|---|---|
| GPT-3 | 0 % |
| GPT-J (un modèle ouvert) | 11,4 % |
| Codex, un essai | 28,8 % |
| Codex, meilleur de 100 essais | 70,2 % |

Deux leçons ressortent. D’abord, l’entraînement sur du code fait une énorme différence : GPT-3 ne résout aucun de ces problèmes. Ensuite, une seule tentative de Codex échoue plus souvent qu’elle ne réussit, mais générer de nombreuses tentatives et garder celle qui réussit les tests fonctionne étonnamment bien. L’article note aussi les points où Codex peine, comme les longues chaînes d’étapes dans une même description et le suivi de quelle opération s’applique à quelle variable. L’article testait une version antérieure de Codex; OpenAI affirme que la version de l’API est améliorée, mais n’a pas publié de nouveaux résultats pour celle-ci.

> **À essayer :** écrivez en une phrase la description d’une fonction que vous pourriez tester, comme « retourne True si un mot se lit de la même façon à l’envers ». Avant d’utiliser une IA, écrivez trois cas de test pour cette fonction. Si vous avez accès à Codex ou à Copilot, comparez le code généré à vos tests.

## Une façon pratique de rédiger un prompt pour Codex

Codex poursuit un texte, comme GPT-3; le meilleur prompt ressemble donc au début d’un programme bien écrit. Nommez le langage, décrivez l’objectif dans un commentaire et donnez un nom de fonction clair :

```prompt
# Python 3
# Retourne le mot le plus fréquent dans un texte, sans tenir compte de la casse ni de la ponctuation.
# En cas d’égalité entre deux mots, retourne celui qui apparaît en premier.
def most_common_word(text):
```

Remarquez que le commentaire règle d’avance les choix délicats (casse, ponctuation, égalités). L’ambiguïté dans la demande devient des bogues dans le code.

## Comment une personne débutante devrait-elle utiliser l’IA pour apprendre la programmation?

Servez-vous-en comme d’un tuteur, pas comme d’un raccourci. La compétence que vous développez, c’est la compréhension, et un outil qui vous remet du code tout fait peut sauter cette étape si vous le laissez faire. Une bonne routine : essayez d’abord de résoudre le problème vous-même, puis demandez à l’IA, puis comparez. Là où les deux versions diffèrent, trouvez pourquoi. Demandez-lui d’expliquer une ligne que vous ne reconnaissez pas, et vérifiez cette explication dans la documentation officielle, parce que le modèle peut se tromper avec aplomb.

Les tests sont l’habitude qui vous protège. HumanEval existe parce que le code généré qui a l’air correct ne l’est souvent pas. Écrivez vos tests avant de demander du code, exécutez chaque suggestion, et voyez un test qui échoue comme une leçon plutôt qu’un désagrément. Avancer à petits pas aide aussi : demandez une fonction à la fois, pas un programme entier, pour pouvoir suivre chaque morceau.

Enfin, gardez pour vous les parties qui demandent du jugement. Décider de ce qu’un programme doit faire, découper un problème en morceaux et choisir quoi tester sont les points les plus faibles de Codex, et ce sont aussi eux qui font de quelqu’un un programmeur. Avec ces parties entre vos mains, une IA qui remplit les parties routinières peut rendre l’apprentissage plus rapide et moins frustrant.

## Sources

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