Loading...
    • Guide du développeur
    • Référence API
    • MCP
    • Ressources
    • Notes de version
    Search...
    ⌘K
    Premiers pas
    Introduction à ClaudeDémarrage rapide
    Modèles et tarification
    Aperçu des modèlesChoisir un modèleNouveautés dans Claude 4.6Guide de migrationDépréciation des modèlesTarification
    Créer avec Claude
    Aperçu des fonctionnalitésUtiliser l'API MessagesGérer les raisons d'arrêtBonnes pratiques de prompting
    Capacités du modèle
    Extended thinkingAdaptive thinkingEffortMode rapide (aperçu de recherche)Sorties structuréesCitationsStreaming de messagesTraitement par lotsSupport PDFRésultats de rechercheSupport multilingueEmbeddingsVision
    Outils
    AperçuComment implémenter l'utilisation d'outilsOutil de recherche webOutil de récupération webOutil d'exécution de codeOutil de mémoireOutil BashOutil Computer useOutil d'éditeur de texte
    Infrastructure d'outils
    Recherche d'outilsAppel d'outils programmatiqueStreaming d'outils à granularité fine
    Gestion du contexte
    Fenêtres de contexteCompactionÉdition du contexteMise en cache des promptsComptage des tokens
    Fichiers et ressources
    API Files
    Agent Skills
    AperçuDémarrage rapideBonnes pratiquesSkills pour l'entrepriseUtiliser Skills avec l'API
    Agent SDK
    AperçuDémarrage rapideSDK TypeScriptTypeScript V2 (aperçu)SDK PythonGuide de migration
    MCP dans l'API
    Connecteur MCPServeurs MCP distants
    Claude sur des plateformes tierces
    Amazon BedrockMicrosoft FoundryVertex AI
    Ingénierie des prompts
    AperçuGénérateur de promptsUtiliser des modèles de promptsAméliorateur de promptsÊtre clair et directUtiliser des exemples (prompting multi-shots)Laisser Claude réfléchir (CoT)Utiliser des balises XMLDonner un rôle à Claude (prompts système)Chaîner des prompts complexesConseils pour le contexte longConseils pour extended thinking
    Tester et évaluer
    Définir les critères de succèsDévelopper des cas de testUtiliser l'outil d'évaluationRéduire la latence
    Renforcer les garde-fous
    Réduire les hallucinationsAugmenter la cohérence des résultatsAtténuer les jailbreaksRefus en streamingRéduire les fuites de promptsGarder Claude dans le rôle
    Administration et surveillance
    Aperçu de l'API AdminRésidence des donnéesEspaces de travailAPI d'utilisation et de coûtsAPI Claude Code AnalyticsZéro rétention de données
    Console
    Log in
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...
    Loading...

    Solutions

    • AI agents
    • Code modernization
    • Coding
    • Customer support
    • Education
    • Financial services
    • Government
    • Life sciences

    Partners

    • Amazon Bedrock
    • Google Cloud's Vertex AI

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Company

    • Anthropic
    • Careers
    • Economic Futures
    • Research
    • News
    • Responsible Scaling Policy
    • Security and compliance
    • Transparency

    Learn

    • Blog
    • Catalog
    • Courses
    • Use cases
    • Connectors
    • Customer stories
    • Engineering at Anthropic
    • Events
    • Powered by Claude
    • Service partners
    • Startups program

    Help and security

    • Availability
    • Status
    • Support
    • Discord

    Terms and policies

    • Privacy policy
    • Responsible disclosure policy
    • Terms of service: Commercial
    • Terms of service: Consumer
    • Usage policy
    Capacités du modèle

    Sorties structurées

    Obtenir des résultats JSON validés à partir de flux de travail d'agent

    Les sorties structurées contraignent les réponses de Claude à suivre un schéma spécifique, garantissant une sortie valide et analysable pour le traitement en aval. Deux fonctionnalités complémentaires sont disponibles :

    • Sorties JSON (output_config.format) : Obtenir la réponse de Claude dans un format JSON spécifique
    • Utilisation stricte d'outils (strict: true) : Garantir la validation du schéma sur les noms d'outils et les entrées

    Le paramètre output_format a été déplacé vers output_config.format. L'ancien paramètre output_format fonctionne toujours temporairement mais est déprécié et sera supprimé dans une future version de l'API. Mettez à jour votre code pour utiliser output_config: {format: {...}} à la place.

    Ces fonctionnalités peuvent être utilisées indépendamment ou ensemble dans la même requête.

    Les sorties structurées sont généralement disponibles sur l'API Claude et Amazon Bedrock pour Claude Opus 4.6, Claude Sonnet 4.5, Claude Opus 4.5 et Claude Haiku 4.5. Les sorties structurées restent en bêta public sur Microsoft Foundry.

    Migration depuis la bêta ? Le paramètre output_format a été déplacé vers output_config.format, et les en-têtes bêta ne sont plus nécessaires. L'ancien en-tête bêta (structured-outputs-2025-11-13) et le paramètre output_format continueront à fonctionner pendant une période de transition. Consultez les exemples de code ci-dessous pour la forme d'API mise à jour.

    Pourquoi utiliser les sorties structurées

    Sans sorties structurées, Claude peut générer des réponses JSON mal formées ou des entrées d'outils invalides qui cassent vos applications. Même avec un invite soigné, vous pouvez rencontrer :

    • Des erreurs d'analyse dues à une syntaxe JSON invalide
    • Des champs obligatoires manquants
    • Des types de données incohérents
    • Des violations de schéma nécessitant une gestion des erreurs et des tentatives

    Les sorties structurées garantissent des réponses conformes au schéma grâce au décodage contraint :

    • Toujours valide : Plus d'erreurs JSON.parse()
    • Type sûr : Types de champs garantis et champs obligatoires
    • Fiable : Aucune tentative nécessaire pour les violations de schéma

    Sorties JSON

    Les sorties JSON contrôlent le format de réponse de Claude, garantissant que Claude retourne un JSON valide correspondant à votre schéma. Utilisez les sorties JSON quand vous avez besoin de :

    • Contrôler le format de réponse de Claude
    • Extraire des données d'images ou de texte
    • Générer des rapports structurés
    • Formater les réponses d'API

    Démarrage rapide

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {
            "role": "user",
            "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
          }
        ],
        "output_config": {
          "format": {
            "type": "json_schema",
            "schema": {
              "type": "object",
              "properties": {
                "name": {"type": "string"},
                "email": {"type": "string"},
                "plan_interest": {"type": "string"},
                "demo_requested": {"type": "boolean"}
              },
              "required": ["name", "email", "plan_interest", "demo_requested"],
              "additionalProperties": false
            }
          }
        }
      }'

    Format de réponse : JSON valide correspondant à votre schéma dans response.content[0].text

    {
      "name": "John Smith",
      "email": "[email protected]",
      "plan_interest": "Enterprise",
      "demo_requested": true
    }

    Comment ça fonctionne

    1. 1

      Définir votre schéma JSON

      Créez un schéma JSON qui décrit la structure que vous voulez que Claude suive. Le schéma utilise le format JSON Schema standard avec certaines limitations (voir Limitations du schéma JSON).

    2. 2

      Ajouter le paramètre output_config.format

      Incluez le paramètre output_config.format dans votre requête API avec type: "json_schema" et votre définition de schéma.

    3. 3

      Analyser la réponse

      La réponse de Claude sera un JSON valide correspondant à votre schéma, retourné dans response.content[0].text.

    Travailler avec les sorties JSON dans les SDK

    Les SDK Python et TypeScript fournissent des assistants qui facilitent le travail avec les sorties JSON, y compris la transformation de schéma, la validation automatique et l'intégration avec les bibliothèques de schéma populaires.

    Les méthodes d'assistance du SDK (comme .parse() et l'intégration Pydantic/Zod) acceptent toujours output_format comme paramètre de commodité. Le SDK gère la traduction vers output_config.format en interne. Les exemples ci-dessous montrent la syntaxe d'assistance du SDK.

    Utiliser Pydantic et Zod

    Pour les développeurs Python et TypeScript, vous pouvez utiliser des outils de définition de schéma familiers comme Pydantic et Zod au lieu d'écrire des schémas JSON bruts.

    from pydantic import BaseModel
    from anthropic import Anthropic, transform_schema
    
    class ContactInfo(BaseModel):
        name: str
        email: str
        plan_interest: str
        demo_requested: bool
    
    client = Anthropic()
    
    # With .create() - requires transform_schema()
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_config={
            "format": {
                "type": "json_schema",
                "schema": transform_schema(ContactInfo),
            }
        }
    )
    
    print(response.content[0].text)
    
    # With .parse() - can pass Pydantic model directly
    response = client.messages.parse(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[
            {
                "role": "user",
                "content": "Extract the key information from this email: John Smith ([email protected]) is interested in our Enterprise plan and wants to schedule a demo for next Tuesday at 2pm."
            }
        ],
        output_format=ContactInfo,
    )
    
    print(response.parsed_output)

    Méthodes spécifiques au SDK

    Python : client.messages.parse() (Recommandé)

    La méthode parse() transforme automatiquement votre modèle Pydantic, valide la réponse et retourne un attribut parsed_output.

    Python : Assistant transform_schema()

    Pour quand vous avez besoin de transformer manuellement les schémas avant d'envoyer, ou quand vous voulez modifier un schéma généré par Pydantic. Contrairement à client.messages.parse(), qui transforme automatiquement les schémas fournis, cela vous donne le schéma transformé pour que vous puissiez le personnaliser davantage.

    Comment fonctionne la transformation du SDK

    Les SDK Python et TypeScript transforment automatiquement les schémas avec des fonctionnalités non supportées :

    1. Supprimer les contraintes non supportées (par exemple, minimum, maximum, minLength, maxLength)
    2. Mettre à jour les descriptions avec les informations de contrainte (par exemple, « Doit être au moins 100 »), quand la contrainte n'est pas directement supportée avec les sorties structurées
    3. Ajouter additionalProperties: false à tous les objets
    4. Filtrer les formats de chaîne à la liste supportée uniquement
    5. Valider les réponses par rapport à votre schéma original (avec toutes les contraintes)

    Cela signifie que Claude reçoit un schéma simplifié, mais votre code applique toujours toutes les contraintes grâce à la validation.

    Exemple : Un champ Pydantic avec minimum: 100 devient un entier simple dans le schéma envoyé, mais la description est mise à jour à « Doit être au moins 100 », et le SDK valide la réponse par rapport à la contrainte originale.

    Cas d'usage courants

    Utilisation stricte d'outils

    L'utilisation stricte d'outils valide les paramètres d'outils, garantissant que Claude appelle vos fonctions avec des arguments correctement typés. Utilisez l'utilisation stricte d'outils quand vous avez besoin de :

    • Valider les paramètres d'outils
    • Construire des flux de travail d'agent
    • Assurer les appels de fonction type-safe
    • Gérer les outils complexes avec des propriétés imbriquées

    Pourquoi l'utilisation stricte d'outils est importante pour les agents

    La construction de systèmes d'agent fiables nécessite une conformité garantie au schéma. Sans le mode strict, Claude pourrait retourner des types incompatibles ("2" au lieu de 2) ou des champs obligatoires manquants, cassant vos fonctions et causant des erreurs d'exécution.

    L'utilisation stricte d'outils garantit des paramètres type-safe :

    • Les fonctions reçoivent des arguments correctement typés à chaque fois
    • Pas besoin de valider et de réessayer les appels d'outils
    • Les agents prêts pour la production qui fonctionnent de manière cohérente à l'échelle

    Par exemple, supposons qu'un système de réservation ait besoin de passengers: int. Sans le mode strict, Claude pourrait fournir passengers: "two" ou passengers: "2". Avec strict: true, la réponse contiendra toujours passengers: 2.

    Démarrage rapide

    curl https://api.anthropic.com/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $ANTHROPIC_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -d '{
        "model": "claude-opus-4-6",
        "max_tokens": 1024,
        "messages": [
          {"role": "user", "content": "What is the weather in San Francisco?"}
        ],
        "tools": [{
          "name": "get_weather",
          "description": "Get the current weather in a given location",
          "strict": true,
          "input_schema": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "The city and state, e.g. San Francisco, CA"
              },
              "unit": {
                "type": "string",
                "enum": ["celsius", "fahrenheit"]
              }
            },
            "required": ["location"],
            "additionalProperties": false
          }
        }]
      }'

    Format de réponse : Blocs d'utilisation d'outils avec entrées validées dans response.content[x].input

    {
      "type": "tool_use",
      "name": "get_weather",
      "input": {
        "location": "San Francisco, CA"
      }
    }

    Garanties :

    • L'input de l'outil suit strictement l'input_schema
    • Le name de l'outil est toujours valide (à partir des outils fournis ou des outils serveur)

    Comment ça fonctionne

    1. 1

      Définir votre schéma d'outil

      Créez un schéma JSON pour l'input_schema de votre outil. Le schéma utilise le format JSON Schema standard avec certaines limitations (voir Limitations du schéma JSON).

    2. 2

      Ajouter strict: true

      Définissez "strict": true comme propriété de niveau supérieur dans votre définition d'outil, à côté de name, description et input_schema.

    3. 3

      Gérer les appels d'outils

      Quand Claude utilise l'outil, le champ input dans le bloc tool_use suivra strictement votre input_schema, et le name sera toujours valide.

    Cas d'usage courants

    Utiliser les deux fonctionnalités ensemble

    Les sorties JSON et l'utilisation stricte d'outils résolvent des problèmes différents et peuvent être utilisées ensemble :

    • Sorties JSON contrôlent le format de réponse de Claude (ce que Claude dit)
    • Utilisation stricte d'outils valide les paramètres d'outils (comment Claude appelle vos fonctions)

    Quand combinées, Claude peut appeler des outils avec des paramètres garantis valides ET retourner des réponses JSON structurées. Ceci est utile pour les flux de travail d'agent où vous avez besoin à la fois d'appels d'outils fiables et de sorties finales structurées.

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        messages=[{"role": "user", "content": "Help me plan a trip to Paris for next month"}],
        # JSON outputs: structured response format
        output_config={
            "format": {
                "type": "json_schema",
                "schema": {
                    "type": "object",
                    "properties": {
                        "summary": {"type": "string"},
                        "next_steps": {"type": "array", "items": {"type": "string"}}
                    },
                    "required": ["summary", "next_steps"],
                    "additionalProperties": False
                }
            }
        },
        # Strict tool use: guaranteed tool parameters
        tools=[{
            "name": "search_flights",
            "strict": True,
            "input_schema": {
                "type": "object",
                "properties": {
                    "destination": {"type": "string"},
                    "date": {"type": "string", "format": "date"}
                },
                "required": ["destination", "date"],
                "additionalProperties": False
            }
        }]
    )

    Considérations importantes

    Compilation de grammaire et mise en cache

    Les sorties structurées utilisent l'échantillonnage contraint avec des artefacts de grammaire compilés. Cela introduit certaines caractéristiques de performance à connaître :

    • Latence de première requête : La première fois que vous utilisez un schéma spécifique, il y aura une latence supplémentaire pendant que la grammaire est compilée
    • Mise en cache automatique : Les grammaires compilées sont mises en cache pendant 24 heures à partir de la dernière utilisation, rendant les requêtes suivantes beaucoup plus rapides
    • Invalidation du cache : Le cache est invalidé si vous changez :
      • La structure du schéma JSON
      • L'ensemble des outils dans votre requête (lors de l'utilisation à la fois des sorties structurées et de l'utilisation d'outils)
      • Changer uniquement les champs name ou description n'invalide pas le cache

    Modification d'invite et coûts de jetons

    Lors de l'utilisation de sorties structurées, Claude reçoit automatiquement une invite système supplémentaire expliquant le format de sortie attendu. Cela signifie :

    • Votre nombre de jetons d'entrée sera légèrement plus élevé
    • L'invite injectée vous coûte des jetons comme toute autre invite système
    • Changer le paramètre output_config.format invalidera tout cache d'invite pour ce fil de conversation

    Limitations du schéma JSON

    Les sorties structurées supportent le schéma JSON standard avec certaines limitations. Les sorties JSON et l'utilisation stricte d'outils partagent ces limitations.

    Les SDK Python et TypeScript peuvent automatiquement transformer les schémas avec des fonctionnalités non supportées en les supprimant et en ajoutant des contraintes aux descriptions de champs. Voir Méthodes spécifiques au SDK pour les détails.

    Sorties invalides

    Bien que les sorties structurées garantissent la conformité au schéma dans la plupart des cas, il existe des scénarios où la sortie peut ne pas correspondre à votre schéma :

    Refus (stop_reason: "refusal")

    Claude maintient ses propriétés de sécurité et d'utilité même lors de l'utilisation de sorties structurées. Si Claude refuse une requête pour des raisons de sécurité :

    • La réponse aura stop_reason: "refusal"
    • Vous recevrez un code de statut 200
    • Vous serez facturé pour les jetons générés
    • La sortie peut ne pas correspondre à votre schéma car le message de refus prend la priorité sur les contraintes de schéma

    Limite de jetons atteinte (stop_reason: "max_tokens")

    Si la réponse est coupée en raison du dépassement de la limite max_tokens :

    • La réponse aura stop_reason: "max_tokens"
    • La sortie peut être incomplète et ne pas correspondre à votre schéma
    • Réessayez avec une valeur max_tokens plus élevée pour obtenir la sortie structurée complète

    Erreurs de validation de schéma

    Si votre schéma utilise des fonctionnalités non supportées ou est trop complexe, vous recevrez une erreur 400 :

    « Trop de définitions récursives dans le schéma »

    • Cause : Le schéma a des définitions récursives excessives ou cycliques
    • Solution : Simplifier la structure du schéma, réduire la profondeur d'imbrication

    « Le schéma est trop complexe »

    • Cause : Le schéma dépasse les limites de complexité
    • Solution : Diviser en schémas plus petits, simplifier la structure ou réduire le nombre d'outils marqués comme strict: true

    Pour les problèmes persistants avec des schémas valides, contactez le support avec votre définition de schéma.

    Compatibilité des fonctionnalités

    Fonctionne avec :

    • Traitement par lot : Traiter les sorties structurées à l'échelle avec une réduction de 50 %
    • Comptage de jetons : Compter les jetons sans compilation
    • Streaming : Diffuser les sorties structurées comme les réponses normales
    • Utilisation combinée : Utiliser les sorties JSON (output_config.format) et l'utilisation stricte d'outils (strict: true) ensemble dans la même requête

    Incompatible avec :

    • Citations : Les citations nécessitent d'entrelacer les blocs de citations avec du texte, ce qui entre en conflit avec les contraintes strictes du schéma JSON. Retourne une erreur 400 si les citations sont activées avec output_config.format.
    • Préfixage de message : Incompatible avec les sorties JSON

    Portée de la grammaire : Les grammaires s'appliquent uniquement à la sortie directe de Claude, pas aux appels d'outils, aux résultats d'outils ou aux balises de réflexion (lors de l'utilisation de la Réflexion étendue). L'état de la grammaire se réinitialise entre les sections, permettant à Claude de réfléchir librement tout en produisant une sortie structurée dans la réponse finale.

    Was this page helpful?

    • Pourquoi utiliser les sorties structurées
    • Sorties JSON
    • Démarrage rapide
    • Comment ça fonctionne
    • Travailler avec les sorties JSON dans les SDK
    • Cas d'usage courants
    • Utilisation stricte d'outils
    • Pourquoi l'utilisation stricte d'outils est importante pour les agents
    • Démarrage rapide
    • Comment ça fonctionne
    • Cas d'usage courants
    • Utiliser les deux fonctionnalités ensemble
    • Considérations importantes
    • Compilation de grammaire et mise en cache
    • Modification d'invite et coûts de jetons
    • Limitations du schéma JSON
    • Sorties invalides
    • Erreurs de validation de schéma
    • Compatibilité des fonctionnalités