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

На цій сторінці
Відповідь, що обривається посеред речення, майже завжди була обрізана лімітом. Модель не втратила думку; у запиті закінчилося місце. У відповіді вказано, який саме ліміт спрацював: читайте 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.
Ілюстративний приклад, а не записана відповідь: ваші підрахунки та додаткові поля відрізнятимуться.
{
"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 }
}{
"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_ дорівнює 16, точно обмеженню, і текст закінчується на "usu". У другій модель зупинилася на 24 токенах, значно нижче обмеження 200, бо вона завершила.
Щоб з'ясувати, що сталося, пройдіть це по порядку:
- Подивіться на
finish_reason. Якщо цеstop, відповідь повна. Модель вирішила завершити або досягла заданої вами стоп-послідовності. Якщо цеlength, відповідь обрізав ліміт, і наступний крок підкаже, який саме. Існують інші значення, як-отcontent_filterтаtool_calls; жодне з них не є проблемою довжини. - Порівняйте
completion_зtokens max_tokens, який ви надіслали. Якщо вони рівні або майже рівні, ви досяглиmax_tokens. - Якщо
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_ дорівнює max_tokens |
length |
Досягнуто max_tokens |
Збільште max_tokens або попросіть відповідь частинами |
Обрізано, completion_ значно нижче max_tokens, довгий ввід |
length (або model_ у деяких API) |
Контекстне вікно заповнене | Скоротіть ввід чи історію або виберіть модель із більшим вікном |
| Завершено, але коротше, ніж хотілося | stop |
Модель завершила або спрацювала стоп-послідовність | Попросіть більше деталей; перевірте параметр stop |
| Немає тексту або відмова | content_filter |
Відповідь було відфільтровано | Переформулюйте запит |
| Немає тексту, натомість запит інструмента | tool_calls |
Модель хоче викликати інструмент | Запустіть інструмент і надішліть результат назад |
Виправлення 1: збільште max_tokens#
Найпоширеніша причина також найлегше виправляється. Задайте max_tokens самостійно, щоб знати, яке обмеження застосовується. Не розраховуйте на значення за замовчуванням.
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- |
32 768 токенів | 380K |
| GLM-5.3-Flash | zai- |
8 192 токени | 390K |
| MiniMax-M2.7 | MiniMaxAI/ |
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, надішліть часткову відповідь назад і попросіть модель продовжити.
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 токенів вводу, що вміщається в кожну модель із таблиці:
| Модель | Вхід $/1М | Вихід $/1М | Вартість | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.00036 | $0.00069 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.00083 | $0.0013 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0013 | $0.0102 |
2 000 вхідних і 8 000 вихідних токенів загалом. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Коли finish_reason дорівнює stop#
stop означає, що модель завершила відповідь. Якщо вона завершила раніше, ніж ви хотіли, це не проблема ліміту, і більший max_tokens нічого не змінить. Скажіть, чого хочете: довжини, розділів, рівня деталізації. Також перевірте, чи запит задає параметр stop; стоп-послідовність, що з'являється у відповіді, обриває її на місці.
Вибір моделі за довжиною відповіді#
Почніть із відповіді, яка вам потрібна. Якщо вона вміщається в 8 192 токени, MiniMax-M2.7 (MiniMaxAI/) впорається з нею на 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.



