Structured outputs et web search
Combiner structure et recherche en temps réel
Les sorties structurées ne se limitent pas aux données statiques. Sur les modèles Grok 4 et versions ultérieures, vous pouvez combiner les structured outputs avec la recherche web. Le modèle cherche des informations en temps réel sur le web, puis structure les résultats selon votre schéma.
Pourquoi cette combinaison est puissante
Sans cette fonctionnalité, obtenir des données structurées à partir du web nécessite trois étapes séparées :
- Appeler une API de recherche (Google, Bing, etc.)
- Parser les résultats bruts
- Envoyer les résultats au LLM pour structuration
Avec les structured outputs + web search, tout se fait en un seul appel. Le modèle cherche, synthétise et structure.
Prérequis : Grok 4 minimum
Cette fonctionnalité est exclusivement disponible sur Grok 4 et les versions ultérieures. Les modèles Grok 3 et Grok 3 Mini ne supportent pas la combinaison d’outils avec les sorties structurées.
Exemple : veille concurrentielle
from pydantic import BaseModel
class Concurrent(BaseModel):
nom: str
site_web: str
produit_phare: str
avantage_principal: str
class VeilleConcurrentielle(BaseModel):
secteur: str
date_analyse: str
concurrents: list[Concurrent]
tendances: list[str]
opportunites: list[str]
response, parsed = client.chat.parse(
model="grok-4.20-reasoning",
messages=[{
"role": "user",
"content": "Fais une veille concurrentielle sur le marché français des néobanques en 2026"
}],
response_format=VeilleConcurrentielle,
tools=[{"type": "web_search"}]
)
for c in parsed.concurrents:
print(f"{c.nom} — {c.avantage_principal}")
Le modèle va :
- Rechercher les néobanques françaises actuelles sur le web
- Collecter les informations pertinentes
- Structurer le tout selon le schéma
VeilleConcurrentielle
Exemple : suivi d’actualité
class Article(BaseModel):
titre: str
source: str
date: str
resume: str
impact: str
class RevuePresse(BaseModel):
sujet: str
articles: list[Article]
synthese: str
response, parsed = client.chat.parse(
model="grok-4.20-reasoning",
messages=[{
"role": "user",
"content": "Quelles sont les dernières actualités sur la régulation de l'IA en Europe ?"
}],
response_format=RevuePresse,
tools=[{"type": "web_search"}]
)
print(parsed.synthese)
for article in parsed.articles:
print(f"[{article.source}] {article.titre}")
Bonnes pratiques
Soyez spécifique dans le prompt
Le web search fonctionne mieux avec des requêtes précises :
# Trop vague
"Quoi de neuf dans la tech ?"
# Précis et exploitable
"Les 5 plus grosses levées de fonds dans l'IA en France au T1 2026"
Adaptez votre schéma aux données disponibles
Ne demandez pas des données que le web ne peut pas fournir de manière fiable :
# Difficile à trouver précisément
class Entreprise(BaseModel):
chiffre_affaires_exact: float # rarement public
# Réaliste
class Entreprise(BaseModel):
chiffre_affaires_estime: str # "environ 50M EUR"
source_estimation: str
Gérez les données manquantes
Rendez optionnels les champs qui pourraient ne pas être trouvés :
class InfoEntreprise(BaseModel):
nom: str
fondateur: str
annee_creation: int
valorisation: str | None # pas toujours disponible
nombre_employes: str | None
Points clés à retenir
- La combinaison structured outputs + web search nécessite Grok 4 minimum
- Activez la recherche web avec
tools=[{"type": "web_search"}] - Un seul appel API remplace une chaîne recherche → parsing → structuration
- Soyez spécifique dans vos prompts pour de meilleurs résultats
- Rendez optionnels les champs dont la disponibilité n’est pas garantie