Счёт за OpenAI API сложно понять не потому, что цена скрыта, а потому, что один запрос часто запускает сразу несколько измерений тарификации: обычный вход, попадание в кэш, выход, reasoning-токены, изображения, множитель длинного контекста, скидка пакетной обработки. Если смотреть только на «цену за миллион токенов», реальную стоимость легко недооценить.
Разберём тему по схеме «единица тарификации — три основных статьи — дополнительные правила — формула оценки — порядок снижения затрат». Все цены, скидки и пороги смотрите в разделе тарифов и в официальной документации OpenAI; в этой статье мы не фиксируем цифры.
Примечание: OpenAI, GPT и ChatGPT — товарные знаки соответствующих правообладателей; материал носит технический характер. Цены зависят от модели и расчётного периода, поэтому перед планированием бюджета сверяйтесь с разделом тарифов.
1. Сначала о единице: токен — это не количество символов
Токен — минимальная единица обработки текста моделью. Один иероглиф, одно английское слово или один знак препинания могут соответствовать одному или нескольким токенам; изображения, определения инструментов и структурные схемы также переводятся в токены. При планировании бюджета не используйте оценку «количество символов × цена», а берите поле usage из ответа API.
Вход одного запроса обычно включает:
- system prompt и инструкции разработчика;
- сообщения истории диалога;
- определения инструментов (function) и схемы параметров;
- найденные документы, текст веб-страниц, фрагменты кода;
- токены, в которые пересчитаны изображения, аудио и другие нетекстовые входы.
Выход включает сгенерированный моделью текст. У 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. Порядок снижения затрат: сначала бесплатные меры
По соотношению усилий и результата рекомендуем такой порядок:
- Сначала измерьте: посчитайте доли входных, выходных, кэшированных токенов и повторов по каждой бизнес-линии, найдите самую крупную статью.
- Сжимайте вход: используйте поиск, суммаризацию и разбиение вместо отправки целого документа — так меньше риск множителя длинного контекста.
- Стабилизируйте префикс: system prompt, определения инструментов и фиксированную базу знаний ставьте в начало, чтобы уменьшить промахи кэша.
- Ограничивайте выход: задайте
max_tokens, требуйте JSON или фиксированные поля, сокращайте бесполезные длинные ответы. - Маршрутизируйте: простую классификацию, извлечение и переписывание отдавайте лёгкой модели, сложные рассуждения — флагманской.
- Используйте пакеты: офлайн-задачи переводите на Batch и принимайте более высокую задержку ради скидки.
- Задайте бюджеты: лимиты и оповещения по проектам и ключам помогают вовремя остановить аномальные вызовы.
- Проверьте повторы: для 429 и 5xx используйте экспоненциальную задержку и максимальное число попыток, чтобы не платить дважды.
7. Частые вопросы
Почему выход дороже входа?
Генерация каждого токена требует пошаговых вычислений модели, а вычислительная стоимость выше, чем чтение уже готового контекста, поэтому выход обычно дороже. Длинные ответы, длинный код и рассуждения увеличивают эту часть счёта.
Кэш включается автоматически?
Большинство OpenAI-совместимых интерфейсов автоматически пытаются использовать префиксный кэш, но попадание зависит от полного совпадения префикса, минимальной длины и времени жизни кэша. Стабильный префикс — обязательное условие для роста доли попаданий.
Тарифицируются ли рассуждения reasoning-модели?
Да. Токены рассуждений обычно тарифицируются по цене выходных, даже если клиент не видит полный ход мысли. Повышение глубины рассуждений увеличивает и задержку, и стоимость.
Почему за одинаковые запросы списывают разные суммы?
Длина входа, длина выхода, попадание в кэш, снимок модели и число повторов могут различаться. Сопоставляйте по request ID и логам usage, чтобы найти причину.
Совпадают ли цены шлюза и официальные цены OpenAI?
Не обязательно. Шлюз может включать курс, стоимость платёжного канала и обслуживания, а также акционные скидки. Ориентируйтесь на раздел тарифов и не используйте старые скриншоты для бюджета.
Что дальше
Сначала зарегистрируйтесь в ZSQH AI Gateway, выполните минимальный запрос тестовым ключом, подключите логи usage и затем разделите бюджет по бизнес-линиям. Модели, контекст и цены смотрите в разделе тарифов.
Читайте также:
