Model nie widzi twojego kodu. Widzi opis — kilkadziesiąt słów, na podstawie których decyduje, czy sięgnąć po to narzędzie i jakie podać argumenty. Ten opis jest promptem, choć prawie nikt go tak nie traktuje.
Z czego składa się definicja
Nazwa funkcji, opis słowny, schemat parametrów z typami i opisami poszczególnych pól, oraz informacja, które pola są wymagane. Całość trafia do kontekstu przy każdym obrocie pętli — jest więc jednocześnie instrukcją dla modelu i stałą pozycją w rachunku.
Opis jest promptem
Wybór narzędzia to zwykła predykcja kolejnego tokenu, oparta na tym, co model przeczytał. Opis nieprecyzyjny albo zbyt ogólny prowadzi do wyboru złego narzędzia, a opis pomijający warunki brzegowe — do argumentów w złym formacie.
Trzy rzeczy dają najwięcej: napisanie wprost, kiedy narzędzia użyć, a kiedy nie; podanie formatu argumentu w opisie pola, jeśli jest nieoczywisty, na przykład format daty czy identyfikatora; oraz nazwy mówiące, co narzędzie robi, zamiast odzwierciedlające wewnętrzną strukturę kodu.
Nazwa i schemat są też powierzchnią ataku
Definicje narzędzi pochodzące z zewnętrznych źródeł — na przykład z cudzego serwera MCP — trafiają do kontekstu razem z opisem, który napisał ktoś inny. Opis może zawierać instrukcje skierowane do modelu. Definicje z niezaufanych źródeł należy traktować jak każdą inną treść zewnętrzną.
Praktyka
Definicję warto testować tak samo jak prompt: zmieniać opis i mierzyć, czy model wybiera właściwe narzędzie na zestawie realnych zapytań. To najtańsza optymalizacja agenta, bo nie wymaga zmiany ani jednej linii kodu wykonawczego.