JSON Schema vers définition d'outil LLM : OpenAI, Claude, Gemini
Tu construis une appli où le bot peut exécuter ta fonction (vérifier la météo, sauvegarder quelque chose en base, envoyer un e-mail). Le nom officiel c'est function calling (OpenAI et Google) ou tool use (Anthropic). Pour dire au bot ce qu'il peut appeler, tu décris chaque fonction en JSON Schema, un format que le bot comprend : *« voici le nom de la fonction, voici ses arguments, voici les types requis »*.
Le problème : chaque provider colle à son propre format. OpenAI emballe le schema dans `{ type: "function", function: {...} }`. Anthropic utilise `input_schema` au lieu de `parameters`. Google Gemini fourre tout dans un array `functionDeclarations`. Même concept, trois syntaxes différentes.
Colle ton JSON Schema une fois, obtiens des définitions prêtes pour les trois providers. Plus un snippet TypeScript prêt avec l'appel API (`chat.completions.create`, `messages.create`, `generateContent`), dépose-le dans ton code et c'est fini.
Comment l'utiliser
- Colle le JSON Schema de ta fonction. Besoin de trois champs : `name` (le nom), `description` (ce qu'elle fait) et `parameters` (quels arguments elle prend).
- Le validateur vérifie le schema au fur et à mesure. OK vert = tout bon, erreur rouge = on pointe exactement ce qui ne va pas.
- Choisis le provider cible : OpenAI, Anthropic ou Gemini.
- Bascule JSON only / Code sample : le premier te donne le schema brut, le second un snippet TypeScript prêt avec l'appel API.
- Copie le résultat. Colle dans ton code, dans curl, dans Postman, où tu en as besoin.
Quand c'est utile
Six situations typiques où ce convertisseur te donne un avantage concret :
- Migration d'OpenAI vers Claude (ou Gemini). Ton appli a 50 fonctions définies pour GPT-4o, le client veut passer à Claude. Au lieu de réécrire chaque schema à la main (et faire des fautes de frappe), tu les colles dans le convertisseur un par un et c'est fini.
- Appli qui utilise plusieurs modèles en même temps. Un modèle pas cher pour les tâches faciles, un plus cher pour les dures. Chacun a besoin du schema dans son propre format. Une source de vérité (ton JSON Schema) → trois versions cohérentes en sortie.
- Dev junior qui apprend le function calling. Lire trois sets de docs prend une heure que tu n'as pas. Ici tu vois immédiatement : *« voici à quoi ça ressemble pour OpenAI, voici pour Claude, voici pour Gemini »*. Cinq minutes et tu comprends les différences.
- Prototype rapide. Tester une idée de fonction. Démarre avec OpenAI (moins cher, plus rapide), ça marche ? Convertis pour Claude (meilleure qualité sur les requêtes plus complexes). Pas besoin de réécrire depuis zéro.
- Documenter une API pour clients. Tu as une API publique et tu veux que les clients puissent la brancher à un LLM. Tu génères trois versions (OpenAI, Anthropic, Gemini) et tu les mets dans ta doc, laisse les clients prendre celle qui leur va.
- *« Mon bot ne veut pas appeler ma fonction »*. Problème de junior classique. Raison numéro un : un bug dans le schema (faute de frappe dans `type`, mauvaise imbrication, champ manquant). Le validateur ici le signale immédiatement, avant que tu envoies une requête à l'API et paies pour un appel cassé.