Параметры генерации
Несколько чисел в запросе заметно меняют поведение модели. Разберём главные.
Параметры генерации управляют тем, насколько ответ случаен, как он длинен и когда обрывается.
temperature — случайность
Чем выше temperature (обычно 0–1), тем разнообразнее и креативнее ответы; чем ниже — тем более детерминированно и предсказуемо. Для извлечения данных, классификации, кода берут низкую температуру; для генерации текста, идей — выше.
| Задача | temperature |
| классификация, извлечение, факты | 0–0.3 |
| обычные ответы ассистента | 0.3–0.7 |
| творческий текст, варианты | 0.7–1.0 |
Важно: temperature = 0 снижает случайность, но не гарантирует побитово одинаковый ответ. Полной воспроизводимости у LLM нет.
max_tokens — потолок длины ответа
Ограничивает, сколько токенов модель может сгенерировать. Если ответ упёрся в потолок, он обрывается на полуслове, а stop_reason будет max_tokens. Ставьте с запасом под ожидаемую длину, но не гигантский — это влияет на латентность и стоимость.
top_p — отсечение по вероятности (nucleus sampling)
Альтернативный способ управлять случайностью: модель выбирает из самых вероятных токенов, чья суммарная вероятность не превышает top_p. Обычно крутят либо temperature, либо top_p, а не оба сразу.
stop — стоп-последовательности
Список строк, при появлении которых генерация немедленно прекращается (сама строка в ответ не попадает). Удобно, чтобы модель не вылезала за нужный формат: например, остановиться на "\n\n" или на маркере конца секции.
response = client.messages.create(
model="claude-opus-4-8",
max_tokens=200,
temperature=0.2, # мало случайности — для фактов
stop_sequences=["END"], # оборвать на слове END
messages=[{"role": "user", "content": "Перечисли 3 факта о Луне, затем напиши END."}],
)
Сборка messages-массива с параметрами (запускаемо)
Параметры — это просто поля тела запроса. Соберём такое тело как dict и посмотрим на него (чистый Python):
import json
def build_request(user_text, temperature=0.7, max_tokens=512, stop=None):
body = {
"model": "claude-opus-4-8",
"max_tokens": max_tokens,
"temperature": temperature,
"messages": [{"role": "user", "content": user_text}],
}
if stop:
body["stop_sequences"] = stop
return body
req = build_request("Придумай слоган", temperature=0.9, max_tokens=64, stop=["\n"])
print(json.dumps(req, ensure_ascii=False, indent=2))
Вывод:
{
"model": "claude-opus-4-8",
"max_tokens": 64,
"temperature": 0.9,
"messages": [
{
"role": "user",
"content": "Придумай слоган"
}
],
"stop_sequences": [
"\n"
]
}
Итог
temperature/top_p— случайность; для фактов низкая, для творчества высокая (крутят что-то одно).max_tokens— потолок длины; упёрлись — ответ обрывается,stop_reason = max_tokens.stop— строки, на которых генерация прекращается.