Счёт за OpenAI API сложно понять не потому, что цена скрыта, а потому, что один запрос часто запускает сразу несколько измерений тарификации: обычный вход, попадание в кэш, выход, reasoning-токены, изображения, множитель длинного контекста, скидка пакетной обработки. Если смотреть только на «цену за миллион токенов», реальную стоимость легко недооценить.

Разберём тему по схеме «единица тарификации — три основных статьи — дополнительные правила — формула оценки — порядок снижения затрат». Все цены, скидки и пороги смотрите в разделе тарифов и в официальной документации OpenAI; в этой статье мы не фиксируем цифры.

Примечание: OpenAI, GPT и ChatGPT — товарные знаки соответствующих правообладателей; материал носит технический характер. Цены зависят от модели и расчётного периода, поэтому перед планированием бюджета сверяйтесь с разделом тарифов.

1. Сначала о единице: токен — это не количество символов

Токен — минимальная единица обработки текста моделью. Один иероглиф, одно английское слово или один знак препинания могут соответствовать одному или нескольким токенам; изображения, определения инструментов и структурные схемы также переводятся в токены. При планировании бюджета не используйте оценку «количество символов × цена», а берите поле usage из ответа API.

Вход одного запроса обычно включает:

  1. system prompt и инструкции разработчика;
  2. сообщения истории диалога;
  3. определения инструментов (function) и схемы параметров;
  4. найденные документы, текст веб-страниц, фрагменты кода;
  5. токены, в которые пересчитаны изображения, аудио и другие нетекстовые входы.

Выход включает сгенерированный моделью текст. У reasoning-моделей внутренние токены рассуждений также тарифицируются как выход, даже если полный ход мысли не отображается в интерфейсе.

Статья тарификации Входит в счёт Пояснение
Обычные входные токены Да Системный промпт, история, определения инструментов
Вход из кэша Да, по цене кэша Стабильный префикс повышает шанс попадания
Выходные токены Да Обычно дороже входа
Токены рассуждений Да, по цене выхода Часты у reasoning-моделей, полный текст может не показываться
Входные изображения Да Пересчитываются по размеру и уровню детализации
Неудачные запросы Зависит от случая Большинство ошибок 400 не тарифицируется, частично сгенерированный ответ может тарифицироваться

2. Вход, выход, кэш: три основные статьи

Статья входа показывает, «что прикладывается к каждому запросу». У многих команд расход растёт не из-за сложных вопросов, а из-за того, что в каждом запросе заново отправляется весь документ, полный набор определений инструментов и вся история. Даже низкая цена входа при большом числе запросов становится основной статьёй затрат.

Статья выхода показывает, «сколько написала модель». Выход обычно дороже входа, а длинные отчёты, длинный код и пространные объяснения увеличивают счёт. Разумнее задать max_tokens и требовать структурированный результат, чем потом сжимать текст.

Статья кэша показывает, «что используется повторно». Кэш промптов OpenAI сопоставляет префикс: совпадать должен начальный фрагмент запроса, и только тогда последующее содержимое может попасть в кэш. Ставьте неизменные system prompt, определения инструментов и описание базы знаний в начало, а меняющийся вопрос пользователя — в конец; так вероятность попадания будет стабильной. У кэша есть минимальная длина префикса и время жизни: это не постоянное хранилище, и включение кэша само по себе не обеспечивает попадание.

Типичная ошибка — считать кэш «бесплатным вторым запросом». На самом деле попавшая в кэш часть тарифицируется по сниженной цене чтения кэша, а остальная — по обычной цене входа. В счёте нужно отдельно смотреть cached_tokens и обычные входные токены.

3. Дополнительные правила: длинный контекст, пакеты, reasoning-модели

Помимо трёх основных статей, итоговую сумму меняют несколько правил.

Правило Условие срабатывания Влияние на счёт
Множитель длинного контекста Вход одного запроса превышает порог модели Весь запрос тарифицируется с повышенным множителем, а не только превышение
Пакетная обработка Использование Batch API и асинхронного ответа Обычно отдельная скидка, подходит для офлайн-задач
Глубина рассуждений Повышенный reasoning effort Больше токенов рассуждений, выше стоимость выхода
Уровень детализации изображения Вход изображения с высокой детализацией Больше токенов после пересчёта
Повторная попытка Повторная отправка после 429 или 5xx Каждая попытка — новый запрос, возможна двойная оплата

По данным о GPT-5.5 из раздела тарифов: если вход одного запроса превышает 272K токенов, множители применяются ко всему запросу — и к входу, и к выходу. Такие пороги нужно закладывать в бюджетную модель, а не обнаруживать после выставления счёта.

4. Как оценить стоимость одного запроса

Обозначим цены переменными:

Стоимость запроса =
    некэшированные входные токены × цена входа
  + токены из кэша × цена чтения кэша
  + выходные токены (включая рассуждения) × цена выхода
  + дополнительные токены изображений и инструментов × соответствующая цена

Итоговая сумма = стоимость запроса × множитель длинного контекста × скидка пакетной обработки

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

5. Какие поля писать в лог использования

В ответах OpenAI-совместимых интерфейсов обычно есть объект usage. Запишите в лог следующие поля — это сэкономит много времени при сверке:

import json
from openai import OpenAI

client = OpenAI(
    api_key="sk-ваш-ключ",
    base_url="https://api.zhongshangqihang.com/v1",
)

resp = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Кратко опиши риски этого договора в трёх предложениях."}],
    max_tokens=800,
)

u = resp.usage
prompt_details = getattr(u, "prompt_tokens_details", None)
completion_details = getattr(u, "completion_tokens_details", None)

record = {
    "request_id": resp.id,
    "model": resp.model,
    "prompt_tokens": u.prompt_tokens,
    "cached_tokens": getattr(prompt_details, "cached_tokens", 0) or 0,
    "completion_tokens": u.completion_tokens,
    "reasoning_tokens": getattr(completion_details, "reasoning_tokens", 0) or 0,
    "total_tokens": u.total_tokens,
}
print(json.dumps(record, ensure_ascii=False))

Если шлюз или версия SDK не возвращает какое-то поле детализации, используйте getattr как запасной вариант, чтобы код логирования не прерывал основной процесс.

6. Порядок снижения затрат: сначала бесплатные меры

По соотношению усилий и результата рекомендуем такой порядок:

  1. Сначала измерьте: посчитайте доли входных, выходных, кэшированных токенов и повторов по каждой бизнес-линии, найдите самую крупную статью.
  2. Сжимайте вход: используйте поиск, суммаризацию и разбиение вместо отправки целого документа — так меньше риск множителя длинного контекста.
  3. Стабилизируйте префикс: system prompt, определения инструментов и фиксированную базу знаний ставьте в начало, чтобы уменьшить промахи кэша.
  4. Ограничивайте выход: задайте max_tokens, требуйте JSON или фиксированные поля, сокращайте бесполезные длинные ответы.
  5. Маршрутизируйте: простую классификацию, извлечение и переписывание отдавайте лёгкой модели, сложные рассуждения — флагманской.
  6. Используйте пакеты: офлайн-задачи переводите на Batch и принимайте более высокую задержку ради скидки.
  7. Задайте бюджеты: лимиты и оповещения по проектам и ключам помогают вовремя остановить аномальные вызовы.
  8. Проверьте повторы: для 429 и 5xx используйте экспоненциальную задержку и максимальное число попыток, чтобы не платить дважды.

7. Частые вопросы

Почему выход дороже входа?

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

Кэш включается автоматически?

Большинство OpenAI-совместимых интерфейсов автоматически пытаются использовать префиксный кэш, но попадание зависит от полного совпадения префикса, минимальной длины и времени жизни кэша. Стабильный префикс — обязательное условие для роста доли попаданий.

Тарифицируются ли рассуждения reasoning-модели?

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

Почему за одинаковые запросы списывают разные суммы?

Длина входа, длина выхода, попадание в кэш, снимок модели и число повторов могут различаться. Сопоставляйте по request ID и логам usage, чтобы найти причину.

Совпадают ли цены шлюза и официальные цены OpenAI?

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

Что дальше

Сначала зарегистрируйтесь в ZSQH AI Gateway, выполните минимальный запрос тестовым ключом, подключите логи usage и затем разделите бюджет по бизнес-линиям. Модели, контекст и цены смотрите в разделе тарифов.

Читайте также: