Выбираем модель
В messages.create есть параметр model, и рано или поздно кто-то спросит: «А почему у нас везде Opus, давайте поставим что подешевле». В этом уроке разберём, какие модели есть, чем они различаются по назначению, где смотреть их актуальные характеристики и как принимать решение на основе измерений, а не ощущений.
Семейство моделей
Модели Claude делятся на уровни. На момент написания курса актуальны такие.
| Модель | Идентификатор | Назначение |
|---|---|---|
| Claude Fable 5.1 | claude-fable-5-1 |
Самая способная из общедоступных: сложнейшие рассуждения, долгие агентные задачи. Отличается по поведению API от семейства Opus |
| Claude Opus 5 | claude-opus-5 |
Основная рабочая модель: агентная разработка, глубокий анализ, длинные сценарии. Модель по умолчанию в этом курсе |
| Claude Opus 4.8 / 4.7 / 4.6 | claude-opus-4-8 и т. д. |
Предыдущие поколения Opus; актуальны для существующего кода, для нового берите Opus 5 |
| Claude Sonnet 5 | claude-sonnet-5 |
Баланс скорости и качества, близко к Opus на коде и агентных задачах |
| Claude Sonnet 4.6 | claude-sonnet-4-6 |
Предыдущий Sonnet |
| Claude Haiku 4.5 | claude-haiku-4-5 |
Самая быстрая и экономная: простые задачи, большие объёмы |
У всех моделей от Sonnet 4.6 и выше контекстное окно 1 млн токенов, у Haiku 4.5 — 200 тысяч. Цены здесь не приводим намеренно: они меняются, актуальные — на странице моделей в документации.
Идентификатор без даты (claude-opus-5) — это алиас, он указывает на текущий снимок модели. У некоторых моделей есть и полные идентификаторы с датой. Не собирайте идентификаторы по памяти или по аналогии: неверный вызовет ошибку 404. Берите из документации или из списка моделей через API.
Не верьте памяти, спросите API
Возможности моделей меняются между поколениями: одна поддерживает адаптивное рассуждение, другая нет; у одной лимит вывода 128 тысяч токенов, у другой 64. Хранить это в голове бессмысленно, зато можно спросить у Models API.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const model = await client.models.retrieve("claude-opus-5");
console.log(model.display_name); // 2
console.log(model.max_input_tokens); // контекстное окно
console.log(model.max_tokens); // максимум токенов на выходе
// capabilities — нетипизированный объект, читайте по ключам
const caps = model.capabilities as Record<string, any>;
console.log(caps.thinking?.types?.adaptive?.supported);
console.log(caps.structured_outputs?.supported);
// Все модели, поддерживающие структурированный вывод
for await (const m of client.models.list()) {
const c = m.capabilities as Record<string, any>;
if (c.structured_outputs?.supported) console.log(m.id);
}Это же удобно для документации в проекте: скрипт, который раз в неделю печатает список моделей и их возможностей, честнее любого README.
Чем модели различаются на практике
Разница между уровнями — не только в цене за токен.
Качество на сложных задачах. Найти противоречие между двумя разделами ТЗ на сорок страниц, понять неочевидный баг в PR, довести многошаговую задачу до конца, не потеряв цель, — здесь старшие модели заметно надёжнее. Для классификации коротких писем разница часто незаметна.
Скорость. Haiku отвечает быстрее всех, и для интерфейса, где пользователь ждёт мгновенной реакции (подсказки при вводе, автодополнение), это решающий фактор.
Поведение API. У поколений разные параметры. Например, на Opus 5 режим рассуждения включён по умолчанию, а на Haiku 4.5 он включается по-старому, через budget_tokens. У Fable 5.1 нет принудительного выбора инструмента через tool_choice. Если в проекте несколько моделей, у вас несколько наборов правил. Подробнее — в уроке про режим рассуждения.
Кэш привязан к модели. Кэш промптов (о нём в уроке про контекст) не переносится между моделями. Переключить модель посреди длинного диалога — значит заплатить за весь контекст заново.
Усилие важнее модели
Есть рычаг, который стоит пробовать раньше, чем менять модель: параметр effort внутри output_config.
const response = await client.messages.create({
model: "claude-opus-5",
max_tokens: 1024,
output_config: { effort: "low" }, // low | medium | high | xhigh | max
system: SYSTEM,
messages: [{ role: "user", content: ticketText }],
});Усилие управляет тем, сколько модель думает и насколько подробно отвечает. high — значение по умолчанию. low даёт короткие ответы и меньше вызовов инструментов — подходит для классификации и простых извлечений. xhigh и max — для задач, где важнее правильность, чем цена: сложный анализ, долгие агентные сценарии. Старшая модель на низком усилии нередко не уступает младшей на высоком и при этом остаётся в одном кэше. Поэтому порядок действий такой: сначала кэширование, затем усилие, и только потом смена модели.
Как принимать решение
Рекомендуемый путь для любого нового сценария в агентстве:
- Начните с
claude-opus-5на усилии по умолчанию. Это устраняет вопрос «а может, модель просто слабая» на этапе отладки промпта. - Соберите набор из 30–50 реальных примеров с ожидаемыми ответами. Для классификатора обращений это письма и правильные категории; для ревьюера PR — диффы и замечания, которые должны быть найдены.
- Прогоните набор, зафиксируйте качество и расход из
usage. - Понизьте усилие и прогоните снова. Если качество держится — оставьте.
- Только теперь пробуйте Sonnet или Haiku на том же наборе. Сравнивайте не цену за запрос, а цену за решённую задачу: если младшая модель требует повторов и ручных проверок, экономии нет.
Типичный итог для наших четырёх примеров: классификатор обращений после измерений часто уезжает на Haiku или Sonnet с низким усилием, потому что задача простая и объёмы большие. Помощник аналитика и ревьюер PR остаются на Opus: цена ошибки выше, чем разница в тарифе. Бот клиентского портала — Sonnet или Opus в зависимости от того, насколько сложные вопросы задают заказчики. Но это гипотезы, а не правила: решает ваш прогон на ваших данных.
Попробуйте сами
10–15 мин на рабочем месте- Запустите скрипт с
client.models.list()и выведите для каждой модели идентификатор, контекстное окно и максимум токенов на выходе. Сравните с таблицей из урока: что-то могло измениться. - Возьмите классификатор из прошлого урока и десять обращений. Прогоните на усилии
high, потомlow. Сравните ответы иoutput_tokens. - Те же десять обращений прогоните на
claude-haiku-4-5. Посчитайте, сколько ответов совпало с Opus. Решите, достаточно ли этого для вашего сценария.
Коротко
- Уровни: Fable 5.1 (максимум возможностей), Opus 5 (основная рабочая), Sonnet 5 (баланс), Haiku 4.5 (скорость и объёмы).
- Идентификаторы моделей не собирайте по памяти: берите из документации или из
client.models.list(). - Возможности модели (контекст, лимит вывода, поддержка функций) спрашивайте у Models API.
- Кэш промптов привязан к модели; не переключайте модель посреди диалога.
- Сначала кэширование, затем
output_config.effort, и только потом смена модели. - Решение принимается на наборе реальных примеров и считается по цене за решённую задачу.
Видеоверсия
Сценарий озвучки · 486 слов, ≈ 4 мин
Рано или поздно кто-то в проекте спросит: «Почему у нас везде самая дорогая модель?» В этом уроке разберём, какие модели есть, чем они различаются и как выбирать не на глаз, а по измерениям.
Семейство Claude устроено по уровням. Наверху — Fable пять один, самая способная из общедоступных моделей для сложнейших рассуждений и долгих агентных задач. Дальше — Opus пять, основная рабочая модель, её мы используем в курсе по умолчанию. Ниже — Sonnet пять, баланс скорости и качества, на коде он близок к Opus. И Haiku четыре пять — самая быстрая и экономная, для простых задач и больших объёмов. Цены я не называю намеренно: они меняются, смотрите страницу моделей в документации.
Первое правило: не собирайте идентификатор модели по памяти. Неверный идентификатор — это ошибка «не найдено». Берите его из документации или спросите у самого API. Для этого есть Models API: метод «получить модель» возвращает название, размер контекстного окна, максимум токенов на выходе и список возможностей — поддерживает ли модель адаптивное рассуждение, структурированный вывод и так далее. Можно перебрать все модели и отфильтровать по нужной возможности. Такой скрипт честнее любого README.
Чем модели различаются на практике. Во-первых, качество на сложных задачах: найти противоречие в большом техзадании или неочевидный баг в pull request старшие модели умеют заметно надёжнее. На коротких письмах разницы почти нет. Во-вторых, скорость: Haiku отвечает быстрее всех, и для подсказок при вводе это решает. В-третьих, поведение API: у разных поколений разные параметры, например режим рассуждения на Opus пять включён по умолчанию, а на Haiku включается иначе. И в-четвёртых, кэш промптов привязан к модели: переключились посреди диалога — заплатили за весь контекст заново.
Есть рычаг, который стоит пробовать раньше смены модели: уровень усилия. Это параметр в настройках вывода с пятью значениями от низкого до максимального. Он управляет тем, сколько модель думает и насколько подробно отвечает. Низкое усилие подходит для классификации, максимальное — для задач, где правильность важнее цены. Старшая модель на низком усилии часто не уступает младшей на высоком, и при этом вы остаётесь в одном кэше.
Как принимать решение. Начните с Opus пять на усилии по умолчанию, чтобы на этапе отладки промпта не гадать, не слаба ли модель. Соберите тридцать-пятьдесят реальных примеров с ожидаемыми ответами. Прогоните, запишите качество и расход. Понизьте усилие, прогоните снова. И только потом пробуйте Sonnet или Haiku на том же наборе. Сравнивайте не цену за запрос, а цену за решённую задачу: если младшая модель требует повторов и ручных проверок, экономии нет.
Для наших примеров это обычно выглядит так: классификатор обращений уезжает на младшую модель, помощник аналитика и ревьюер pull request остаются на Opus. Но это гипотезы. Решает ваш прогон на ваших данных.
И ещё одно замечание про идентификаторы. Идентификатор без даты — это алиас, он указывает на текущий снимок модели. Для большинства проектов алиаса достаточно. Если вам критично, чтобы поведение не менялось без вашего ведома, документация подскажет, есть ли у модели полный идентификатор со снимком. Но собирать его по аналогии нельзя: идентификатор либо есть в документации, либо его не существует. В следующем модуле начнём учить агента: разберём, что такое агентный цикл.
