AmigaОбучение ИИ
Модуль 2 · Первый вызов API · урок 3 из 14

Выбираем модель

8 мин чтения▶ есть видеоверсия

В 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.

typescript
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.

typescript
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 — для задач, где важнее правильность, чем цена: сложный анализ, долгие агентные сценарии. Старшая модель на низком усилии нередко не уступает младшей на высоком и при этом остаётся в одном кэше. Поэтому порядок действий такой: сначала кэширование, затем усилие, и только потом смена модели.

Как принимать решение

Рекомендуемый путь для любого нового сценария в агентстве:

  1. Начните с claude-opus-5 на усилии по умолчанию. Это устраняет вопрос «а может, модель просто слабая» на этапе отладки промпта.
  2. Соберите набор из 30–50 реальных примеров с ожидаемыми ответами. Для классификатора обращений это письма и правильные категории; для ревьюера PR — диффы и замечания, которые должны быть найдены.
  3. Прогоните набор, зафиксируйте качество и расход из usage.
  4. Понизьте усилие и прогоните снова. Если качество держится — оставьте.
  5. Только теперь пробуйте Sonnet или Haiku на том же наборе. Сравнивайте не цену за запрос, а цену за решённую задачу: если младшая модель требует повторов и ручных проверок, экономии нет.

Типичный итог для наших четырёх примеров: классификатор обращений после измерений часто уезжает на Haiku или Sonnet с низким усилием, потому что задача простая и объёмы большие. Помощник аналитика и ревьюер PR остаются на Opus: цена ошибки выше, чем разница в тарифе. Бот клиентского портала — Sonnet или Opus в зависимости от того, насколько сложные вопросы задают заказчики. Но это гипотезы, а не правила: решает ваш прогон на ваших данных.

Попробуйте сами

10–15 мин на рабочем месте
  1. Запустите скрипт с client.models.list() и выведите для каждой модели идентификатор, контекстное окно и максимум токенов на выходе. Сравните с таблицей из урока: что-то могло измениться.
  2. Возьмите классификатор из прошлого урока и десять обращений. Прогоните на усилии high, потом low. Сравните ответы и output_tokens.
  3. Те же десять обращений прогоните на 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. Но это гипотезы. Решает ваш прогон на ваших данных.

И ещё одно замечание про идентификаторы. Идентификатор без даты — это алиас, он указывает на текущий снимок модели. Для большинства проектов алиаса достаточно. Если вам критично, чтобы поведение не менялось без вашего ведома, документация подскажет, есть ли у модели полный идентификатор со снимком. Но собирать его по аналогии нельзя: идентификатор либо есть в документации, либо его не существует. В следующем модуле начнём учить агента: разберём, что такое агентный цикл.

Отметка хранится только в вашем браузере