Max tokens в OpenAI: что это и какой параметр использовать

В этой статье

Запрос max tokens openai обычно означает не отдельный универсальный лимит OpenAI, а настройку, которая ограничивает длину генерации ответа в API. Здесь легко перепутать три разные вещи: параметр конкретного endpoint, общее контекстное окно модели и лимиты подписки ChatGPT. В этой статье разбираем первую и вторую — на уровне запроса к API.

Короткий ответ

Выбор параметра зависит от API:

  • в Chat Completions используйте max_completion_tokens;
  • в Responses API используйте max_output_tokens;
  • старый max_tokens в Chat Completions помечен как deprecated и несовместим с o-series models.

Так это описано в справке Chat Completions API и методе создания ответа Responses API.

Ни один из этих параметров не означает «ровно столько токенов вернётся». Это верхняя граница генерации. Модель может закончить ответ раньше, например когда задача уже решена или сработало другое условие остановки.

Chat Completions: max_completion_tokens

Для Chat Completions лимит задаётся в теле запроса рядом с моделью и сообщениями:

{
  "model": "your-model",
  "messages": [
    {"role": "user", "content": "Объясни идемпотентность HTTP-запросов в трёх пунктах"}
  ],
  "max_completion_tokens": 300
}

Название важно: completion относится к генерируемому продолжению, а не ко всему запросу. Входные сообщения уже занимают часть доступного контекста, но значение max_completion_tokens задаёт именно потолок для завершения.

В старых примерах можно встретить такой вариант:

{"max_tokens": 300}

Считать его универсальным решением не стоит. В актуальной справке Chat Completions max_tokens помечен как устаревший параметр, а для o-series models он несовместим. При переносе старого примера проверьте endpoint и модель, затем замените параметр на max_completion_tokens, если это поддерживается вашей схемой запроса.

Responses API: max_output_tokens

В Responses API используется другое имя:

{
  "model": "your-model",
  "input": "Объясни идемпотентность HTTP-запросов в трёх пунктах",
  "max_output_tokens": 300
}

У этого ограничения есть важная техническая деталь: верхняя граница относится ко всем сгенерированным токенам. В неё входят видимый текст ответа и reasoning-токены, если модель использует рассуждение. Поэтому число 300 не следует читать как обещание «300 токенов в поле с текстом». Часть бюджета может уйти на невидимую работу модели, а итоговый ответ окажется короче.

Это та же граница между параметром запроса и результатом, которая встречается в любой распределённой системе: вы задаёте максимальный бюджет операции, но не обязуетесь потратить его целиком.

Чем max_* отличается от context window

Контекстное окно — это общий объём токенов, который модель может учитывать в конкретном запросе. В него могут входить инструкции, история сообщений, ваш новый input, результаты инструментов и создаваемый ответ. Точный предел зависит от модели и endpoint, поэтому его нельзя заменить одним универсальным числом из примера. Базовые сведения о составе токенов приведены в руководстве OpenAI Understanding and counting tokens.

Параметр max_completion_tokens или max_output_tokens ограничивает только генерацию на текущем шаге. Он не увеличивает контекстное окно и не превращает длинный вход в короткий. Если вход уже велик, добавленный потолок вывода должен помещаться в доступный остаток контекста.

Условно это можно представить так:

вход + служебные данные + возможный вывод <= доступное контекстное окно

Но считать входные токены по длине обычной строки нельзя. На итог влияют структура сообщений, инструменты и их схемы, изображения, файлы и другие элементы запроса. Для Responses API отдельно учитывайте reasoning-токены: они относятся к бюджету max_output_tokens, хотя не отображаются как обычный текст. Для расчёта такого бюджета используйте рекомендации OpenAI по подсчёту токенов.

Как выбрать значение на практике

Сначала определите, какой клиентский интерфейс вызывает ваш код. Если это Chat Completions, начинайте с max_completion_tokens; если Responses — с max_output_tokens. Затем задайте лимит по задаче, а не по привычному числу из чужого примера.

Для короткого классификатора или JSON-ответа достаточно небольшого бюджета. Для кода, анализа документа или многошагового результата нужен запас. При этом слишком большой потолок не гарантирует более умный ответ: он лишь разрешает модели продолжать дольше и может усложнить контроль стоимости и задержки.

После ответа смотрите не только на текст, но и на причину завершения и фактическое использование токенов. Если ответ обрезается на середине, увеличьте лимит или разбейте задачу на этапы. Если видимый ответ неожиданно короткий в Responses API, проверьте, не был ли бюджет потрачен частично на reasoning-токены.

Перед отправкой запроса полезно проверить токены входа средствами, рекомендованными для выбранного API. Это особенно важно для истории диалога, вызовов инструментов, файлов и изображений: их вклад нельзя надёжно оценить по количеству символов. Если вы только собираете первый запрос, пригодится практический пример на Python; параметр лимита всё равно выбирайте по используемому endpoint.

Где здесь Amber Market

Если после настройки технического лимита вам нужно проверить доступные варианты зарубежных сервисов и оплаты, можно открыть каталог Amber Market. Оплата заказов проходит через СБП, автоматических списаний нет. Это общий каталог для проверки актуальных предложений, а не подтверждение пополнения баланса OpenAI API: наличие подходящей услуги и её условия нужно уточнить до оплаты.

Иными словами, сначала разберитесь, какой потолок генерации принимает ваш endpoint, а каталог используйте отдельно — только чтобы проверить подходящие предложения посредника. max_tokens не является тарифом, балансом или лимитом подписки ChatGPT.

Итог

max tokens openai — это неоднозначная короткая формулировка. В современном коде ориентируйтесь на конкретный endpoint: max_completion_tokens для Chat Completions и max_output_tokens для Responses API. Старый max_tokens переносить вслепую не нужно.

При этом любой max_* — только верхняя граница генерации. Она не равна общему контекстному окну, не гарантирует такой же объём видимого текста и не описывает лимиты подписки ChatGPT. Сначала определите интерфейс и модель, затем оставьте запас для входа, служебных данных и, в Responses API, reasoning-токенов.

Источники

Есть следующая задача?Ещё по теме «Работа с API» →