DocumentationOutils

Construire

Outils

Décrivez vos fonctions au modèle. Il décide quand en appeler une, votre code l’exécute et lui rend le résultat.

Sur cette page
  1. Le tour complet
  2. Exemple
  3. Bon à savoir

Le tour complet

  1. Vous décrivez la fonction

    Son nom, ce qu’elle fait et ses paramètres, en JSON Schema.

  2. Le modèle demande l’appel

    Au lieu d’un texte, il renvoie tool_calls avec les arguments.

  3. Votre code l’exécute

    Le modèle n’exécute rien lui-même. Vous gardez la main sur ce qui se passe.

  4. Le modèle répond

    Avec le résultat renvoyé dans un message tool, il écrit sa réponse.

Exemple

Une fonction qui dit si une facture est payée. La réponse montrée est celle du premier appel, quand le modèle demande la fonction.

import json

tools = [
    {
        "type": "function",
        "function": {
            "name": "invoice_status",
            "description": "Payment status of an invoice.",
            "parameters": {
                "type": "object",
                "properties": {"number": {"type": "string"}},
                "required": ["number"],
            },
        },
    }
]
messages = [
    {
        "role": "user",
        "content": "Has invoice 2026-114 been paid?",
    }
]

first = client.chat.completions.create(
    model="flash", messages=messages, tools=tools
)
call = first.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)

# Run the function, then return its result with the call id.
result = {
    "number": args["number"],
    "status": "paid",
    "paid_on": "2026-10-02",
}
messages.append(first.choices[0].message)
messages.append(
    {
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps(result),
    }
)

final = client.chat.completions.create(
    model="flash", messages=messages, tools=tools
)
print(final.choices[0].message.content)
Réponse
{
  "role": "assistant",
  "content": null,
  "tool_calls": [
    {
      "id": "call_7f3a",
      "type": "function",
      "function": { "name": "invoice_status", "arguments": "{\"number\": \"2026-114\"}" }
    }
  ]
}

Bon à savoir

  • Une liste d’outils vide est retirée avec tool_choice, comme si vous n’en aviez pas envoyé.
  • parallel_tool_calls permet au modèle de demander plusieurs fonctions à la fois.
  • Vérifiez les arguments avant d’agir. Le modèle peut se tromper, votre code décide.