Mélange d'outils serveur et client
Workflows hybrides
La véritable puissance de la Responses API se révèle quand vous combinez des outils serveur (exécutés automatiquement par xAI) et des outils client (vos fonctions personnalisées) dans une même requête. Le modèle orchestre ces outils de manière autonome, créant des workflows complexes en quelques lignes de code.
Combiner outils serveur et fonctions
response = client.responses.create(
model="grok-4.20-reasoning",
input="Recherche les derniers résultats de foot en Ligue 1 et envoie un résumé à mon équipe.",
tools=[
{"type": "web_search"},
{
"type": "function",
"name": "send_team_message",
"description": "Envoie un message à l'équipe via Slack",
"parameters": {
"type": "object",
"properties": {
"channel": {"type": "string"},
"message": {"type": "string"}
},
"required": ["channel", "message"]
}
}
]
)
Dans ce scénario, le modèle :
- Lance
web_searchautomatiquement (côté serveur) pour trouver les résultats - Intègre les données dans un résumé
- Appelle
send_team_message(côté client) pour que votre code envoie le message Slack
Le flux d’exécution hybride
Le flux diffère selon le type d’outil :
Outils serveur uniquement
Requête → [modèle → web_search → résultat → modèle] → Réponse finale
Tout se passe côté xAI. Vous recevez directement la réponse finale avec les résultats intégrés.
Outils client uniquement
Requête → [modèle → function_call] → PAUSE
Votre code exécute la fonction
Résultat → [modèle] → Réponse finale
Le modèle met en pause, votre code exécute, puis vous renvoyez le résultat.
Flux hybride
Requête → [modèle → web_search → résultat → modèle → function_call] → PAUSE
Votre code exécute la fonction
Résultat → [modèle] → Réponse finale
Le modèle utilise d’abord les outils serveur (automatiquement), puis appelle votre fonction quand il a besoin de votre infrastructure.
Patterns de combinaison courants
Recherche + Action
Combinez web_search ou x_search avec une fonction d’action :
tools = [
{"type": "web_search"},
{"type": "x_search"},
{
"type": "function",
"name": "create_report",
"description": "Crée un rapport dans le CRM",
"parameters": {
"type": "object",
"properties": {
"title": {"type": "string"},
"content": {"type": "string"},
"tags": {"type": "array", "items": {"type": "string"}}
},
"required": ["title", "content"]
}
}
]
Calcul + Notification
Combinez code_interpreter avec une fonction de notification :
tools = [
{"type": "code_interpreter"},
{
"type": "function",
"name": "send_alert",
"description": "Envoie une alerte si un seuil est dépassé",
"parameters": {
"type": "object",
"properties": {
"metric": {"type": "string"},
"value": {"type": "number"},
"threshold": {"type": "number"}
},
"required": ["metric", "value"]
}
}
]
max_turns et outils hybrides
Le comportement de max_turns est important dans un contexte hybride :
max_turnslimite les tours côté serveur dans une seule requête- Quand le modèle appelle une fonction client et que votre code renvoie le résultat, une nouvelle allocation de
max_turnscommence
En pratique, cela signifie que les appels client n’épuisent pas votre budget de tours serveur. Le modèle peut effectuer 3 recherches web, appeler votre fonction, puis effectuer 3 recherches supplémentaires après réception du résultat.
Contexte multi-tour avec stockage
Pour des workflows complexes qui s’étalent sur plusieurs interactions, combinez le stockage et le chaînage :
# Tour 1 : recherche initiale
r1 = client.responses.create(
model="grok-4.20-reasoning",
input="Analyse les tendances du marché de l'IA.",
tools=[{"type": "web_search"}, {"type": "code_interpreter"}],
store=True,
max_turns=5
)
# Tour 2 : approfondir avec vos données internes
r2 = client.responses.create(
model="grok-4.20-reasoning",
input="Compare avec nos données internes.",
tools=[{
"type": "function",
"name": "query_internal_db",
"description": "Interroge la base de données interne",
"parameters": {"type": "object", "properties": {"query": {"type": "string"}}}
}],
previous_response_id=r1.id,
store=True
)
Points clés à retenir
- Combinez outils serveur et fonctions client dans une même requête pour des workflows hybrides
- Les outils serveur s’exécutent automatiquement, les fonctions client mettent en pause la génération
max_turnsse réinitialise après chaque aller-retour client- Les patterns courants : recherche + action, calcul + notification, agrégation multi-sources
- Utilisez
store: trueetprevious_response_idpour des workflows multi-tour