JSON Schema na tool dla LLM: OpenAI, Claude, Gemini
Robisz aplikację, w której bot może uruchomić Twoją funkcję (np. sprawdzić pogodę, zapisać coś do bazy, wysłać maila). To się fachowo nazywa function calling (u OpenAI i Google) albo tool use (u Anthropic). Żeby bot wiedział, co i jak wywołać, opisujesz funkcję w JSON Schema, to po prostu format opisu, który bot rozumie: *„tak się funkcja nazywa, takie są jej argumenty, takich typów wymaga"*.
Problem: każdy provider trzyma się własnego formatu. OpenAI opakowuje schemat w `{ type: "function", function: {...} }`. Anthropic używa pola `input_schema` zamiast `parameters`. Google Gemini wpycha wszystko w `functionDeclarations` array. Ten sam koncept, trzy różne składnie.
Wklejasz swój JSON Schema raz, dostajesz gotowe definicje dla wszystkich trzech. Plus gotowy snippet TypeScript z wywołaniem API (`chat.completions.create`, `messages.create`, `generateContent`), wklejasz w swój kod i działa.
Jak używać
- Wklej JSON Schema swojej funkcji. Musi mieć trzy pola: `name` (nazwa), `description` (co robi) i `parameters` (jakie argumenty przyjmuje).
- Walidator sprawdza schemat na bieżąco. Zielone OK = wszystko gra, czerwony błąd = pokażemy konkretnie, co jest nie tak.
- Wybierz target provider: OpenAI, Anthropic albo Gemini.
- Przełącznik JSON only / Code sample: pierwsza opcja daje sam schemat, druga: gotowy snippet TypeScript z wywołaniem API.
- Skopiuj wynik. Wklej do swojego kodu, do curla, do Postmana, gdzie potrzebujesz.
Kiedy się przydaje
Sześć typowych sytuacji, w których konwerter daje Ci konkretną przewagę:
- Migracja z OpenAI na Claude (albo na Gemini). Masz aplikację z 50 funkcjami opisanymi pod GPT-4o, klient chce przejść na Claude'a. Zamiast przepisywać każdy schemat ręcznie (i robić literówki), wklejasz po kolei do tego konwertera i masz gotowe.
- Aplikacja używa kilku modeli na raz. Tańszy model do prostych zadań, droższy do trudnych. Każdy potrzebuje schematu w swoim formacie. Jedno źródło prawdy (Twój JSON Schema) → trzy spójne wersje na wyjściu.
- Junior dev uczy się function calling. Czytanie trzech różnych dokumentacji to godzina zmarnowanego czasu. Tutaj widzisz od razu: *„tak to wygląda u OpenAI, tak u Claude'a, tak u Gemini"*. Pięć minut i rozumiesz różnice.
- Szybki prototyp. Testujesz pomysł na funkcję. Najpierw OpenAI (taniej, szybciej), działa? Konwertujesz na Claude'a (lepsza jakość przy bardziej skomplikowanych zapytaniach). Bez przepisywania od zera.
- Dokumentujesz API klientowi. Masz publiczne API i chcesz, żeby klienci mogli podpiąć je pod LLM-a. Generujesz trzy wersje (OpenAI, Anthropic, Gemini) i wkładasz do dokumentacji, niech wybierają.
- *„Mój bot nie wywołuje funkcji"*. Częsty problem juniora. Powód numer jeden: błąd w schemacie (literówka w `type`, niepoprawne zagnieżdżenie, brakujące pole). Walidator tutaj wskaże problem od razu, zanim wyślesz request do API i zapłacisz za błąd.