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 outilnone: 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_choiceavec le system prompt pour guider le modèle