AGTCloud API Docs
GuidesRéférence APIIntégrations et ressourcesMises à jour et aide

Structured Output

Obtenez des données structurées faciles à analyser et à valider par votre programme.

Structured Output permet au modèle de retourner une structure attendue pour extraire des champs, écrire dans une base de données ou alimenter un workflow. Il sert notamment à classer des tickets, extraire des formulaires, représenter des résultats de modération et produire des rapports structurés.

Structured Output et Tool Calling répondent à des besoins différents

Utilisez Structured Output pour obtenir une réponse structurée, et Tool Calling pour demander à l’application d’exécuter une fonction choisie par le modèle. Les paramètres d’outils peuvent aussi être contraints par un Schema, mais relèvent du cycle d’appels d’outils.

Choisir d’abord le mode de sortie adapté

ModeBesoin couvertTravail restant côté client
Demander du JSON dans le promptFournir une contrainte de base aux modèles sans champs dédiésExtraire, analyser et valider le JSON, puis réessayer en cas d’échec
JSON ObjectDemander un objet JSON valideValider les champs, types et règles métier
JSON SchemaFournir la structure cible dans la requêteGérer les limites du modèle, les refus, les troncatures et les échecs de validation

La prise en charge de JSON Object, de JSON Schema et du respect strict dépend du modèle et du protocole. Un statut 200 ne prouve pas à lui seul que le Schema demandé a été appliqué.

Définir un Schema limité et précis

La structure suivante classe une demande client en ticket :

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "enum": ["billing", "technical", "account"]
    },
    "priority": {
      "type": "integer",
      "minimum": 1,
      "maximum": 3
    },
    "summary": {
      "type": "string"
    }
  },
  "required": ["category", "priority", "summary"],
  "additionalProperties": false
}

Choisissez des noms de champs stables et clairs, et des valeurs d’énumération cohérentes avec le code métier. Évitez dès le départ les imbrications profondes, les nombreuses branches facultatives et les expressions régulières difficiles à expliquer.

Obtenir un résultat structuré avec Chat Completions

curl 'https://api.agtcloud.cn/v1/chat/completions' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer your-api-key' \
  --data '{
    "model": "MODEL_ID",
    "messages": [
      {
        "role": "user",
        "content": "Ma clé API ne fonctionne pas. Veuillez classer ma demande."
      }
    ],
    "response_format": {
      "type": "json_schema",
      "json_schema": {
        "name": "support_ticket",
        "strict": true,
        "schema": {
          "type": "object",
          "properties": {
            "category": {
              "type": "string",
              "enum": ["billing", "technical", "account"]
            },
            "priority": {
              "type": "integer",
              "minimum": 1,
              "maximum": 3
            },
            "summary": {"type": "string"}
          },
          "required": ["category", "priority", "summary"],
          "additionalProperties": false
        }
      }
    }
  }'

strict fait partie du format cible, mais sa disponibilité dépend du modèle. Consultez les champs complets dans Chat Completions Reference.

Emplacement des champs selon le protocole

Chat sélectionne json_object ou json_schema dans response_format. Le JSON Schema se trouve dans response_format.json_schema.schema.

{
  "response_format": {
    "type": "json_schema",
    "json_schema": {
      "name": "support_ticket",
      "schema": {"type": "object"}
    }
  }
}

Ces structures ne se transposent pas directement à un autre protocole. Consultez Responses Reference et Gemini Generate Content Reference avant utilisation.

Valider les données après l’analyse

type SupportTicket = {
  category: 'billing' | 'technical' | 'account';
  priority: number;
  summary: string;
};

function parseTicket(raw: string): SupportTicket {
  const value: unknown = JSON.parse(raw);

  if (
    typeof value !== 'object' ||
    value === null ||
    !('category' in value) ||
    !('priority' in value) ||
    !('summary' in value)
  ) {
    throw new Error('Le résultat structuré ne contient pas les champs requis');
  }

  return value as SupportTicket;
}

Cet exemple montre uniquement une vérification minimale. En production, utilisez un validateur Schema cohérent avec le modèle de données métier, et vérifiez les énumérations, longueurs, plages numériques et règles entre champs.

Gérer les résultats incomplets ou invalides

SituationTraitement
Texte ordinaire retournéVérifier la prise en charge du format, l’emplacement des champs et les modifications éventuelles du SDK
JSON impossible à analyserConserver la réponse expurgée et la raison de fin, puis limiter les tentatives selon la politique métier
Champs requis absentsConsidérer la validation comme échouée, sans masquer les données manquantes par des valeurs par défaut
Sortie tronquéeAjuster le budget de sortie ou simplifier le Schema, sans inventer le JSON manquant
Refus du modèleTraiter le refus séparément, sans interpréter son texte comme un objet métier
Structure analysable mais données métier invalidesRetourner une erreur explicite après validation métier ou transmettre à un opérateur

Vérifications avant la mise en production

  • Le Schema et les types de l’application proviennent d’une même source ou restent synchronisés.
  • Avant de changer de modèle, revérifiez le protocole, le sous-ensemble Schema et le mode strict.
  • Les échecs d’analyse, refus, troncatures et sorties vides disposent de branches distinctes.
  • Les résultats structurés sont revalidés avant une écriture ou une action métier.
  • Les journaux conservent uniquement les informations expurgées nécessaires au diagnostic.

Après avoir vérifié le modèle dans le Catalogue de modèles, consultez les champs complets dans sa référence API. En cas d’échec, consultez Erreurs et dépannage.

Sur cette page