Le function calling (aussi appelé « tool use ») permet à un LLM d'invoquer des fonctions de votre code en générant un JSON conforme à un schéma défini. Concrètement : vous déclarez une fonction `creer_devis(client_id, montant, produits)` avec son schéma JSON, le modèle décide quand l'appeler en fonction de la conversation, génère les arguments, votre code l'exécute, vous renvoyez le résultat au modèle qui continue la conversation. C'est la brique qui transforme un chatbot qui répond en agent IA qui agit.
Tous les grands LLM le supportent en 2026 : Claude (tools), OpenAI (function calling), Mistral, Gemini. Les patterns clés pour que ça marche en production : descriptions de fonctions claires (le modèle choisit la bonne fonction sur la base de la description), schémas JSON stricts (avec required, enum, types précis), gestion des erreurs (renvoyer un message d'erreur structuré au modèle qui peut alors réessayer), et limite explicite du nombre d'appels en boucle pour éviter qu'un agent parte en vrille. Le protocole MCP standardise par-dessus pour rendre les outils portables d'un modèle à l'autre.
Les usages business directs : un agent qui lit votre CRM, qualifie un lead entrant, crée une opportunité, envoie un email, met à jour un statut. Ou qui interroge votre ERP pour vérifier un stock avant de répondre à un client. Ou qui appelle des outils de vérification de faits pour réduire les hallucinations. C'est aussi la fondation technique sur laquelle on construit un agent IA sur-mesure — bien plus fiable qu'un chatbot pur car le modèle ne « sait » pas le résultat, il le lit depuis votre système réel.
Bonnes pratiques function calling en production
- Description de fonction explicite : « utilise cette fonction quand le client demande X, ne pas utiliser pour Y ».
- JSON schema strict avec types, enums, required — moins de surface d'erreur côté validation.
- Renvoyer les erreurs au modèle de façon structurée pour qu'il puisse corriger et réessayer.
- Limiter le nombre d'appels en boucle (typiquement 5-10) et logger toute la trace pour debug.
