Aller au contenu principal

tool_choice et contrôle

Contrôler le comportement du modèle

Par défaut, le modèle décide seul s’il doit appeler un outil ou répondre directement. C’est le mode auto. Mais dans certains cas, vous avez besoin d’un contrôle plus fin. Le paramètre tool_choice vous donne ce pouvoir.

Les quatre modes de tool_choice

Mode auto (défaut)

response = client.chat.completions.create(
    model="grok-3",
    messages=messages,
    tools=tools,
    tool_choice="auto"
)

Le modèle évalue la requête et décide :

  • Si la requête nécessite des données externes → il appelle un outil
  • Si il peut répondre directement → il répond sans outil

C’est le mode le plus courant et le plus naturel. Utilisez-le quand vous faites confiance au jugement du modèle.

Mode required

response = client.chat.completions.create(
    model="grok-3",
    messages=messages,
    tools=tools,
    tool_choice="required"
)

Le modèle doit appeler au moins un outil. Il ne peut pas répondre directement, même s’il connaît déjà la réponse. Cas d’usage :

  • Extraction structurée : vous voulez forcer le modèle à extraire des données dans un format précis via un outil dédié
  • Validation obligatoire : chaque requête doit passer par un outil de vérification
  • Logging systématique : tout doit être tracé via un outil de journalisation

Mode none

response = client.chat.completions.create(
    model="grok-3",
    messages=messages,
    tools=tools,
    tool_choice="none"
)

Désactive complètement le function calling pour cette requête. Le modèle voit les définitions d’outils (elles restent dans le contexte) mais ne peut pas les appeler. Cas d’usage :

  • Phase de clarification : vous voulez que le modèle pose des questions avant d’agir
  • Mode prévisualisation : montrer ce que le modèle ferait sans exécuter
  • Fallback : si les outils sont temporairement indisponibles

Mode spécifique (forcer un outil précis)

response = client.chat.completions.create(
    model="grok-3",
    messages=messages,
    tools=tools,
    tool_choice={
        "type": "function",
        "function": {"name": "get_weather"}
    }
)

Le modèle est forcé d’appeler exactement cet outil. Il ne peut ni en choisir un autre, ni répondre directement. C’est le mode le plus contraignant. Cas d’usage :

  • Workflow séquentiel : à cette étape, c’est forcément cet outil qui doit être appelé
  • Tests : vous voulez vérifier que le modèle génère les bons arguments pour un outil donné
  • Extraction ciblée : vous savez quel outil utiliser et voulez juste que le modèle extraie les paramètres

Comparaison des modes

Mode Comportement Quand l'utiliser
auto Le modèle décide librement Cas général, chatbots
required Doit appeler au moins un outil Extraction, validation
none Aucun outil autorisé Clarification, fallback
{"function":...} Force un outil spécifique Workflow, tests

Stratégies avancées

Alterner les modes dans un workflow

Un workflow intelligent peut changer de tool_choice selon l’étape :

# Étape 1 : forcer la recherche
response1 = client.chat.completions.create(
    model="grok-3",
    messages=messages,
    tools=tools,
    tool_choice={"type": "function", "function": {"name": "search_products"}}
)

# Étape 2 : laisser le modèle décider (analyse ou question)
response2 = client.chat.completions.create(
    model="grok-3",
    messages=updated_messages,
    tools=tools,
    tool_choice="auto"
)

Combiner avec le system prompt

Le system prompt peut guider le modèle dans ses choix d’outils même en mode auto :

messages = [
    {
        "role": "system",
        "content": "Vous êtes un assistant voyage. Utilisez toujours "
                   "get_weather avant de recommander des activités en plein air."
    },
    {"role": "user", "content": "Que faire à Marseille ce weekend ?"}
]

Points clés à retenir

  • auto : le modèle décide (défaut, recommandé pour la plupart des cas)
  • required : force l’appel d’au moins un outil
  • none : désactive temporairement le function calling
  • Mode spécifique : force l’appel d’un outil précis par son nom
  • Alternez les modes dans un workflow pour un contrôle fin
  • Combinez tool_choice avec le system prompt pour guider le modèle