Outils serveur et function calling
Sur cette page
Cours révisé le 2 novembre 2026 d’après la documentation de xAI : la remise batch est de 20 % sur les modèles texte éligibles (et non 50 %), les exemples suivent l’API REST et le SDK officiel
xai-sdk(client.batch.*; l’API Batch de xAI n’a pas le format de celle d’OpenAI, le SDK OpenAI ne s’y applique pas), et l’API Responses passe avant Chat Completions, endpoint hérité chez xAI. Sources : Batch API · Référence REST · Tarifs batch.
Enrichir les batchs avec des outils
Les requêtes batch ne sont pas limitées à du texte brut. Les outils serveur et le function calling fonctionnent aussi en mode asynchrone, avec une différence de nature qu’il faut avoir en tête : les premiers sont exécutés par xAI pendant le traitement, le second vous rend la main.
Outils côté serveur
Les outils serveur s’exécutent pendant le traitement du batch, exactement comme en temps réel : Grok appelle l’outil, reçoit le résultat, l’intègre à son raisonnement, et le batch vous rend la réponse finale. Ils s’emploient avec l’API Responses.
Recherche web
{"custom_id": "news-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Quels sont les derniers développements en informatique quantique ?"}], "tools": [{"type": "web_search"}]}}
En mode batch, la recherche web sert l’enrichissement de données : vérifier des informations, collecter des faits récents, comparer des fiches avec les sources en ligne.
Recherche X
L’outil x_search interroge les publications de X, utile pour suivre l’opinion sur un sujet ou une marque :
{"custom_id": "x-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Quel est le sentiment dominant sur X à propos du lancement de ce produit ?"}], "tools": [{"type": "x_search"}]}}
Exécution de code
Grok peut écrire et exécuter du code Python dans un environnement isolé. Dans l’API Responses, l’outil s’appelle code_interpreter (le SDK xAI le nomme code_execution) :
{"custom_id": "calc-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Calcule la moyenne mobile sur 3 points de ces données : [12, 15, 18, 14, 22, 19, 25, 28, 30, 27]"}], "tools": [{"type": "code_interpreter"}]}}
L’exécution de code est pertinente pour les calculs exacts, les statistiques et les transformations de données, que le modèle réussirait moins sûrement de tête.
Serveurs MCP distants
L’outil mcp connecte Grok à un serveur MCP distant, décrit dans la requête elle-même : aucune configuration préalable du compte n’est nécessaire. server_url et server_label sont obligatoires ; allowed_tools restreint les outils exposés, et authorization transmet un jeton au serveur. Seuls les transports Streamable HTTP et SSE sont acceptés.
{"custom_id": "mcp-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Que fait le dépôt xai-sdk-python ?"}], "tools": [{"type": "mcp", "server_label": "deepwiki", "server_url": "https://mcp.deepwiki.com/mcp"}]}}
Sans allowed_tools, toutes les définitions d’outils du serveur sont injectées dans le contexte du modèle, et facturées comme des tokens d’entrée à chaque requête du lot : sur 50 000 requêtes, restreindre la liste paie vite.
Function calling côté client
Le function calling est un outil côté client : Grok produit un appel de fonction structuré, mais c’est votre code qui l’exécute. En batch, le modèle vous rend ces appels dans ses résultats, à traiter hors ligne.
Définition des fonctions
Dans l’API Responses, la fonction se déclare à plat, name, description et parameters au premier niveau. tool_choice: "required" oblige le modèle à appeler au moins un outil, ce qui convient à l’extraction :
{"custom_id": "extract-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Extrais le contact : Jean Dupont, 01 23 45 67 89, [email protected]"}], "tools": [{"type": "function", "name": "enregistrer_contact", "description": "Enregistre un contact extrait du texte", "parameters": {"type": "object", "properties": {"nom": {"type": "string"}, "telephone": {"type": "string"}, "email": {"type": "string"}}, "required": ["nom"]}}], "tool_choice": "required"}}
Traitement des résultats
Avec le SDK, les appels de fonction se lisent dans tool_calls de chaque résultat réussi :
import json
for r in page.succeeded:
for appel in r.response.tool_calls:
if appel.function.name == "enregistrer_contact":
contact = json.loads(appel.function.arguments)
enregistrer_en_base(r.batch_request_id, contact)
Le function calling en batch est idéal pour l’extraction structurée : vous définissez le schéma des données, Grok lit les documents et produit les appels, puis vous les traitez en masse.
Combinaison d’outils
Vous pouvez combiner plusieurs outils serveur dans une même requête :
{"custom_id": "multi-1", "method": "POST", "url": "/v1/responses", "body": {"model": "grok-4.3", "input": [{"role": "user", "content": "Trouve le cours de clôture du Bitcoin sur les sept derniers jours et calcule sa variation"}], "tools": [{"type": "web_search"}, {"type": "code_interpreter"}]}}
Grok emploie les outils dans l’ordre qu’il juge pertinent : ici, la recherche web pour obtenir les données, puis l’exécution de code pour le calcul.
Limites des outils en batch
- Les outils serveur allongent le traitement de chaque requête, donc du batch
- Les requêtes avec recherche dépendent de ce que les sources publient au moment du traitement, pas de la soumission
- Le function calling ne fait qu’un aller-retour par requête : pour poursuivre, soumettez une nouvelle requête batch qui contient la conversation et les résultats de vos fonctions
- Les définitions d’outils MCP non filtrées alourdissent chaque requête
Points clés à retenir
- Les outils serveur (web, X, code, MCP) sont exécutés par xAI pendant le traitement, via l’API Responses
- Un serveur MCP se décrit dans la requête (
server_url,server_label), sans configuration préalable - Le function calling rend des appels structurés que vous exécutez côté client
- Un échange en plusieurs tours exige une nouvelle requête batch par tour
- Restreignez les outils exposés pour ne pas payer leurs définitions sur chaque requête