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