Powrót do bloga

Rozwiązywanie problemówPrzewodnik

Błąd 400 w Claude API przy temperature, top_p, top_k: jak go naprawić

Twoje żądanie do Claude zaczęło zwracać 400 na wersji API 2026-10-21? Usuń temperature, top_p i top_k albo przypnij starą wersję. Kroki w środku.

Autor: CheapTokens TeamOpublikowano 4 min czytania

Karta w stylu terminala: błąd 400 dla temperature, top_p i top_k w Claude API
Na tej stronie
  1. Jak wygląda nieudane żądanie
  2. Poprawka: usuń trzy parametry
  3. Czy odpowiedzi zmienią się po ich usunięciu?
  4. Szybka lista kontrolna, gdy widzisz błąd 400
  5. Jedna ścieżka kodu dla Claude i API w stylu OpenAI

Twoje żądanie do Claude działało wczoraj, przeniosłeś je na wersję API 2026-10-21 (nagłówek anthropic-version lub wydanie SDK dla niej zbudowane) i teraz wraca z kodem 400. Spójrz na treść żądania: jeśli zawiera temperature, top_p lub top_k, to jest przyczyna. Usuń te trzy pola, a żądanie przejdzie.

Zgodnie z przewodnikiem migracji Anthropic dla wersji 2026-10-21 (https://platform.claude.com/docs/en/api/migration-2026-10-21, sprawdzone 24 października 2026), żądanie Messages lub Message Batches, które wysyła którykolwiek z tych trzech, zwraca błąd 400. Dzieje się tak nawet wtedy, gdy wartość jest domyślna dla danego parametru. Szukaj statusu 400 i tych nazw pól w swoim żądaniu.

Jak wygląda nieudane żądanie#

Załóżmy, że masz mały skrypt, który prosi Claude o podsumowanie zgłoszenia i utrzymuje odpowiedź stabilną dzięki niskiej temperaturze:

python
import anthropic

client = anthropic.Anthropic()

reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    temperature=0.2,  # <- this line now causes the 400
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)

To samo przez zwykły HTTP. Jeśli sam ustawiasz nagłówek wersji, to jest linia, która przenosi cię na nowe zachowanie:

bash
curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2026-10-21" \
  -H "content-type: application/json" \
  -d '{"model": "<your Claude model>", "max_tokens": 500, "top_p": 0.9,
       "messages": [{"role": "user", "content": "Hello"}]}'

Poprawka: usuń trzy parametry#

Usuń temperature, top_p i top_k z każdego żądania Messages i Message Batches. Bez nich model próbkuje z wartościami domyślnymi (temperatura 1.0), dokładnie tak, jak robiło to żądanie z 2023-06-01, które je pomija.

python
reply = client.messages.create(
    model="<your Claude model>",
    max_tokens=500,
    messages=[{"role": "user", "content": "Summarise this ticket in two lines: ..."}],
)
Przed i po: żądanie z temperature zwraca 400, to samo żądanie bez niego przechodzi
To samo żądanie przed i po usunięciu temperature

Najnowsze główne wersje SDK i CLI ant (2.0.0) nie mają już tych parametrów w ogóle, więc po aktualizacji musisz usunąć je ze swojego kodu. Błąd 400 pochodzi z żądań, które wychodzą z anthropic-version: 2026-10-21 i nadal niosą jedno z tych trzech pól. Adaptery .NET IChatClient obierają łagodniejszą drogę: teraz ignorują ChatOptions.Temperature, TopK i TopP. Dokładne numery wersji SDK dla każdego języka znajdują się w zakładkach kroków aktualizacji w przewodniku.

Jeśli wywołujesz API bez SDK, wersją jest nagłówek anthropic-version, a 2026-10-21 to wartość, która włącza nową regułę.

Czy odpowiedzi zmienią się po ich usunięciu?#

To zależy od modelu, a przewodnik jest tu konkretny.

  • Claude 4.7 i nowsze już przyjmują tylko domyślne wartości próbkowania. Nic się dla ciebie nie zmienia: próbkowały z wartościami domyślnymi wcześniej i robią to nadal.
  • Modele, które przyjmują inne wartości, takie jak Claude Sonnet 4.6: jeśli obniżyłeś temperature, aby uzyskać bardziej spójne wyniki, ten efekt znika i żadne inne ustawienie go nie zastąpi.

Jeśli konkretne żądanie naprawdę opiera się na wartości innej niż domyślna, masz dwie opcje z przewodnika: przestać wysyłać parametr i zaakceptować domyślne próbkowanie albo pozostawić to jedno żądanie na anthropic-version: 2023-06-01.

Jeśli twoje odpowiedzi muszą być ściśle spójne, przenieś spójność do promptu: stały format wyjściowy, krótki przykład odpowiedzi, której oczekujesz, oraz sprawdzenie w kodzie, które odrzuca wszystko poza formatem. To więcej pracy niż jedna liczba, ale nie zależy od pokrętła próbkowania.

Szybka lista kontrolna, gdy widzisz błąd 400#

  1. Przeszukaj projekt pod kątem temperature, top_p, top_k, w tym wrapperów i współdzielonych plików konfiguracyjnych.
  2. Sprawdź zadania wsadowe: reguła dotyczy każdego żądania wewnątrz Message Batch utworzonego z 2026-10-21, więc sprawdź parametry każdego żądania w partii.
  3. Sprawdź, co się zmieniło: główna wersja SDK, wersja CLI lub nagłówek anthropic-version.
  4. Usuń pola albo przypnij to żądanie do 2023-06-01, jeśli potrzebuje wartości innej niż domyślna.
  5. Uruchom jedno żądanie, zanim ponownie uruchomisz dużą partię.

Jedna ścieżka kodu dla Claude i API w stylu OpenAI#

Częsta konfiguracja: pojedynczy helper, który buduje żądanie i wysyła je albo do Anthropic Messages, albo do endpointu Chat Completions w stylu OpenAI. Najprostsza poprawka to rozdzielenie parametrów. Zachowaj temperature tylko w gałęzi w stylu OpenAI i nie dodawaj go do gałęzi Messages.

W formacie Chat Completions to ustawienie jest zwykłym polem żądania. W CheapTokens działa przez adres zgodny z OpenAI https://api.cheaptokens.dev/v1. Oto żądanie do DeepSeek-V4-Flash (kontekst 380K, do 32 768 tokenów wyjściowych na odpowiedź), z pełnym identyfikatorem modelu z dokumentacji CheapTokens:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-ai/DeepSeek-V4-Flash-0731",
    "temperature": 0.2,
    "max_tokens": 300,
    "messages": [{"role": "user", "content": "Summarise this ticket in two lines: ..."}]
  }'

Takie żądanie, z 1000 tokenów wejściowych i 300 tokenów wyjściowych, kosztuje $0.000045 przy obecnej cenie. DeepSeek-V4-Flash ma jedną cenę o każdej porze dnia, bez godzin szczytu, a jedno saldo obejmuje wszystkie modele. Dla tej samej ścieżki kodu z oknem kontekstu 390K jest też GLM-5.3-Flash (zai-org/GLM-5.3-Flash, do 8192 tokenów wyjściowych). Aktualne ceny wszystkich modeli znajdują się na stronie z cennikiem.

Aby zobaczyć, jak zachowuje się to ustawienie, przeczytaj System prompt i temperature: co robią i jak je ustawić. Aby wywoływać Messages w formacie Claude z Pythona, zobacz Anthropic Python SDK z CheapTokens. Konfiguracja adresu bazowego i klucza znajduje się w dokumentacji CheapTokens.