Mélange outils serveur et client
Deux catégories d’outils sur une même plateforme
L’API Grok distingue deux types d’outils fondamentalement différents dans leur exécution. Comprendre cette distinction est essentiel pour concevoir des architectures robustes.
Outils intégrés (côté serveur)
Ces outils sont exécutés automatiquement par xAI sur leurs serveurs. Vous n’avez rien à gérer — pas d’exécution locale, pas de renvoi de résultat. Le modèle les appelle et reçoit les résultats directement.
| Outil | Identifiant | Description |
|---|---|---|
| Web Search | web_search | Recherche sur le web en temps réel |
| X Search | x_search | Recherche sur X/Twitter |
| Code Interpreter | code_interpreter | Exécution Python sandboxée |
| Collections Search | collections_search | Recherche dans vos documents uploadés |
| Remote MCP | mcp | Connexion à des serveurs MCP externes |
Fonctions personnalisées (côté client)
Ce sont vos propres fonctions, définies via le function calling. Le modèle retourne un tool_call, votre code exécute la fonction, et vous renvoyez le résultat. C’est le mécanisme que vous avez appris dans les leçons précédentes.
Combiner les deux dans une même requête
La puissance de l’API Grok réside dans la possibilité de mélanger outils serveur et client dans une seule requête :
tools = [
# Outil serveur — exécuté automatiquement par xAI
{"type": "web_search"},
# Outil client — exécuté par votre code
{
"type": "function",
"function": {
"name": "save_to_database",
"description": "Sauvegarder une information dans la base de données",
"parameters": {
"type": "object",
"properties": {
"key": {"type": "string"},
"value": {"type": "string"}
},
"required": ["key", "value"]
}
}
}
]
Quand le modèle reçoit cette requête, il peut :
- Utiliser
web_searchpour trouver une information (exécution automatique côté serveur) - Appeler
save_to_databasepour sauvegarder le résultat (retour au client)
Le flux hybride
Le comportement diffère selon le type d’outil :
- Outil serveur : le modèle appelle l’outil, xAI l’exécute, le résultat est intégré automatiquement, le modèle continue
- Outil client : le modèle retourne le
tool_callau client, l’exécution s’arrête, et reprend quand vous renvoyez le résultat
Quand le modèle utilise les deux types dans la même requête, les outils serveur s’exécutent en premier (sans intervention de votre part). Puis, si le modèle a aussi besoin d’un outil client, il vous retourne le tool_call avec les résultats des outils serveur déjà intégrés dans son contexte.
Cas d’usage concrets
Recherche web + traitement métier
# L'utilisateur demande : "Trouve le cours du Bitcoin et enregistre-le"
# Le modèle :
# 1. Appelle web_search pour trouver le prix (côté serveur, automatique)
# 2. Appelle save_price(symbol="BTC", price=68432) (côté client)
Recherche X + notification
# "Alerte-moi des tweets sur notre produit depuis hier"
# Le modèle :
# 1. Appelle x_search pour trouver les tweets (côté serveur)
# 2. Appelle send_notification(count=12, summary="...") (côté client)
Code Interpreter + stockage
# "Calcule la moyenne de ces données et sauvegarde le résultat"
# Le modèle :
# 1. Appelle code_interpreter pour le calcul (côté serveur)
# 2. Appelle save_result(key="avg", value="42.5") (côté client)
Facturation des outils serveur
Les outils intégrés sont facturés de deux façons :
- Tokens : consommation standard (entrée + sortie)
- Invocations : coût fixe par appel d’outil
Le modèle peut appeler plusieurs outils serveur pour une seule requête — les coûts s’additionnent. Gardez cela à l’esprit quand vous activez web_search : le modèle pourrait effectuer plusieurs recherches pour affiner ses résultats.
Points clés à retenir
- Deux types d’outils : serveur (automatique) et client (function calling)
- Les outils serveur (
web_search,x_search,code_interpreter) s’exécutent sans votre intervention - Vous pouvez mélanger les deux types dans une même requête
- Les outils serveur s’exécutent en premier, puis le modèle peut appeler vos fonctions
- Chaque invocation d’outil serveur est facturée (tokens + coût par appel)
- Les citations sont automatiquement générées pour les données issues des outils serveur