Accueil / Articles

De GPT-1 aux modèles de raisonnement : ce que chaque génération a changé pour les développeurs

Suivez l’évolution de la famille GPT, du pré-entraînement de 2018 aux modèles de raisonnement, découvrez quelles idées chaque génération a apportées, et découvrez GPT-4o Vision ainsi que Structured Outputs from Python.

Éditeur : REACTAPP.TOP10 min de lecture2213 mots

Sources: The GPT Timeline: How OpenAI Built the Brains of Modern AI

Chaque appel API que vous effectuez vers un modèle de langage moderne repose sur un petit nombre d’idées qui sont apparues progressivement au fil des générations : l’entraînement préalable génératif, l’échelle de traitement, l’apprentissage in-context, l’alignement grâce aux retours des humains, la multimodalité native, ainsi que les calculs supplémentaires effectués lors de l’inférence. Connaître l’origine de chaque idée permet de comprendre plus facilement ce qu’un modèle est capable de faire, pourquoi il échoue, et quelles fonctionnalités d’API utiliser. Cette présentation retrace l’évolution de la série GPT depuis ses débuts en 2018 jusqu’aux modèles axés sur le raisonnement, et se termine par deux exemples pratiques en Python pour GPT-4o.

Avant GPT : pourquoi le Transformer était important

Jusqu’environ 2018, la plupart des systèmes de traitement du langage naturel reposaient sur les réseaux neuronaux récurrents et leur variante LSTM. Ces modèles lisaient le texte token par token, ce qui rendait difficile la mise en parallèle de l’entraînement et faisait que les informations figurant au début d’un long texte s’estompaient avant la fin.

En 2017, un article de recherche de Google intitulé « Attention Is All You Need » a présenté l’architecture Transformer. Elle a remplacé la récurrence par l’auto-attention, permettant à chaque position d’une séquence de s’intéresser directement à toutes les autres. OpenAI a développé sa série GPT (Generative Pre-trained Transformer) sur cette architecture, et en juin 2018 a publié l’article « Improving Language Understanding by Generative Pre-Training », que peu de personnes à l’époque ont reconnu comme le début d’un changement majeur dans l’informatique.

2018 à 2019 : l’entraînement préalable et les avantages de l’échelle

GPT-1 : entraînement préalable d’abord, affinage ensuite

Le premier modèle était modeste selon les standards actuels :

  • 117 millions de paramètres
  • un Transformer uniquement décodeur avec 12 couches
  • entraîné sur BooksCorpus, soit environ 5 GB de texte

Sa contribution a été une méthode en deux étapes. D’abord, un entraînement préalable non supervisé sur du texte brut a permis au modèle d’acquérir la grammaire, les associations factuelles et la structure du langage simplement en prédisant le token suivant. Ensuite, une petite quantité d’affinage supervisé sur une tâche spécifique, comme l’analyse des sentiments ou la classification, suffisait pour obtenir des résultats de pointe, sans avoir à concevoir une architecture personnalisée pour chaque tâche.

GPT-2 : apparition d’un comportement zero-shot

La prochaine étape a porté principalement sur la taille :

  • 1,5 milliard de paramètres, soit environ dix fois plus que GPT-1
  • entraîné sur WebText, soit environ 8 millions de pages web ou 40 GB de texte
  • Avec une ampleur suffisante, le fine-tuning est devenu optionnel pour de nombreuses tâches. GPT-2 a montré des capacités d’apprentissage zéro-shot : une instruction telle que « Traduire en français : » pouvait le diriger vers une tâche pour laquelle il n’avait jamais été explicitement entraîné, simplement parce que poursuivre ce texte impliquait logiquement la production d’une traduction.

    GPT-2 est également connu pour la manière dont il a été publié. OpenAI a initialement retenu le modèle complet, se disant préoccupé par son utilisation potentielle à des fins de production massive de fausses nouvelles et de spam, et l’a mis en ligne par étapes. Cette décision a déclenché un débat public durable sur la sécurité de l’IA et sur la question de savoir si des modèles puissants devraient être publiés ouvertement.

    2020 à 2022 : apprentissage in-context et alignement

    GPT-3 : exemples intégrés dans l’instruction

    GPT-3 a franchi le pas de la recherche vers un produit commercial :

    • 175 milliards de paramètres, soit plus de cent fois ceux de GPT-2
    • entraîné à partir d’un mélange de textes web filtrés, de livres et de Wikipédia, issus d’environ 45 TB de données brutes avant filtrage

    Sa capacité phare était l’apprentissage à partir de quelques exemples en grande échelle. En fournissant deux ou trois exemples fonctionnels dans la demande, le modèle pouvait reprendre le schéma, que ce soit pour écrire du code, de la poésie ou extraire des informations à partir de données désordonnées. Il s’agissait d’un apprentissage in-context : le modèle s’adaptait uniquement à partir de la demande, sans mise à jour des poids.

    Cependant, la version de base de GPT-3 présentait une limite sérieuse : elle n’était entraînée que pour continuer des textes, et non pour agir en assistant utile, ce qui la poussait souvent à inventer des faits, à s’éloigner du sujet ou à ignorer ce qui lui avait été demandé. Le diagramme ci-dessous résume la correction apportée par la suite : l’alignement grâce aux retours des humains transforme un prédicteur de texte brut en un modèle capable d’obéir aux instructions.

    [Raw Pre-training]  --> Predicts likely text continuations (often rambling or toxic)
            │
            ▼  + RLHF (Human Feedback Alignment)
    [InstructGPT Engine] --> Follows instructions safely and concisely
    

    InstructGPT et ChatGPT : apprendre à partir des préférences humaines

    La solution mise en œuvre a été l’apprentissage par renforcement à partir des retours humains (RLHF). Les utilisateurs évaluaient les sorties du modèle, un modèle de récompense apprenait ces préférences, puis le modèle de langage était optimisé pour produire des réponses que les humains préféraient. Les modèles InstructGPT résultants suivaient les instructions de manière bien plus directe et utile.

    Le 30 novembre 2022, OpenAI a lancé ChatGPT, basé sur la série GPT-3.5. La combinaison de conversations à plusieurs tours avec un comportement ajusté via RLHF l’a fait qualifier comme l’application grand public à la croissance la plus rapide à ce moment-là, avec une estimation de 100 millions d’utilisateurs en environ deux mois.

    2023 à 2024 : raisonnement professionnel et multimodalité

    GPT-4 : raisonnement plus puissant, images et outils

    GPT-4, sorti en mars 2023, a déplacé l’accent du texte fluide vers le raisonnement dans des tâches académiques et professionnelles. OpenAI a présenté des résultats tels qu’un score autour du 90e percentile dans un examen simulé Uniform Bar Exam ainsi que de bons résultats dans de nombreux examens AP. Il a également introduit la compréhension d’images, et la famille GPT-4 a acquis des fonctionnalités sur lesquelles les développeurs comptent aujourd’hui au quotidien : une sortie au format JSON, des appels de fonctions et l’utilisation d’outils tels que l’exécution de code et la recherche sur le Web.

    Deux détails sont souvent mal présentés. OpenAI n’a pas officiellement publié l’architecture de GPT-4 ; l’allégation largement répandue selon laquelle il s’agirait d’un modèle de type Mixture of Experts provient de rapports non confirmés. De plus, la fenêtre de contexte de 128 k tokens est apparue avec GPT-4 Turbo plus tard en 2023, et non avec la version initiale de mars, qui offrait des fenêtres bien plus petites.

    GPT-4o : un réseau pour le texte, la vision et l’audio

    Les systèmes de reconnaissance vocale précédents reposaient sur des étapes successives : un modèle transcrivait la parole, un modèle de langage générait du texte, et un moteur distinct synthétisait l’audio. GPT-4o, où le « o » signifie « omni », traite le texte, les images et l’audio au sein d’un seul réseau bout en bout. L’élimination de ces étapes intermédiaires réduit la latence vocale à environ 200 ms et permet au modèle de percevoir et de produire le ton de la voix, et non seulement des mots.

    Modèles de raisonnement : utilisation des ressources de calcul au moment de l’inférence

    Lorsque les gains liés à des sessions d’entraînement de plus en plus longues sont devenus plus difficiles à obtenir, avec des données d’entraînement de haute qualité qui constituaient de plus en plus une contrainte, l’attention s’est tournée vers les calculs effectués au moment du test : permettre à un modèle de réfléchir avant de répondre. La différence est simple : une réponse classique de GPT commence à générer des tokens dès l’arrivée du prompt, tandis qu’un modèle de raisonnement analyse d’abord une série de réflexions internes avant de produire sa réponse finale.

    Traditional GPT Response:  Prompt ──> Immediate Word-by-Word Streaming
    o-Series Response:         Prompt ──> Internal Chain-of-Thought (Deliberation) ──> Final Answer
    

    Les séries o1 et o3 d’OpenAI sont conçues de cette manière. Au lieu de choisir immédiatement le mot suivant, le modèle consacre des ressources supplémentaires à l’exploration de cas limites, au contrôle des étapes intermédiaires et à la débogage de son propre code, ce qui est particulièrement utile en mathématiques, en programmation compétitive et dans les problèmes nécessitant une logique à plusieurs étapes. Le prix à payer est une latence et des coûts plus élevés, il convient donc de les réserver aux problèmes qui exigent une réflexion approfondie.

    Travailler avec GPT-4o en Python

    L’histoire explique pourquoi GPT-4o a modifié son processus de développement quotidien : au lieu d’associer un modèle de vision, un modèle de langage et un moteur de synthèse vocale, une seule appel API peut accepter des entrées mixtes. Deux exemples illustrent les fonctionnalités les plus utiles pour les développeurs.

    Envoyer une image et du texte dans une seule requête

    Avec GPT-4o, vous pouvez placer du texte et des images côte à côte dans le tableau content d’un seul message utilisateur. Une image peut être transmise sous forme de URL publique ou en tant que données encodées en base64. L’exemple ci-dessous utilise le SDK officiel Python, lit la clé API à partir d’une variable d’environnement, demande au modèle d’examiner une photo de béton à la recherche de fissures et d’évaluer leur gravité, limite la réponse avec max_tokens, puis affiche le texte du premier résultat.

    import os
    from openai import OpenAI
    client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
    # Sending a visual inspection query directly to GPT-4o
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "text",
                        "text": "Analyze this image for architectural structural damage. Identify any cracks and rate severity."
                    },
                    {
                        "type": "image_url",
                        "image_url": {
                            "url": "https://upload.wikimedia.org/wikipedia/commons/e/e1/Concrete_crack_example.jpg"
                        },
                    },
                ],
            }
        ],
        max_tokens=500,
    )
    print(response.choices[0].message.content)
    

    Le contenu est une liste de champs de type défini (text et image_url), ce qui vous permet de combiner plusieurs images et instructions en une seule fois. Considérez la sortie comme un examen à examiner ; tout ce qui concerne la sécurité nécessite toujours l’intervention d’un expert.

    Obtenir du JSON conforme au schéma avec les Sorties structurées

    Extraiter de manière fiable du JSON à partir d’un modèle signifiait autrefois utiliser des instructions précises ainsi qu’un parsing défensif à l’aide d’expressions régulières. Les Sorties structurées résolvent ce problème au stade de la décodage : l’échantillonnage du modèle est contraint de sorte que la sortie doit respecter le schéma JSON que vous fournissez. Avec des schémas stricts, OpenAI décrit cela comme une garantie de conformité au schéma, ce qui est plus solide que le « mode JSON » ancien, qui ne garantissait qu’un JSON syntaxiquement valide.

    Dans Python, la méthode la plus pratique est Pydantic. L’exemple définit un modèle Entity ainsi qu’un modèle ArticleAnalysis comprenant un titre, un résumé, une note d’opinion comprise entre -1,0 et 1,0, ainsi qu’une liste d’entités ; il passe ensuite cette classe en tant que response_format à l’outil parse du SDK. Cet outil convertit la classe en un schéma JSON, l’envoie avec la requête, et renvoie un objet typé dans message.parsed.

    from openai import OpenAI
    from pydantic import BaseModel, Field
    from typing import List
    client = OpenAI()
    # Define the exact JSON schema required by your database
    class Entity(BaseModel):
        name: str
        category: str = Field(description="Person, Organization, Location, or Date")
    class ArticleAnalysis(BaseModel):
        title: str
        summary: str
        sentiment_score: float = Field(description="Score between -1.0 and 1.0")
        key_entities: List[Entity]
    # Pass the schema directly into the completion request
    completion = client.beta.chat.completions.parse(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": "You are an automated intelligence parser."},
            {"role": "user", "content": "OpenAI CEO Sam Altman announced new developer tooling in San Francisco today."}
        ],
        response_format=ArticleAnalysis,
    )
    # Extract type-safe output directly as a Python object
    result: ArticleAnalysis = completion.choices[0].message.parsed
    print(f"Summary: {result.summary}")
    print(f"Entities: {result.key_entities}")
    

    Deux remarques pratiques. Le outil se trouvait sous client.beta lors du lancement de cette fonctionnalité, et les versions plus récentes du SDK le rendent également accessible en dehors de l’espace de noms beta, il convient donc de vérifier la version du SDK utilisée par votre projet. De plus, bien que le schéma soit garanti, les valeurs ne le sont pas : un score d’opinion sera un nombre, mais le fait qu’il s’agisse d’un nombre pertinent reste une appréciation du modèle. Gérez les refus et validez les règles métier comme vous le feriez pour toute entrée externe.

    Un aperçu de la famille GPT

    • GPT-1 (2018) : 117 millions de paramètres ; a démontré que l’entraînement préalable génératif associé à un léger affinage fonctionnait bien.
    • GPT-2 (2019) : 1,5 milliard de paramètres ; performances sur des tâches sans exemple préalable et sortie progressive motivée par des considérations de sécurité.
    • GPT-3 (2020) : 175 milliards de paramètres ; apprentissage en contexte et à grande échelle avec peu d’exemples.
  • InstructGPT et ChatGPT (2022) : l’alignement via RLHF a transformé un prédicteur de texte en assistant.
  • GPT-4 (2023) : raisonnement de niveau professionnel, prise en charge des images et utilisation d’outils.
  • GPT-4o (2024) : un réseau unique pour le texte, la vision et l’audio, avec une voix à faible latence.
  • o1 et o3 : modèles de raisonnement qui sacrifient le temps d’inférence pour une plus grande précision sur les problèmes difficiles.
  • Que signifie cette évolution pour votre stack

    • L’échelle ne suffit plus à elle seule. Les premiers progrès provenaient du nombre de paramètres (117 M, puis 1,5 milliard, puis 175 milliards) ; les avancées ultérieures ont également été portées par des techniques d’alignement telles que RLHF, l’unification multimodale et la délibération en temps de test.
    • Les modèles ont été déplacés de l’autocomplétion vers des actions concrètes. Les modèles actuels permettent de planifier, d’appeler des fonctions et de coordonner des workflows à plusieurs étapes, ce qui explique pourquoi la conception d’agents est désormais une préoccupation majeure en ingénierie.
    • La prévisibilité est une fonctionnalité que vous pouvez exploiter. Les sorties structurées vous permettent d’intégrer les résultats des modèles dans des chemins de code typés suivant un schéma fixe, au lieu d’analyser du texte libre.
    • L’efficacité rivalise désormais avec la taille brute. Des variantes plus petites comme GPT-4o mini ainsi que des modèles de raisonnement ciblés surpassent souvent les modèles les plus volumineux en termes de coût et de latence pour une tâche donnée ; il convient donc de choisir en fonction des besoins spécifiques plutôt que sur la base des capacités générales affichées.

    Le développement avec ces modèles consiste de plus en plus à composer des systèmes composés de modèles, d’outils et de schémas, plutôt qu’à envoyer une seule requête.

    Lectures complémentaires

  • Débogage d’un petit GPT dans PyTorch : tests permettant d’isoler chaque défaillance. — Un flux de travail étape par étape pour déboguer un GPT au niveau des caractères dans PyTorch, allant des IDs de tokens et du décalage cible aux gradients, aux pertes NaN et aux points de contrôle.
  • OCR de vision LLM auto-hébergé en Go : rasterisation, génération de prompts, analyse — Comment un travailleur Go transforme des PDF médicaux en JSON structuré à l’aide d’Ollama, pdftoppm, de prompts stricts, d’un parsing de secours et de groupes de consommateurs Redis Streams.
  • Composition de pipelines LangChain avec LCEL : linéaires, parallèles et à branches. — Apprenez à connecter des prompts, des modèles et des analyseurs dans des pipelines LangChain linéaires, à plusieurs étapes, parallèles et conditionnels en utilisant l’opérateur pipe, RunnableParallel et RunnableBranch.
  • De texte brut à pipelines : analyseurs, LCEL, éléments exécutables et mémoire dans LangChain — Comment LangChain transforme le texte brut du modèle en données structurées, compose les étapes à l’aide de LCEL et de l’interface Runnable, ainsi qu’il gère la mémoire conversationnelle aujourd’hui.
  • Pourquoi les agents d’IA de production échouent en silence et comment détecter des réponses erronées — Une étude de cas portant sur douze agents d’IA de production montre pourquoi une sortie erronée plausible constitue le véritable mode de défaillance, et quels principes de conception ont permis aux agents survivants de rester utiles.