Strona główna → Pomoc

400 przy wywołaniu narzędzia – każde tool_use potrzebuje pasującego tool_result

Każdy blok tool_use w wiadomości asystenta musi dostać odpowiedź w postaci bloku tool_result z tym samym id – w bezpośrednio następnej wiadomości użytkownika, przed jakąkolwiek inną treścią. Pomiń jeden z kilku, zmień kolejność albo wstaw najpierw tekst, a następne żądanie zostanie odrzucone.

Co widzisz

Dlaczego tak się dzieje

Rozmowa jest odtwarzana w całości przy każdym wywołaniu, więc API za każdym razem waliduje całą strukturę – łącznie z turami, które wcześniej przeszły. Dlatego błąd wskazuje na starszą wiadomość niż ta, którą właśnie wysłałeś.

Zwykłym wyzwalaczem są równoległe wywołania narzędzi. Model może wygenerować kilka bloków tool_use w jednej turze, a kod obsługi napisany pod jedno wywołanie odpowiada na pierwszy i gubi resztę.

Nieudane narzędzie to też wynik. Pominięcie bloku, bo twoja funkcja rzuciła wyjątek, to dokładnie ten kształt, który API odrzuca – zamiast tego zwróć tool_result z treścią błędu.

Jak to naprawić

  1. Odpowiadaj na każde id, po koleiZbierz id tool_use z tury asystenta, uruchom je i na początku następnej wiadomości użytkownika wyślij po jednym tool_result na każde id, w tej samej kolejności.
  2. Zwracaj błędy jako wynikiGdy narzędzie rzuci wyjątek, wyślij tool_result z komunikatem błędu jako treścią. Model dobrze sobie z tym radzi; z brakującym blokiem – nie.
  3. Tekst umieszczaj po wynikachJeśli chcesz dodać notatkę użytkownika w tej samej turze, umieść ją po wszystkich blokach tool_result, nigdy przed nimi.
Ruch związany z wywołaniami narzędzi jest w APICLAN naliczany jak zwykłe tokeny wejściowe i wyjściowe. Odrzucone żądanie nigdy się nie wykonuje, więc nie jest naliczane – ale ponowienie już tak, dlatego naprawa parowania jest lepsza niż obchodzenie go ponowieniami.

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.