Что такое max_tokens
max_tokens — обязательный параметр: верхний предел того, сколько токенов модель сгенерирует в ответе. Это не «сколько надо», а «не больше чем». Поставишь слишком мало — Claude не успеет договорить, и ответ оборвётся на полуслове.
Представь: ты просишь модель выгрузить 50 заказов в JSON, но ставишь max_tokens: 50. Ответ обрежется где-то на третьем заказе, JSON будет невалидным.
Как понять, что ответ оборвался
Смотри на поле stop_reason в ответе:
{
"content": [{"type": "text", "text": "[{\"id\": 1, \"sum\": ..."}],
"stop_reason": "max_tokens",
"usage": {"input_tokens": 120, "output_tokens": 50}
}
end_turn— модель закончила сама, всё в порядке.max_tokens— упёрлась в потолок, ответ неполный. Увеличьmax_tokensи повтори.
Сколько ставить
resp = client.messages.create(
model="claude-opus-4-8",
max_tokens=16000,
messages=[{"role": "user", "content": "Выгрузи заказы в JSON"}],
)
if resp.stop_reason == "max_tokens":
print("Ответ обрезан — нужно больше токенов")
Для обычных задач разумно ставить около 16000. Если ждёшь длинный ответ, переходи на стриминг и поднимай потолок (до 64000 и выше) — иначе долгий ответ упрётся в таймаут запроса.
Большой max_tokens сам по себе денег не стоит — платишь за реально сгенерированные output_tokens. Но и обрезанный ответ не бесплатен: токены до обрыва уже потрачены.