Sorties structurées des modèles génératifs : un game changer pour les applications intelligentes

Exemple de web scraping avec GPT-4o

Ecrit par Vincent

La sortie du modèle OpenAI GPT-4o est l’occasion de tester une fonctionnalité que l’on voit apparaître sur un nombre croissant de LLM : la sortie structurée.

Dans cet article, nous allons ainsi explorer une méthode innovante de Web Scraping qui combine les techniques traditionnelles de récupération de données avec l’intelligence artificielle. Nous utiliserons les « Structured Outputs » proposés par OpenAI, un format structuré pour organiser les informations extraites automatiquement. Grâce à cela, vous pouvez transformer du contenu non structuré (comme du HTML brut) en données exploitables sous forme de modèles définis. Nous illustrerons cette approche avec un exemple en Python, en utilisant notre blog comme source de données.

Les sorties structurées

Le principe des sorties structurées (ou « structured outputs ») est une méthode utilisée dans l’interface avec des modèles génératifs (comme ceux de la gamme GPT d’OpenAI) pour organiser et structurer les informations générées par le modèle de manière prédéfinie et exploitable. Cela permet de ne pas se contenter d’une réponse textuelle libre, mais plutôt d’obtenir des données conformes à un format spécifique, facilitant ainsi leur intégration dans des systèmes automatiques, des bases de données ou des workflows complexes.

Sorties Textuelles vs Sorties Structurées

Dans une interaction classique avec un modèle génératif, une requête utilisateur, comme une question ou une instruction, aboutit à une réponse libre sous forme de texte. Ce texte, bien que potentiellement informatif, nécessite souvent une post-traitement manuel ou algorithmique pour extraire les informations spécifiques ou les structurer sous une forme utilisable (comme un JSON, un tableau, etc.).

Les sorties structurées permettent de franchir cette étape en structurant directement la sortie selon un schéma de données bien défini. Cela implique que le modèle retourne des réponses déjà organisées sous forme d’objets ou de tableaux (par exemple en JSON ou dans d’autres formats), prêts à être utilisés dans des applications sans étape de post-traitement fastidieuse.

Bénéfices pour le développement d’applications intelligentes

Conformité au Schéma de Données

Lorsque vous interagissez avec un modèle génératif via des API, il peut être crucial que les réponses respectent un format précis. Par exemple, dans le cas d’un modèle qui génère des informations de produits ou des résultats de scraping web, les sorties structurées garantissent que les données suivent un schéma (comme un objet Product avec les champs name, price, url, etc.).

Automatisation

Les sorties structurées permettent d’automatiser des processus qui nécessiteraient autrement une intervention humaine. Par exemple, si vous scrapez une page web pour obtenir des informations structurées comme des titres, des liens, ou des images, vous pouvez directement intégrer les résultats à une base de données ou un autre système sans avoir à reformater ou à extraire manuellement les informations.

Facilitation des Intégrations

Dans un workflow automatisé ou une application SaaS, les données structurées peuvent être directement intégrées dans des systèmes d’analyse, de reporting, ou de gestion de contenu, facilitant ainsi leur traitement automatique.

Place à la pratique

Préparation de l’environnement

Avant de commencer, assurons-nous d’avoir les bibliothèques nécessaires pour l’extraction et l’analyse des données.

pip install bs4
pip install openai
pip install pydantic
pip install tiktoken

Les principales bibliothèques que nous utiliserons sont :

  • BeautifulSoup pour récupérer et nettoyer le contenu HTML.
  • OpenAI pour interagir avec l’API GPT et utiliser les modèles de « structured outputs ».
  • Pydantic pour la gestion des modèles de données.

Récupération de la page HTML

La première étape consiste à extraire le contenu de la page web cible. Dans notre exemple, nous allons scraper la liste des articles de notre blog.

import requests
from bs4 import BeautifulSoup

SOURCE_URL = "https://www.eurelis.com/blog/"
response = requests.get(SOURCE_URL)
soup = BeautifulSoup(response.text, 'html.parser')

# Nettoyage du contenu HTML
for data in soup(['style', 'script', 'link', 'meta', 'header']):
    data.decompose()

html_content = str(soup)

À ce stade, nous avons récupéré le contenu HTML brut de la page et éliminé les éléments non pertinents tels que les scripts, styles, etc.

Encodage et pré traitement pour GPT-4

Le modèle GPT-4o a une limite de tokens. Nous devons donc vérifier que le contenu de la page n’excède pas cette limite avant de l’envoyer à l’API.

import tiktoken

OPENAI_MODEL = "gpt-4o-2024-08-06"
encoding = tiktoken.encoding_for_model(OPENAI_MODEL)

# Vérification du nombre de tokens
if len(encoding.encode(html_content)) > 128000:
    raise ValueError("Le contenu dépasse la limite de tokens.")

Interaction avec OpenAI et extraction des données

Maintenant que nous avons nettoyé et préparé le contenu HTML, passons à l’extraction des données pertinentes à l’aide des structured outputs d’OpenAI.

Nous définissons un modèle de données, par exemple ici un modèle de BlogPost, qui contient le titre, l’URL et une image.

from pydantic import BaseModel
from typing import List

class BlogPost(BaseModel):
    title: str
    url: str
    image: str

class Data(BaseModel):
    blog_posts: List[BlogPost]

Ensuite, nous envoyons une requête à l’API OpenAI pour extraire les informations selon ce schéma de données.

from openai import OpenAI

openai_client = OpenAI(api_key=OPENAI_API_KEY)
SYS_PROMPT = "Analyse la page HTML suivante et extraits-en les informations importantes, puis organise-les selon le schéma de données attendu."

completion = openai_client.beta.chat.completions.parse(
    model=OPENAI_MODEL,
    messages=[
        {"role": "system", "content": SYS_PROMPT},
        {"role": "user", "content": "The HTML content is: " + html_content}
    ],
    response_format=Data
)

# Résultat
print(completion.choices[0].message.parsed)

Résultat

Le modèle GPT-4o traite la page HTML et nous renvoie les informations organisées sous forme de liste de BlogPost. Chaque élément contient un titre, un lien et une image correspondante, facilitant ainsi la réutilisation des données pour d’autres besoins comme l’analyse de contenu ou l’automatisation de tâches marketing.

Conclusion

L’intégration des Structured Outputs d’OpenAI dans des processus de scraping améliore considérablement la précision et la structure des données extraites. Cette technique permet de transformer un contenu non structuré en données prêtes à l’emploi, tout en réduisant les efforts manuels habituellement nécessaires dans les méthodes traditionnelles de scraping.

Les API d’OpenAI offrent donc un levier puissant pour des tâches de web scraping complexes, en particulier lorsqu’il s’agit d’extraire et d’organiser de grandes quantités d’informations non structurées.

Les sorties structurées représentent une avancée majeure dans l’utilisation des modèles génératifs, en particulier dans des contextes où les données doivent être immédiatement prêtes à l’emploi. Que ce soit pour des tâches de scraping, d’extraction d’information ou d’automatisation de processus, elles permettent de rationaliser les flux de travail tout en garantissant la précision et la réutilisation des données.

En savoir plus sur les sorties structurée : https://platform.openai.com/docs/guides/structured-outputs/introduction

Retour en haut
Consentement à l'utilisation de Cookies avec Real Cookie Banner