> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tokenlab.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Sorties Structurées & Appels d'Outils

> Utilisez le mode JSON, les outils de fonction et les routes d'outils natifs sans supposer que chaque modèle prend en charge le même contrat.

Les sorties structurées et les appels d'outils sont des contrats spécifiques à la route. TokenLab transmet plusieurs formats d'API publics, donc le modèle de production le plus sûr est de garder chaque forme d'outil native du fournisseur sur la route qui lui appartient et de valider la sortie du modèle dans votre propre application.

## Choisissez La Route

| Besoin                                             | Route                                   | Utilisez cette forme                                 |
| -------------------------------------------------- | --------------------------------------- | ---------------------------------------------------- |
| Réponses d'objets JSON portables                   | `/v1/chat/completions`                  | `response_format: {"type": "json_object"}`           |
| Appel de fonction compatible OpenAI                | `/v1/chat/completions`                  | `tools: [{ "type": "function", "function": ... }]`   |
| Outils de réponses OpenAI                          | `/v1/responses`                         | Champs `tools`, `tool_choice` et `text` des réponses |
| Utilisation ou réflexion d'outils natifs Claude    | `/v1/messages`                          | Schéma d'outil Messages d'Anthropic                  |
| Déclarations de fonction Gemini ou outils intégrés | `/v1beta/models/:model:generateContent` | `tools` natifs de Gemini et parties de contenu       |

Ne pas envoyer d'outils intégrés natifs du fournisseur par une route différente et s'attendre à ce que TokenLab les traduise silencieusement.

## Mode JSON

Pour des réponses structurées portables, commencez avec le mode JSON des Chat Completions :

```json theme={null}
{
  "model": "gpt-5.4",
  "messages": [
    {
      "role": "user",
      "content": "Return a JSON object with city and weather."
    }
  ],
  "response_format": { "type": "json_object" }
}
```

La validation partagée stable pour les Chat Completions accepte `text` et `json_object`. `json_schema`, `strict`, et l'application de schémas spécifiques au fournisseur peuvent exister pour certaines routes en amont ou chemins de conversion, mais ils ne constituent pas une promesse générale sur chaque route et modèle de TokenLab. Vérifiez-les par rapport au modèle sélectionné avant de vous y fier.

Parsez et validez toujours le JSON retourné sur votre serveur. Le mode JSON améliore la forme, mais ne remplace pas la validation de schéma au niveau de l'application.

## Boucle d'Appel d'Outils

TokenLab n'exécute pas vos fonctions. Votre application possède la boucle :

1. Envoyez des messages plus des définitions d'outils.
2. Lisez la réponse du modèle pour `tool_calls`, `function_call`, `tool_use` d'Anthropic, ou parties d'appel de fonction Gemini.
3. Exécutez l'outil dans votre propre backend.
4. Ajoutez le résultat de l'outil dans le format requis par la même route.
5. Continuez la conversation jusqu'à ce que le modèle retourne une réponse finale.

Gardez la même route tout au long d'une boucle d'outils. Mélanger les Chat Completions, Réponses, Messages et formats Gemini dans une seule conversation crée généralement des bugs subtils d'état et de schéma.

## Exemple de Chat Completions

```bash theme={null}
curl https://api.tokenlab.sh/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.4",
    "messages": [
      {
        "role": "user",
        "content": "Extract name and email as JSON. If needed, look up the customer."
      }
    ],
    "response_format": { "type": "json_object" },
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "lookup_customer",
          "description": "Look up a customer by email",
          "parameters": {
            "type": "object",
            "properties": {
              "email": { "type": "string" }
            },
            "required": ["email"]
          }
        }
      }
    ]
  }'
```

## Conception de Schéma

* Gardez les schémas petits et explicites. Les grands schémas imbriqués ajoutent des tokens et réduisent la fiabilité.
* Préférez les champs requis pour les valeurs sans lesquelles votre produit ne peut pas continuer.
* Utilisez des enums pour des ensembles fermés dont votre UI ou backend dépend.
* Incluez des exemples dans l'invite lorsque le modèle a des difficultés avec une forme.
* Traitez les erreurs de champ non pris en charge comme des retours d'information sur le contrat. Supprimez le champ ou utilisez la route native qui le documente.

## Liste de Vérification de Production

* Enregistrez la route, le modèle, les noms d'outils et la forme de schéma assainie dans les journaux.
* Validez les arguments d'outils avant d'exécuter tout effet secondaire.
* Appliquez vos propres vérifications de permission avant l'exécution de l'outil.
* Rendez l'exécution de l'outil idempotente lorsque la tentative d'un client peut répéter le même appel d'outil.
* Ne pas enregistrer les secrets retournés par les outils dans des messages visibles par le modèle.

## Référence API

| Sujet                     | Référence                                                              |
| ------------------------- | ---------------------------------------------------------------------- |
| API Multi-Format          | [API Multi-Format](/fr/guides/api-formats)                             |
| Créer une Chat Completion | [Créer une Chat Completion](/fr/api-reference/chat/create-completion)  |
| Créer une Réponse         | [Créer une Réponse](/fr/api-reference/responses/create-response)       |
| Créer un Message          | [Créer un Message](/fr/api-reference/messages/create-message)          |
| Générer du Contenu Gemini | [Générer du Contenu Gemini](/fr/api-reference/gemini/generate-content) |
