CCAR-F› 2. Projektowanie narzędzi i integracja MCP›Lekcja 2.1 CCAR-03

Definicja narzędzia: co dokładnie widzi model

Po tej lekcji wiesz, z czego składa się definicja narzędzia, co z niej widzi model i jak zaprojektować wejście oraz wynik tak, żeby model je rozumiał.

~7 min czytania4 pojęcia1 schemat4 pytaniasprawdzone ze źródłami 2 lis 2026
Źródła (2)

W jednej minucie

Definicja

Definicja narzędzia to obiekt, który opisuje narzędzie modelowi: ma nazwę, opis i schemat wejścia, a opcjonalnie przykłady wywołań. Wysyłasz ją w parametrze tools żądania1.

Ważne

Nasza rekomendacja: zapisz w definicji wszystko, co model musi wiedzieć o narzędziu. API składa prompt systemowy m.in. z Twoich definicji1.

Zapamiętaj

Opis (description) to najważniejsze pole definicji1.

Z czego składa się definicja

Definicja narzędzia to mały obiekt JSON z kilkoma polami.

PoleCo zawieraStatus
nameNazwa narzędzia. Musi pasować do wyrażenia ^[a-zA-Z0-9_-]{1,128}$1w definicji
descriptionOpis: co narzędzie robi, kiedy go użyć i jak się zachowuje1w definicji
input_schemaObiekt JSON Schema z oczekiwanymi parametrami1w definicji
input_examplesPrzykładowe wejścia, które pokazują, jak użyć narzędzia1opcjonalne

Podział na pola podstawowe i opcjonalne wynika z listy w dokumentacji.

Co dostaje model

Definicje trafiają do modelu w prompcie systemowym, który składa API.

Twoje definicjename, description, input_schema
API składa z nich prompt systemowy1
Żądanie do modelu
Definicje narzędzizapisane jako JSON Schema
Konfiguracja narzędziustawienia z żądania
Twój prompt systemowyjeśli go podajesz

Umowa z agentem

Narzędzie łączy system deterministyczny z agentem, który działa niedeterministycznie2.

Z praktyki

Skoro model widzi tylko definicję, formaty, zakresy i wyjątki znane z kodu zapisz w opisie i schemacie.

Schemat wejścia

Schemat mówi, jakie argumenty model może przekazać do narzędzia.

{
  "name": "get_weather",
  "description": "Get the current weather in a given location",
  "input_schema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "The city and state, e.g. San Francisco, CA"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"],
        "description": "The unit of temperature, either 'celsius' or 'fahrenheit'"
      }
    },
    "required": ["location"]
  }
}

To narzędzie oczekuje obiektu z wymaganym tekstem location i opcjonalnym unit, który może być tylko celsius albo fahrenheit1.

Każdy parametr ma własny opis. Parametr location pokazuje oczekiwany format na przykładzie1.

Zapamiętaj

Nazywaj parametry jednoznacznie: user_id, nie user2.

Przykłady wejścia

Gdy wejście jest złożone, dodaj do definicji input_examples.

Dokumentacja wskazuje je dla narzędzi ze złożonym wejściem, zagnieżdżonymi obiektami i parametrami wrażliwymi na format1.

"input_examples": [
  { "location": "San Francisco, CA",
    "unit": "fahrenheit" },
  { "location": "Tokyo, Japan",
    "unit": "celsius" },
  { "location": "New York, NY" }
]

Przykłady zwiększają prompt: o ok. 20–50 tokenów przy prostych i 100–200 przy złożonych obiektach1. Nie działają w narzędziach serwerowych, np. w wyszukiwarce1.

Uwaga — przykład niezgodny ze schematem

Każdy przykład musi pasować do input_schema. Przykład, który mu przeczy, kończy się błędem 400 z API1.

Co zwraca narzędzie

Definicja opisuje wejście, ale wynik wraca do modelu jako tool_result, więc jego kształt też projektujesz.

Dokumentacja radzi zwracać tylko informacje o wysokim sygnale1, czyli odpowiedź wysokosygnałową: tylko pola, których model potrzebuje do następnego kroku1. Zbędne dane marnują kontekst i utrudniają modelowi znalezienie tego, co ważne1.

Anthropic zaleca też unikać niskopoziomowych identyfikatorów, takich jak uuid czy mime_type2.

{
  "user_id": "a8f3c2e1-9d4b",
  "name": "Jane Kowalska",
  "channel_id": "C04N7XQ2L",
  "thread_ts": "1730450000.1234",
  "mime_type": "text/plain",
  "text": "Spotkanie w czwartek"
}
{
  "name": "Jane Kowalska",
  "channel": "#projekt-acme",
  "text": "Spotkanie w czwartek"
}

Gdy agent czasem potrzebuje identyfikatorów, możesz dać mu parametr response_format, którym wybiera odpowiedź „concise” albo „detailed”2.

Z praktyki

Oba JSON-y powyżej są poglądowe. Wymyśliliśmy je, żeby pokazać różnicę, i nie pochodzą z dokumentacji.

Częste błędy

Większość problemów z definicją narzędzia wynika z czterech rzeczy.

BłądSkutekCo zrobić
Nazwa spoza regułyNazwa musi pasować do ^[a-zA-Z0-9_-]{1,128}$1Używaj liter, cyfr, _ i -
Przykład niezgodny ze schematemBłąd 400 z API1Sprawdzaj przykłady po każdej zmianie schematu
Parametr user zamiast user_idWejście jest niejednoznaczne2Nazywaj parametr tym, czym jest
Wynik pełen pól technicznychMarnuje kontekst modelu1Zwracaj tylko pola potrzebne do następnego kroku

Kolumna „Co zrobić” to nasza rada, nie cytat z dokumentacji.

Pytania sprawdzające

Jakie pola ma definicja narzędzia i które z nich jest opcjonalne?

name, description i input_schema opisują narzędzie. input_examples jest opcjonalne i pokazuje poprawne wywołania.

Dlaczego wszystko, co wiesz o narzędziu, warto zapisać w jego definicji?

Bo model dostaje narzędzia w prompcie systemowym, który API składa z definicji. Czego w nich nie ma, tego model nie wie.

Dodajesz input_examples z przykładem, który nie pasuje do schematu. Co się stanie?

API zwróci błąd 400. Każdy przykład musi być zgodny z input_schema.

Narzędzie zwraca uuid, mime_type i trzy inne pola techniczne. Co poprawisz?

Zwrócisz tylko pola potrzebne do następnego kroku, np. name zamiast uuid. Jeśli agent potrzebuje identyfikatorów, dodasz parametr response_format.

Podsumowanie

  • Definicja narzędzia to name, description, input_schema i opcjonalnie input_examples.
  • Model dostaje definicje w prompcie systemowym, który składa API.
  • input_schema opisuje parametry, a każdy parametr dostaje własny, jednoznaczny opis.
  • input_examples pokazują format wejścia, ale muszą pasować do schematu i kosztują tokeny.
  • Wynik narzędzia też projektujesz: zwracaj tylko pola potrzebne do następnego kroku.

Źródła

  1. Define tools — Claude Docssprawdzone 2026-11-02
  2. Writing effective tools for AI agents — Anthropic Engineeringsprawdzone 2026-11-02