Pourquoi les sorties structurées ?
Les agents retournent du texte libre par défaut, ce qui fonctionne pour le chat mais pas quand vous avez besoin d’utiliser la sortie par programmation. Les sorties structurées vous donnent des données typées que vous pouvez passer directement à votre logique d’application, base de données ou composants UI. Considérez une application de recettes où un agent recherche sur le web et ramène des recettes. Sans sorties structurées, vous obtenez du texte libre que vous devriez analyser vous-même. Avec les sorties structurées, vous définissez la forme que vous souhaitez et obtenez des données typées que vous pouvez utiliser directement dans votre application.Sans sorties structurées
Sans sorties structurées
Avec sorties structurées
Avec sorties structurées
Démarrage rapide
Pour utiliser les sorties structurées, définissez un JSON Schema décrivant la forme des données que vous souhaitez, puis passez-le àquery() via l’option outputFormat (TypeScript) ou output_format (Python). Quand l’agent termine, le message de résultat inclut un champ structured_output avec des données validées correspondant à votre schéma.
L’exemple ci-dessous demande à l’agent de rechercher Anthropic et de retourner le nom de l’entreprise, l’année de fondation et le siège social en tant que sortie structurée.
Schémas type-safe avec Zod et Pydantic
Au lieu d’écrire JSON Schema à la main, vous pouvez utiliser Zod (TypeScript) ou Pydantic (Python) pour définir votre schéma. Ces bibliothèques génèrent le JSON Schema pour vous et vous permettent d’analyser la réponse en un objet entièrement typé que vous pouvez utiliser dans tout votre codebase avec l’autocomplétion et la vérification de type. L’exemple ci-dessous définit un schéma pour un plan d’implémentation de fonctionnalité avec un résumé, une liste d’étapes (chacune avec un niveau de complexité) et les risques potentiels. L’agent planifie la fonctionnalité et retourne un objetFeaturePlan typé. Vous pouvez ensuite accéder à des propriétés comme plan.summary et itérer sur plan.steps avec une sécurité de type complète.
- Inférence de type complète (TypeScript) et indications de type (Python)
- Validation à l’exécution avec
safeParse()oumodel_validate() - Meilleurs messages d’erreur
- Schémas composables et réutilisables
Configuration du format de sortie
L’optionoutputFormat (TypeScript) ou output_format (Python) accepte un objet avec :
type: Défini sur"json_schema"pour les sorties structuréesschema: Un objet JSON Schema définissant votre structure de sortie. Vous pouvez générer ceci à partir d’un schéma Zod avecz.toJSONSchema()ou d’un modèle Pydantic avec.model_json_schema()
enum, const, required, les objets imbriqués et les définitions $ref. Pour la liste complète des fonctionnalités supportées et des limitations, voir Limitations JSON Schema.
Exemple : agent de suivi des TODO
Cet exemple démontre comment les sorties structurées fonctionnent avec l’utilisation multi-étapes d’outils. L’agent doit trouver des commentaires TODO dans la base de code, puis rechercher les informations de git blame pour chacun. Il décide de manière autonome quels outils utiliser (Grep pour rechercher, Bash pour exécuter les commandes git) et combine les résultats en une seule réponse structurée. Le schéma inclut des champs optionnels (author et date) puisque les informations de git blame pourraient ne pas être disponibles pour tous les fichiers. L’agent remplit ce qu’il peut trouver et omet le reste.
Gestion des erreurs
La génération de sortie structurée peut échouer quand l’agent ne peut pas produire du JSON valide correspondant à votre schéma. Cela se produit généralement quand le schéma est trop complexe pour la tâche, la tâche elle-même est ambiguë, ou l’agent atteint sa limite de tentatives en essayant de corriger les erreurs de validation. Quand une erreur se produit, le message de résultat a unsubtype indiquant ce qui s’est mal passé :
| Subtype | Signification |
|---|---|
success | La sortie a été générée et validée avec succès |
error_max_structured_output_retries | L’agent n’a pas pu produire une sortie valide après plusieurs tentatives |
subtype pour déterminer si la sortie a été générée avec succès ou si vous devez gérer un échec :
- Gardez les schémas ciblés. Les schémas profondément imbriqués avec de nombreux champs requis sont plus difficiles à satisfaire. Commencez simple et ajoutez de la complexité au besoin.
- Faites correspondre le schéma à la tâche. Si la tâche pourrait ne pas avoir toutes les informations que votre schéma nécessite, rendez ces champs optionnels.
- Utilisez des invites claires. Les invites ambiguës rendent plus difficile pour l’agent de savoir quelle sortie produire.
Ressources connexes
- Documentation JSON Schema : apprenez la syntaxe JSON Schema pour définir des schémas complexes avec des objets imbriqués, des tableaux, des énumérations et des contraintes de validation
- Sorties structurées de l’API : utilisez les sorties structurées avec l’API Claude directement pour les requêtes à un seul tour sans utilisation d’outils
- Outils personnalisés : donnez à votre agent des outils personnalisés à appeler pendant l’exécution avant de retourner une sortie structurée