Назад до блогу

AI для початківцівПосібник

Чому відповідь AI обривається посеред речення? Пояснення max_tokens, контекстного вікна та finish_reason

Відповідь AI, що обривається посеред речення, досягла ліміту. Читайте finish_reason, відрізняйте max_tokens від заповненого контекстного вікна та перевіряйте ліміт виводу кожної моделі.

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

Темна обкладинка з логотипом cheaptokens: слова max_tokens, finish_reason і length у рамках, а також заголовок «Відповідь обірвалася посеред речення?»
На цій сторінці
  1. Три ліміти, що обрізають відповідь
  2. Спершу читайте finish_reason
  3. Виправлення 1: збільште max_tokens
  4. Виправлення 2: коли контекстне вікно заповнене
  5. Виправлення 3: отримайте довгу відповідь частинами
  6. Коли finish_reason дорівнює stop
  7. Вибір моделі за довжиною відповіді

Відповідь, що обривається посеред речення, майже завжди була обрізана лімітом. Модель не втратила думку; у запиті закінчилося місце. У відповіді вказано, який саме ліміт спрацював: читайте finish_reason. length означає, що досягнуто ліміту. stop означає, що модель завершила самостійно.

Три речі визначають, наскільки довгою може бути відповідь. Щойно ви дізнаєтеся, яка з них вас обмежила, виправлення займе хвилину.

Три ліміти, що обрізають відповідь#

  • max_tokens — це обмеження, яке ви задаєте в запиті. Коли відповідь його досягає, генерація зупиняється, навіть посеред слова. Довідка API DeepSeek визначає його як максимальну кількість токенів, згенерованих у completion.
  • Ліміт виводу моделі — це стеля для однієї відповіді від цієї моделі. Він належить моделі, тож тримайте max_tokens на цьому рівні або нижче. Числа для наших моделей наведено в таблиці нижче.
  • Контекстне вікно — це місце для всієї розмови: вашого вводу й відповіді разом. Довідка DeepSeek каже, що вхідні та згенеровані токени разом обмежені довжиною контексту моделі.

Якщо токени для вас досі розмите поняття, почніть із Що таке токен в AI?. Ця сторінка припускає, що ви знаєте, що це таке.

Спершу читайте finish_reason#

Кожен варіант у відповіді чату містить finish_reason. Поруч із ним usage показує, скільки токенів увійшло й вийшло.

Ось як виглядає обрізана відповідь поряд із завершеною. У запиті було "In one short sentence, what is a token?", спершу з max_tokens, встановленим у 16, потім у 200.

Ілюстративний приклад, а не записана відповідь: ваші підрахунки та додаткові поля відрізнятимуться.

json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usu" },
      "finish_reason": "length"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 16, "total_tokens": 37 }
}
json
{
  "choices": [
    {
      "message": { "role": "assistant", "content": "A token is a small piece of text that a model reads and writes, usually a word or part of a word." },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 24, "total_tokens": 45 }
}

У першій відповіді completion_tokens дорівнює 16, точно обмеженню, і текст закінчується на "usu". У другій модель зупинилася на 24 токенах, значно нижче обмеження 200, бо вона завершила.

Щоб з'ясувати, що сталося, пройдіть це по порядку:

  1. Подивіться на finish_reason. Якщо це stop, відповідь повна. Модель вирішила завершити або досягла заданої вами стоп-послідовності. Якщо це length, відповідь обрізав ліміт, і наступний крок підкаже, який саме. Існують інші значення, як-от content_filter та tool_calls; жодне з них не є проблемою довжини.
  2. Порівняйте completion_tokens з max_tokens, який ви надіслали. Якщо вони рівні або майже рівні, ви досягли max_tokens.
  3. Якщо completion_tokens значно нижче max_tokens, а prompt_tokens велике, ймовірно, заповнилося контекстне вікно. Довідка DeepSeek використовує length для обох випадків, тож саме поле не може їх розрізнити; порівняння на кроці 2 — це те, як ви це визначите. Документація Anthropic і Z.ai називає другий випадок окремо — model_context_window_exceeded. Подивіться на поле у власних відповідях, щоб побачити, яку назву отримаєте.

Усі три описи походять із документації розробників, перевіреної 20 жовтня 2026 року: DeepSeek, Anthropic і Z.ai.

Що ви бачите finish_reason Причина Що робити
Обрізано, completion_tokens дорівнює max_tokens length Досягнуто max_tokens Збільште max_tokens або попросіть відповідь частинами
Обрізано, completion_tokens значно нижче max_tokens, довгий ввід length (або model_context_window_exceeded у деяких API) Контекстне вікно заповнене Скоротіть ввід чи історію або виберіть модель із більшим вікном
Завершено, але коротше, ніж хотілося stop Модель завершила або спрацювала стоп-послідовність Попросіть більше деталей; перевірте параметр stop
Немає тексту або відмова content_filter Відповідь було відфільтровано Переформулюйте запит
Немає тексту, натомість запит інструмента tool_calls Модель хоче викликати інструмент Запустіть інструмент і надішліть результат назад

Виправлення 1: збільште max_tokens#

Найпоширеніша причина також найлегше виправляється. Задайте max_tokens самостійно, щоб знати, яке обмеження застосовується. Не розраховуйте на значення за замовчуванням.

python
from openai import OpenAI

client = OpenAI(base_url="https://api.cheaptokens.dev/v1", api_key="YOUR_API_KEY")

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Write a detailed guide to setting up a home network."}],
    max_tokens=16000,  # example value: stay at or below the model's output limit
)

choice = resp.choices[0]
print(choice.finish_reason, resp.usage.completion_tokens)

Це показує форму виклику. Ключ тут вставляється як YOUR_API_KEY; не залишайте справжній ключ у коді, яким ділитеся.

Збільшення числа допомагає лише до власного ліміту моделі. Ось ліміти на CheapTokens, перевірені 20 жовтня 2026 року за списком моделей CheapTokens:

Модель ID моделі Макс. вивід на відповідь Контекст
DeepSeek-V4-Flash (0731) deepseek-ai/DeepSeek-V4-Flash-0731 32 768 токенів 380K
GLM-5.3-Flash zai-org/GLM-5.3-Flash 8 192 токени 390K
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 8 192 токени 200K

Розробники публікують власні ліміти для своїх API. Z.ai, наприклад, вказує до 128K виводу для серії GLM-5. Це не ліміти GLM-5.3-Flash на CheapTokens, які становлять 8 192 токени на відповідь. Для всього, що ви будуєте на CheapTokens, використовуйте таблицю вище.

Виправлення 2: коли контекстне вікно заповнене#

У чаті вся історія надсилається знову з кожним повідомленням, тож ввід зростає з кожним ходом. Контекстне вікно має вміщати цю історію плюс нову відповідь. Якщо сама історія займає майже все, для відповіді майже не залишається місця.

Ці вікна великі, і одне коротке питання їх не заповнить. Довгі чати й вставлені документи заповнять. Що допомагає:

  • Почніть новий чат для нового завдання замість продовження старого.
  • Попросіть модель підсумувати розмову досі й переносьте далі лише підсумок.
  • Відріжте старі повідомлення та вкладення, які вам більше не потрібні.
  • Якщо сам ввід величезний, виберіть модель із найбільшим вікном. Серед наших це GLM-5.3-Flash із 390K. Його ліміт виводу — 8 192 токени, тож просіть довгий результат частинами.

Виправлення 3: отримайте довгу відповідь частинами#

Коли бажана відповідь довша за ліміт виводу моделі, жодне налаштування не вмістить її в одну відповідь. Просіть її частинами: коли finish_reason дорівнює length, надішліть часткову відповідь назад і попросіть модель продовжити.

python
messages = [{"role": "user", "content": "Write a detailed guide to setting up a home network."}]
parts = []

for _ in range(4):  # example limit: at most 4 rounds
    resp = client.chat.completions.create(
        model="zai-org/GLM-5.3-Flash",
        messages=messages,
        max_tokens=8000,  # example value: below this model's output limit
    )
    choice = resp.choices[0]
    parts.append(choice.message.content)
    if choice.finish_reason != "length":
        break
    messages.append({"role": "assistant", "content": choice.message.content})
    messages.append({"role": "user", "content": "Continue exactly where you stopped. Don't repeat anything."})

text = "".join(parts)

Те саме застереження: приклад шаблону, а не записаний запуск. Читайте стики між частинами. Модель іноді повторює речення або починає список заново на з'єднанні.

Кожен раунд знову надсилає все досі як ввід, і кожен вихідний токен тарифікується. Довга відповідь коштує більше за коротку. Ось відповідь на вісім тисяч токенів при 2 000 токенів вводу, що вміщається в кожну модель із таблиці:

Модель Вартість OpenRouter
GLM-5.3-Flash $0.00036 $0.00069
DeepSeek-V4-Flash $0.00083 $0.0013
MiniMax-M2.7 $0.0013 $0.0102

2 000 вхідних і 8 000 вихідних токенів загалом. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.

Коли finish_reason дорівнює stop#

stop означає, що модель завершила відповідь. Якщо вона завершила раніше, ніж ви хотіли, це не проблема ліміту, і більший max_tokens нічого не змінить. Скажіть, чого хочете: довжини, розділів, рівня деталізації. Також перевірте, чи запит задає параметр stop; стоп-послідовність, що з'являється у відповіді, обриває її на місці.

Вибір моделі за довжиною відповіді#

Почніть із відповіді, яка вам потрібна. Якщо вона вміщається в 8 192 токени, MiniMax-M2.7 (MiniMaxAI/MiniMax-M2.7) впорається з нею на CheapTokens. Його вивід дешевший за довідкову ціну OpenRouter, і тарифікується він за $0.15 (за 1M вихідних токенів). Ціна однакова в будь-яку годину, немає пікових годин, а API сумісний з OpenAI та Anthropic.

Ось актуальний прайс-лист для кожної моделі:

Модель Контекст Вхід $/1М Вихід $/1М 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 наведено для порівняння, вони можуть змінюватися.

Якщо ви ще не надсилали запит, Ваш перший API-запит із CheapTokens проведе вас через це. Про те, що таке токен і чому ввід і вивід рахуються окремо, дивіться Що таке токен в AI?.

Ендпоінти, ID моделей і ліміти для кожної моделі є в документації CheapTokens.