Strona główna → Pomoc

400 przy wymuszaniu wywołania narzędzia w modelu rozumującym

Ustaw tool_choice na auto i napisz w prompcie, kiedy narzędzie ma zastosowanie. W modelach, w których rozumowanie jest zawsze włączone, wymuszone wywołanie narzędzia musiałoby to rozumowanie pominąć, więc API odrzuca zapytanie, zamiast po cichu pogarszać model.

Co widzisz

Dlaczego tak się dzieje

Chęć wymuszenia narzędzia jest rozsądna. Tak wiele frameworków gwarantuje ustrukturyzowane wyjście: zdefiniuj jedno narzędzie, wymuś je, sparsuj argumenty. Ta sztuczka przestaje działać w modelach, które rozumują przed każdą odpowiedzią, bo wymuszona ścieżka omija krok, za który płacisz.

Odmowa jest lepsza niż alternatywa. API, które przyjęłoby parametr i go zignorowało, dałoby ci złudzenie, że ograniczyłeś model, choć tak nie jest – błąd, który wyszedłby dużo później, na produkcji, jako sporadyczne nieparsowalne wyjście.

Te same modele zwykle odrzucają też niedomyślne temperature, top_p i top_k oraz nie obsługują wstępnego wypełniania odpowiedzi asystenta. Kod przeniesiony ze starszego modelu tej samej rodziny trafia na kilka z nich naraz, przez co wygląda to na problem z uwierzytelnianiem lub endpointem, a nie z parametrami.

Sprawdź, czy to ta przyczyna

Wyślij to samo zapytanie dwa razy, zmieniając tylko tool_choice:

for CHOICE in '{"type":"auto"}' '{"type":"any"}'; do
  echo -n "$CHOICE -> "
  curl -s -o /dev/null -w '%{http_code}\n' \
    'YOUR_BASE_URL/chat/completions' \
    -H 'Authorization: Bearer YOUR_KEY' \
    -H 'Content-Type: application/json' \
    -d "{\"model\":\"YOUR_MODEL\",\"max_tokens\":16,
         \"messages\":[{\"role\":\"user\",\"content\":\"hi\"}],
         \"tool_choice\":$CHOICE}"
done

Jeśli auto zwraca 200, a any zwraca 400, model nie obsługuje wymuszonego użycia narzędzi. Z twoim kluczem i endpointem wszystko w porządku.

Jak to naprawić

  1. Zostaw tool_choice na auto i bądź jednoznaczny w prompcieSformułuj warunek wprost – „wywołaj search, gdy pytanie wymaga aktualnych informacji”. Modele rozumujące dobrze wykonują takie polecenia; po to są.
  2. Użyj odpowiedzi ograniczonej schematem zamiast wymuszonego narzędziaJeśli wymuszałeś narzędzie tylko po to, by dostać ustrukturyzowane wyjście, parametr structured output lub JSON schema robi to bezpośrednio i zwykle nadal jest obsługiwany.
  3. Przy okazji sprawdź temperatureFrameworki ustawiają domyślną temperaturę, której nigdy nie wybrałeś. W tych modelach każda niedomyślna wartość to 400, wyglądające identycznie jak błąd tool_choice.
  4. Waliduj wyjście zamiast ufać ograniczeniuNawet tam, gdzie wymuszanie działa, modele zwracają argumenty niezgodne ze schematem. Parser ze ścieżką awaryjną warto napisać raz.
W APICLAN dotyczy to claude-fable-5-1 i claude-fable-5: wymuszone użycie narzędzi, niedomyślne parametry próbkowania i prefill asystenta są odrzucane. Przewodnik po Fable 5.1 zawiera pełną listę razem z cenami cache.

Powiązane

Unexpected token '<' przy wywołaniu API zgodnego z OpenAI401 invalid API key – gdy klucz wygląda dobrze, a i tak nie działa

Ostatnio sprawdzono 2026-10-01. Napisane na podstawie problemów zdiagnozowanych na działającej bramce zgodnej z OpenAI, a nie zebrane z innych stron.