Aller au contenu principal

Structured outputs et code execution

Exécuter du code et structurer les résultats

La combinaison des sorties structurées avec l’exécution de code permet au modèle de calculer des résultats puis de les retourner dans un format structuré. Le modèle écrit du code, l’exécute dans un environnement sécurisé, et formate la sortie selon votre schéma.

Fonctionnalité Grok 4 exclusivement

Comme pour la recherche web, cette combinaison est réservée aux modèles Grok 4 et versions ultérieures. Les modèles antérieurs ne supportent pas la combinaison d’outils avec les structured outputs.

Cas d’usage typique : calculs précis

Le principal avantage de code execution avec les structured outputs est la précision des calculs. Les LLM font régulièrement des erreurs d’arithmétique. En exécutant du code, les résultats sont mathématiquement exacts.

from pydantic import BaseModel

class AnalyseFinanciere(BaseModel):
    revenu_total: float
    cout_total: float
    marge_brute: float
    marge_pourcentage: float
    produit_plus_rentable: str
    produit_moins_rentable: str

response, parsed = client.chat.parse(
    model="grok-4.20-reasoning",
    messages=[{
        "role": "user",
        "content": """Voici les ventes du trimestre :
        - Produit A : 150 unités à 45 EUR, coût unitaire 28 EUR
        - Produit B : 320 unités à 22 EUR, coût unitaire 15 EUR
        - Produit C : 85 unités à 120 EUR, coût unitaire 78 EUR

        Calcule l'analyse financière complète."""
    }],
    response_format=AnalyseFinanciere,
    tools=[{"type": "code_execution"}]
)

print(f"Marge brute : {parsed.marge_brute} EUR")
print(f"Marge : {parsed.marge_pourcentage}%")
print(f"Meilleur produit : {parsed.produit_plus_rentable}")

Le modèle va écrire un script Python pour effectuer les calculs, l’exécuter, puis formater les résultats dans le schéma AnalyseFinanciere.

Exemple : analyse statistique

class StatistiquesDescriptives(BaseModel):
    moyenne: float
    mediane: float
    ecart_type: float
    minimum: float
    maximum: float
    quartile_1: float
    quartile_3: float
    nombre_valeurs: int

response, parsed = client.chat.parse(
    model="grok-4.20-reasoning",
    messages=[{
        "role": "user",
        "content": """Calcule les statistiques descriptives pour ces données :
        [23, 45, 12, 67, 34, 89, 56, 78, 41, 33, 61, 25,
         72, 48, 55, 39, 64, 71, 28, 50]"""
    }],
    response_format=StatistiquesDescriptives,
    tools=[{"type": "code_execution"}]
)

print(f"Moyenne : {parsed.moyenne}")
print(f"Écart-type : {parsed.ecart_type}")

Combiner web search et code execution

Vous pouvez activer les deux outils simultanément :

class AnalyseMarche(BaseModel):
    entreprise: str
    cours_actuel: float
    variation_30j: float
    volume_moyen: float
    tendance: str
    recommandation: str

response, parsed = client.chat.parse(
    model="grok-4.20-reasoning",
    messages=[{
        "role": "user",
        "content": "Analyse l'action Apple sur les 30 derniers jours"
    }],
    response_format=AnalyseMarche,
    tools=[
        {"type": "web_search"},
        {"type": "code_execution"}
    ]
)

Le modèle va chercher les données récentes sur le web, puis utiliser code execution pour calculer les variations et les moyennes.

Limites de l’exécution de code

  • L’environnement d’exécution est isolé et éphémère
  • Les bibliothèques disponibles sont limitées (Python standard, numpy, etc.)
  • Le temps d’exécution est borné
  • Pas d’accès réseau depuis le code exécuté
  • Les fichiers créés ne persistent pas entre les appels

Points clés à retenir

  • Code execution + structured outputs nécessite Grok 4 minimum
  • Le modèle écrit et exécute du code pour des calculs précis
  • Activez avec tools=[{"type": "code_execution"}]
  • Combinable avec web_search pour chercher puis calculer
  • Idéal pour les analyses financières, statistiques et mathématiques
  • Les résultats calculés sont exacts, contrairement aux estimations du LLM