Назад в блог

AI для новичковИнструкция

Ошибка «недостаточно токенов»: что она значит и как исправить

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

Автор: CheapTokens TeamОпубликовано Обновлено 6 мин чтения

Обложка со словами «Не хватает токенов?» над пятью метками: баланс, лимит, ключ, контекст, вывод
Содержание
  1. Три значения слова «токены»
  2. 1. Баланс пуст
  3. 2. Упёрлись в лимит запросов
  4. 3. Неверный ключ
  5. 4. Промпт не помещается в контекстное окно
  6. 5. Ответ оборвался
  7. Одна проблема — разные названия
  8. Посмотрите, что приходит на самом деле
  9. Если проверка указала на баланс

«Недостаточно токенов» — это не одна ошибка. Так называют пять разных проблем: баланс пуст, запросы идут слишком часто, ключ неверный, промпт не помещается в контекстное окно модели или ответ упёрся в лимит вывода и оборвался на полуслове. У каждой своё лечение, а отличить их проще всего по 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_error. Обычно виноваты лишний пробел или перевод строки, скопированные вместе с ключом, удалённый или перевыпущенный ключ и ключ, отправленный не на тот адрес. Ключ одного сервиса не работает по адресу другого. Для CheapTokens базовый адрес — https://api.cheaptokens.dev/v1.

О других ошибках при подключении читайте в статье Частые ошибки подключения и как их исправить.

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 для сравнения:

Модель Стоимость OpenRouter
GLM-5.3-Flash $0.0013 $0.0027
DeepSeek-V4-Flash $0.0011 $0.0032
MiniMax-M2.7 $0.0033 $0.0203

61 500 входных и 1 500 выходных токенов всего. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.

Самое маленькое окно такой чат заполнит примерно за сто ходов:

(200,000 − 1,000) / 2,000 = 99.5

При переполнении провайдер отклоняет запрос. Код статуса у провайдеров разный, поэтому читайте тело ошибки. Например, 413 request_too_large у Claude — про размер запроса в байтах (32 МБ для Messages), это другой лимит, не токенное окно.

Что делать:

  • Выбросьте самые старые ходы или замените их короткой сводкой.
  • Не вставляйте документ целиком, если для задачи нужна одна глава.
  • Если полный текст действительно нужен, перейдите на модель с большим окном.

5. Ответ оборвался#

Ошибки здесь нет, и именно поэтому случай сбивает с толку. Модель просто остановилась: дошла до max_tokens или до собственного лимита вывода. В формате Chat Completions признак такой: finish_reason: "length" у варианта ответа.

На 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_error
Слишком большой запрос отдельным кодом не указан 413 request_too_large (байты, не токены)
Лимит расходов, который вы задали сами не указан 400 invalid_request_error

Источники: коды ошибок DeepSeek, ошибки Claude API. Ни на одной из страниц нет даты публикации, так что дата проверки наша.

Вывод: не гадайте по формулировке. Ошибка приходит как JSON с объектом error, внутри которого type и message. Опирайтесь на статус и тип, потому что текст сообщения меняется.

Посмотрите, что приходит на самом деле#

Этот фрагмент печатает статус и тело неудавшегося запроса и finish_reason удавшегося. Это диагностический набросок, а не журнал теста: запустите его со своим ключом и прочитайте, что получится.

python
# 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 приведены для сравнения и могут меняться.

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