Уровни усилий MiniMax M3.1 Flash: почему значение по умолчанию обходится в 7 раз дороже при исправлении одной и той же ошибки

AIHubMix7 мин чтения
Уровни усилий MiniMax M3.1 Flash: почему значение по умолчанию обходится в 7 раз дороже при исправлении одной и той же ошибки

У MiniMax M3.1 Flash пять уровней рассуждения, и отключить его нельзя. Если не выбрать уровень, модель выберет самый глубокий за вас. В руководстве MiniMax по генерации текста сказано, что при отсутствии параметра усилия он «по умолчанию равен max».

Эту дополнительную стоимость легко не заметить. AIHubMix запускал исправление двух ошибок на каждом уровне. При значении по умолчанию расходовалось примерно в 10 раз больше токенов на рассуждения, чем при low, а выполнение занимало примерно в 6 раз больше времени; при этом все запуски на всех уровнях прошли все 215 тестов. Стоимость рассуждений модели росла вместе с уровнем усилий, хотя сложность задачи оставалась прежней.

Короткий ответ: начинайте с low, повышайте уровень, только если задача не выполнена или требует повторных попыток, и никогда не оставляйте поле пустым.

Пять уровней, отключить нельзя

Протокол Поле Значения По умолчанию
OpenAI Chat Completions reasoning_effort low, medium, high, xhigh, max max
Anthropic Messages output_config.effort low, medium, high, xhigh, max max
OpenAI Responses reasoning.effort low, medium, high, xhigh, max max

Отключить рассуждения нельзя. Согласно справочнику Messages API MiniMax, API возвращает HTTP 400 для thinking: {"type": "disabled"} и уровня усилий none с сообщением model "MiniMax-M3.1-Flash" requires adaptive thinking. Более старые модели MiniMax полностью игнорируют поле усилий. Пока что M3.1 Flash — единственная модель MiniMax, на которую оно влияет.

На AIHubMix для minimax-m3.1-flash доступны все три протокола. Есть одно отличие от собственного API MiniMax: AIHubMix принял reasoning_effort: "none" и "minimal" с ответом HTTP 200, но модель всё равно рассуждала. Считайте эти значения нерабочими параметрами, а не способом отключить рассуждения.

Сколько стоил каждый уровень на одной задаче

Тест: функция расчёта оплаты с двумя ошибками. Если приостановка выходит за конец расчётного периода, один день учитывается дважды, а пересекающиеся приостановки вычитаются дважды. Модель возвращает исправленную функцию, а локальный тестовый стенд проверяет её на 215 скрытых случаях. Каждый уровень запускали трижды через эндпоинт Chat Completions AIHubMix 19 октября 2026 года, установив max_tokens на 32,768. Все показатели измерены AIHubMix, и никто другой их не воспроизводил.

Усилия Среднее число токенов на рассуждения Диапазон (3 запуска) Среднее время Средняя стоимость одного исправления Тесты
low 591 344–812 9.5 s $0.0006 215/215 ×3
medium 1,522 970–2,488 21.7 s $0.0013 215/215 ×3
high 2,863 2,194–3,673 27.1 s $0.0022 215/215 ×3
xhigh 1,949 1,019–2,562 19.2 s $0.0015 215/215 ×3
max 4,699 2,612–6,246 40.4 s $0.0034 215/215 ×3
не указано 6,364 4,284–9,376 56.3 s $0.0045 215/215 ×3

Стоимость рассчитана по тарифам AIHubMix для minimax-m3.1-flash: $0.165 за миллион входных токенов, $0.66 за миллион выходных токенов и $0.0165 за миллион кэшированных входных токенов. Токены на рассуждения тарифицируются как выходные. Например, в строке «не указано» в среднем было 464 токена в запросе (около 192 из них кэшированные) и 6,673 выходных токена — примерно $0.0045 за одно исправление.

Что показывают цифры

Для этой задачи хватило уровня low. Каждый уровень каждый раз выдавал правильное исправление. На простой задаче с ошибкой в одной функции дополнительные рассуждения на более высоких уровнях не принесли измеримой пользы.

Переход от low к medium заметно увеличивает затраты. На уровне medium в среднем использовалось примерно в 2.6 раза больше токенов на рассуждения, чем на low, а выполнение занимало более чем вдвое больше времени.

На уровнях выше medium различия размываются. В наших запусках xhigh в среднем использовал меньше токенов, чем high, а результаты max пересекались с обоими. Трёх запусков на уровень недостаточно, чтобы разделить их. В этой задаче «high», «xhigh» и «max» означали одно и то же: «больше рассуждений, иногда намного больше».

Если не указывать уровень, поведение соответствует max. Это совпадает с документацией MiniMax. Средний показатель для строки «не указано» оказался выше, чем для «max», но диапазоны пересекаются, а разница укладывается в разброс между запусками.

На каждом уровне разброс велик. При значении по умолчанию одна и та же задача выполнялась от 39 до 82 секунд. На эндпоинте Anthropic Messages три запуска с low использовали 511, 1,861 и 6,060 токенов на рассуждения. Последний занял 56 секунд — столько же, сколько обычно занимает запуск с max. Уровень усилий задаёт среднюю глубину рассуждений, а не жёсткое ограничение.

Скорость обработки оставалась стабильной — около 112 выходных токенов в секунду во всех 24 запусках Flash, поэтому время почти линейно зависит от количества токенов на рассуждения. При такой скорости рассуждения на 6,000 токенов означают ожидание почти в минуту.

MiniMax не публиковала данные о количестве токенов и задержке для отдельных уровней. Мы не можем сказать по результатам этого единственного теста, какие уровни понадобятся для более сложной задачи. Приведённые выше цифры показывают только, сколько стоит каждый уровень, когда задача в нём не нуждается.

На короткие запросы уходит мало токенов на рассуждения

«Всегда рассуждает» не значит «всегда рассуждает долго». Рассуждения адаптивны, поэтому их глубина зависит от предполагаемой сложности запроса:

  • Классификация пяти обращений в поддержку по четырём меткам: 0 токенов на рассуждения при low и в среднем 6 при значении по умолчанию. Все метки были правильными.
  • На вопрос «Сколько будет 17 × 23?» модель при low вовсе не рассуждала и выдала 2 выходных токена.

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

С какого уровня начать

Это стартовые рекомендации. Напрямую измерялись только первые две строки; остальные — наши рекомендации, которые стоит проверить с учётом повторных попыток в вашем случае:

Тип задачи Начните с Повышайте уровень, если
Классификация, извлечение данных, маршрутизация low На сложных случаях появляются неверные метки
Исправление одной функции, небольшие проверки кода low Исправление дважды не проходит тесты
Изменения в нескольких файлах, рефакторинг medium Агент не замечает зависимый файл
Агент зацикливается на множестве вызовов инструментов low или medium Шаги повторяются или выполнение останавливается
Сложная отладка, вопросы проектирования high Ответы остаются поверхностными
Интерактивный чат, где собеседник ждёт ответа low В этом случае никогда не оставляйте значение по умолчанию max

Используйте max, только если видели, что high не справляется с задачами такого типа.

Что ломается или становится дороже при смене уровня усилий

  • Обрезанные ответы. Токены на рассуждения входят в лимит max_tokens. В одном запуске со значением по умолчанию на рассуждения ушло 9,376 токенов при работе над одной функцией, поэтому лимит в 4K или 8K, установленный для ответов M2.x, может привести к обрезанию ответа с finish_reason: "length". MiniMax рекомендует 131,072 и допускает 524,288.
  • Тайм-ауты. На high и выше один вызов может занимать минуту. Тайм-ауты клиента и прокси, настроенные для быстрой модели, нужно увеличить как минимум до 120 секунд.
  • Значения, которые незаметно не дают эффекта. Через AIHubMix значения none, minimal и неизвестное значение вроде auto принимались, но модель всё равно рассуждала. Собственные эндпоинты MiniMax отклоняют неизвестные значения, согласно тестам проекта шлюза (проблема sub2api #8025). Используйте одно из пяти значений, указанных в документации.
  • Инструменты, в которых нельзя выбрать уровень. Сейчас OpenCode не поддерживает варианты этой модели с заданным уровнем усилий, а некоторые фреймворки передают «thinking disabled», что приводит к ошибке 400. Проверьте, что именно отправляет ваш инструмент.
  • Несколько моделей в одном конвейере. M3 и M2.x игнорируют поле усилий. Если вы переключаетесь между моделями, уровень усилий, который экономит деньги на Flash, никак не повлияет на остальные.

Как задавать параметр в каждом протоколе

Все три протокола доступны через AIHubMix с одним ключом. В кратком руководстве по началу работы описана настройка ключей, а на странице единых параметров рассуждений — обработка AIHubMix полей рассуждений для разных поставщиков.

Chat Completions:

curl https://aihubmix.com/v1/chat/completions \
  -H "Authorization: Bearer $AIHUBMIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "minimax-m3.1-flash",
       "reasoning_effort": "low",
       "max_tokens": 32768,
       "messages": [{"role": "user", "content": "Write a function that merges overlapping date ranges."}]}'

Anthropic Messages (Python SDK; если ваша версия SDK не знает поле output_config, укажите его в extra_body):

import os
import anthropic

client = anthropic.Anthropic(base_url="https://aihubmix.com", api_key=os.environ["AIHUBMIX_API_KEY"])

msg = client.messages.create(
    model="minimax-m3.1-flash",
    max_tokens=32768,
    messages=[{"role": "user", "content": "Write a function that merges overlapping date ranges."}],
    extra_body={"output_config": {"effort": "medium"}},
)
print(msg.usage)

Responses:

import os
from openai import OpenAI

client = OpenAI(base_url="https://aihubmix.com/v1", api_key=os.environ["AIHUBMIX_API_KEY"])

resp = client.responses.create(
    model="minimax-m3.1-flash",
    reasoning={"effort": "low"},
    max_output_tokens=32768,
    input="Write a function that merges overlapping date ranges.",
)
print(resp.usage)

Проверяйте usage в первых нескольких вызовах. В Chat Completions токены на рассуждения указаны в completion_tokens_details.reasoning_tokens, в Messages — в output_tokens_details.thinking_tokens, а в Responses — в output_tokens_details.reasoning_tokens. Если эти числа не меняются при смене уровня, значит, настройка не доходит до модели.

Часто задаваемые вопросы

Какой уровень усилий установлен по умолчанию в MiniMax M3.1 Flash?
Max. Если в запросе нет поля усилий, модель рассуждает на максимальной глубине.

Можно ли полностью отключить рассуждения?
Нет. При отключении рассуждений API MiniMax возвращает HTTP 400. Самый низкий уровень — low; на коротких запросах он часто не использует токены на рассуждения.

Какой уровень усилий выбрать для программирования?
Начинайте с low для исправления одной функции и небольших проверок кода, с medium — для изменений в нескольких файлах; повышайте уровень, только если задача не выполнена. В нашем тесте low каждый раз правильно исправлял функцию с двумя ошибками.

Повышает ли max точность?
Не в нашей тестовой задаче: все уровни прошли все 215 тестов. Max требовал намного больше токенов и времени. Более высокие уровни могут помочь на сложных задачах, но опубликованных данных о том, в каких случаях, нет.

Почему один и тот же запрос однажды выполнился за 10 секунд, а в следующий раз — за 56 секунд?
Даже на одном уровне глубина рассуждений меняется от запуска к запуску. Один запуск с низким уровнем усилий на эндпоинте Messages использовал примерно в десять раз больше токенов на рассуждения, чем другой.

Работает ли reasoning_effort none через AIHubMix?
Параметр принимается без ошибки, но модель всё равно рассуждает. Вместо этого используйте low.

Как узнать, сколько токенов на рассуждения использовал вызов?
Посмотрите объект usage: reasoning_tokens в Chat Completions и Responses, thinking_tokens в Messages API.

Читайте также: серия MiniMax M3.1 Flash

Источники