AI для новичковИнструкция
Ошибка «недостаточно токенов»: что она значит и как исправить
Пустой баланс, лимит запросов, неверный ключ, слишком длинный промпт или оборванный ответ: найдите свою причину из пяти, проверьте и исправьте.

Содержание
«Недостаточно токенов» — это не одна ошибка. Так называют пять разных проблем: баланс пуст, запросы идут слишком часто, ключ неверный, промпт не помещается в контекстное окно модели или ответ упёрся в лимит вывода и оборвался на полуслове. У каждой своё лечение, а отличить их проще всего по HTTP-статусу и телу ошибки, а не по тексту сообщения.
Найдите свой симптом в таблице, выполните проверку и примените исправление.
Прокрутите таблицу вправо →
| Что вы видите | Вероятная причина | Проверка | Исправление |
|---|---|---|---|
| Запрос отклонён, в сообщении баланс, billing или кредит | Баланс пуст | Откройте аккаунт и посмотрите баланс | Пополните баланс и повторите запрос |
| Работает, потом падает пачками, после паузы проходит | Лимит запросов: слишком много за раз или за минуту | Проходит ли тот же запрос после минутной паузы? Шлёте ли вы запросы параллельно? | Снизьте частоту, повторяйте с растущей задержкой |
| Падает каждый запрос сразу, даже однострочный | Неверный, просроченный или неточно скопированный ключ, либо не тот адрес API | Сравните ключ в коде с ключом в аккаунте, проверьте адрес | Вставьте новый ключ и не храните его в коде |
| Короткие промпты работают, длинные нет | Промпт вместе с историей больше контекстного окна | Прикиньте размер всего, что отправляете | Обрежьте или сожмите историю, разбейте документ или возьмите модель с большим окном |
| Ошибки нет, но ответ обрывается на полуслове | Ответ упёрся в лимит вывода | finish_reason равен "length" |
Увеличьте max_tokens до лимита модели, попросите более короткий формат или попросите продолжить |
Три значения слова «токены»#
В сообщении об ошибке это слово может означать три разные величины.
- Баланс. За токены платят, поэтому «закончились токены» часто значит «закончились деньги». В сервисе с предоплатой это баланс.
- Лимит в минуту. Лимиты считают в запросах или в токенах за минуту. Упёрлись в него — подождите и отправляйте за раз меньше.
- Размер окна. Контекстное окно — сколько токенов модель читает за один запрос, ваш промпт и её ответ вместе.
И одно, чем слово не бывает: API-ключ не запас токенов. Ключ показывает, чей это аккаунт. Заканчивается баланс за ним или лимит, привязанный к нему. Если сама единица пока не знакома, начните со статьи Что такое токен в нейросети.
1. Баланс пуст#
В документации DeepSeek API HTTP 402 Insufficient Balance описан как «You have run out of balance». В Claude API для проблем с оплатой есть 402 billing_error. Названия разные, ситуация одна: деньги на счёте кончились.
CheapTokens в принципе работает так же: предоплаченный баланс, оплата по факту использования, один баланс на все модели. Поэтому при любой поломке сначала смотрите баланс. Это десять секунд, и самая частая причина отпадает сразу.
2. Упёрлись в лимит запросов#
DeepSeek описывает HTTP 429 Rate Limit Reached как слишком частые запросы либо превышение лимита параллельных запросов или QPS. Лечится это темпом: меньше параллельных запросов и задержка перед повтором, которая растёт (1 с, 2 с, 4 с), вместо того чтобы долбить сервер.
Есть ловушка. Claude API возвращает 429 rate_limit_error и тогда, когда вы дошли до месячного лимита расходов своего тарифа, а в таком ответе нет заголовка retry-after. Если 429 не уходит сколько ни жди, дело может быть в деньгах, а не в скорости. Тогда возвращайтесь к причине 1.
3. Неверный ключ#
HTTP 401 в обеих документациях — проблема с ключом: у DeepSeek это неверный API-ключ, у Claude authentication_. Обычно виноваты лишний пробел или перевод строки, скопированные вместе с ключом, удалённый или перевыпущенный ключ и ключ, отправленный не на тот адрес. Ключ одного сервиса не работает по адресу другого. Для CheapTokens базовый адрес — https:/.
О других ошибках при подключении читайте в статье Частые ошибки подключения и как их исправить.
4. Промпт не помещается в контекстное окно#
Контекстное окно считает всё, что модель читает за один запрос: системный промпт, всю историю диалога, ваше новое сообщение и место под ответ. На CheapTokens окна у моделей из нашего каталога такие:
Прокрутите таблицу вправо →
| Модель | Контекстное окно | Максимум вывода за ответ |
|---|---|---|
| DeepSeek-V4-Flash | 380K | 32 768 токенов |
| GLM-5.3-Flash | 390K | 8 192 токена |
| MiniMax-M2.7 | 200K | 8 192 токена |
У чата нет собственной памяти. Клиент отправляет всю историю заново с каждым запросом, поэтому каждый следующий запрос больше предыдущего. Вот выдуманный диалог, чтобы показать рост (круглые числа, для иллюстрации): системный промпт 1 000 токенов, а каждый ход добавляет примерно 500 токенов вопроса и 1 500 токенов ответа, всего 2 000.
1,000 + 30 × 2,000 = 61,000 токенов
Столько весит история после 30 ходов. Каждый из этих токенов снова считается входным при следующем запросе. 31-й запрос несёт эту историю в 61 000 токенов плюс новый вопрос в 500 токенов, так что на входе у него 61 500 токенов. С ответом в 1 500 токенов на MiniMax-M2.7 он стоит $0.0033. Вот все три модели для того же запроса, с ценой OpenRouter для сравнения:
| Модель | Вход $/1M | Выход $/1M | Стоимость | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0013 | $0.0027 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0011 | $0.0032 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0033 | $0.0203 |
61 500 входных и 1 500 выходных токенов всего. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.
Самое маленькое окно такой чат заполнит примерно за сто ходов:
(200,000 − 1,000) / 2,000 = 99.5
При переполнении провайдер отклоняет запрос. Код статуса у провайдеров разный, поэтому читайте тело ошибки. Например, 413 request_ у Claude — про размер запроса в байтах (32 МБ для Messages), это другой лимит, не токенное окно.
Что делать:
- Выбросьте самые старые ходы или замените их короткой сводкой.
- Не вставляйте документ целиком, если для задачи нужна одна глава.
- Если полный текст действительно нужен, перейдите на модель с большим окном.
5. Ответ оборвался#
Ошибки здесь нет, и именно поэтому случай сбивает с толку. Модель просто остановилась: дошла до max_tokens или до собственного лимита вывода. В формате Chat Completions признак такой: finish_ у варианта ответа.
На CheapTokens DeepSeek-V4-Flash может вернуть до 32 768 токенов за ответ, GLM-5.3-Flash и MiniMax-M2.7 — до 8 192. Если ваш max_tokens ниже, поднимите его. Если уже упёрлись в предел, разбейте задачу («напиши часть 1 из 3») или попросите продолжить с последнего предложения.
Вывод MiniMax-M2.7 стоит $0.15 за 1M токенов, и это дешевле, чем на OpenRouter по выходу.
Одна проблема — разные названия#
Провайдеры называют одни и те же причины по-разному. Вот что написано в их документации на 20 октября 2026 года:
Прокрутите таблицу вправо →
| Проблема | DeepSeek API | Claude API |
|---|---|---|
| Баланс пуст | 402 Insufficient Balance |
402 billing_error |
| Лимит запросов | 429 Rate Limit Reached |
429 rate_limit_error (также месячный лимит расходов тарифа) |
| Неверный ключ | 401 | 401 authentication_ |
| Слишком большой запрос | отдельным кодом не указан | 413 request_ (байты, не токены) |
| Лимит расходов, который вы задали сами | не указан | 400 invalid_ |
Источники: коды ошибок DeepSeek, ошибки Claude API. Ни на одной из страниц нет даты публикации, так что дата проверки наша.
Вывод: не гадайте по формулировке. Ошибка приходит как JSON с объектом error, внутри которого type и message. Опирайтесь на статус и тип, потому что текст сообщения меняется.
Посмотрите, что приходит на самом деле#
Этот фрагмент печатает статус и тело неудавшегося запроса и finish_reason удавшегося. Это диагностический набросок, а не журнал теста: запустите его со своим ключом и прочитайте, что получится.
# Placeholders: YOUR_API_KEY, MODEL_ID (a model id you have access to)
from openai import OpenAI, APIStatusError
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.cheaptokens.dev/v1")
try:
r = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Write a long checklist."}],
max_tokens=1000,
)
except APIStatusError as e:
# Read the status and the body, not the wording of the message
print("status:", e.status_code)
print("body:", e.body)
else:
print("finish_reason:", r.choices[0].finish_reason) # "length" = cut off
print("usage:", r.usage) # prompt_tokens and completion_tokensЕсли проверка указала на баланс#
Пополните баланс и отправьте запрос ещё раз. На CheapTokens цены на модели фиксированные, пиковых часов нет, а один баланс покрывает все модели, так что отдельно пополнять каждую не нужно. Актуальные тарифы здесь:
| Модель | Контекст | Вход $/1M | Выход $/1M | OpenRouter вход | OpenRouter выход |
|---|---|---|---|---|---|
| GLM-5.3-Flash reasoning | 390K | $0.02 | $0.04 | $0.0413 | $0.0758 |
| DeepSeek-V4-Flash | 380K | $0.015 | $0.10 | $0.0475 | $0.1568 |
| MiniMax-M2.7 | 180K | $0.05 | $0.15 | $0.30 | $1.20 |
Цены в USD за 1 млн токенов. Данные OpenRouter приведены для сравнения и могут меняться.
Подставьте свой объём в таблицу стоимости, прежде чем пополнять. Пополните баланс, когда цифры вас устроят, а если хотите сначала оценить большую нагрузку, прочитайте Как оценить стоимость ИИ-агента.



