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

Вирішення проблемПосібник

Запит задовгий: 400 проти 413, контекстне вікно та max_tokens

Відрізніть 413 (забагато байтів) від помилки довжини токенів (зазвичай 400), перевірте вхід плюс max_tokens щодо контекстного вікна та зменште запит.

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

Обкладинка: помилка запиту задовгого з кодами 400 і 413
На цій сторінці
  1. Два обмеження, дві помилки
  2. Перевірте математику перед відправленням
  3. Чотири способи зменшити запит
  4. Скільки коштує довга історія
  5. Якщо все ще не працює

Ваш чат працював справно сорок ходів, а потім кожен запит почав падати. Коротка відповідь: «запит задовгий» приховує два різні обмеження. 413 означає, що запит завеликий у байтах і був відхилений ще до того, як його побачила модель. Якщо помилка скаржиться на довжину в токенах (зазвичай це невалідний запит класу 400), ваш вхід плюс відповідь, яку ви просите, не вміщуються в контекстне вікно; прочитайте error.message, щоб побачити, яке саме. Виправлення — виміряти, а потім скоротити.

Цей посібник показує, як розрізнити ці два випадки, як перевірити математику перед відправленням і чотири способи зменшити запит. Якщо термін новий, що таке контекстне вікно пояснює його простими словами.

Два обмеження, дві помилки#

413 — це пошта, яка відмовляється прийняти завелику посилку; помилка токенів — це модель, яка каже, що лист не вміщується в її вікно читання. Вони виникають у різних місцях і потребують різних виправлень.

Сторінка помилок API Anthropic (перевірено 29 жовтня 2026) описує 413 request_too_large як запит, що перевищує максимальну кількість байтів: 128 МБ для Messages API, 256 МБ для Batch API, 500 МБ для Files API. 400 invalid_request_error охоплює проблеми з форматом або вмістом запиту. Це ліміти Anthropic. Їхня сторінка не наводить повідомлення про кількість токенів, як і посібник OpenAI з кодів помилок, тому не будуйте логіку на точному формулюванні, яке ви бачили в темі на форумі.

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

З'єднайте пари

Зіставте кожен симптом із його причиною

  • 413 request_too_largeТіло запиту містить забагато байтів, наприклад велике вкладення в base64
  • Помилка довжини токенів одразу після вставлення великого логуСам лише промпт містить більше токенів, ніж контекстне вікно
  • 400 після промпту приблизно на 375K токенів із max_tokens=32768 на моделі з 380KРазом вони можуть перевищити вікно
  • Та сама історія, інша модельПеревірте вікно кожної моделі: історія, що вміщується в одну, може не вміститися в іншу
413 і 400 поруч: байти проти токенів
Два обмеження: 413 рахує байти, помилка токенів рахує вхід плюс max_tokens.

Тіло помилки — це JSON із полем верхнього рівня type: error, об'єктом error із власними type та message і ідентифікатором запиту. Прочитайте error.message і збережіть ідентифікатор запиту; з офіційними SDK перехоплюйте типізований виняток замість зіставлення рядків.

Перевірте математику перед відправленням#

Звичка, яка економить найбільше часу: не чекайте на помилку. Перед кожним викликом додайте три речі й порівняйте їх із вікном.

  1. Токени у ваших повідомленнях (системний промпт, історія, нове запитання).
  2. max_tokens, який ви просите.
  3. Контекстне вікно моделі.

Тримайте вхід плюс запитану відповідь у межах вікна. Вікна на CheapTokens становлять 390K для GLM-5.3-Flash, 380K для DeepSeek-V4-Flash і 180K для MiniMax-M2.7; відповіді сягають до 8 192 токенів на GLM і MiniMax та до 32 768 на DeepSeek-V4-Flash. Перевірте сторінки цін і моделей для актуального списку.

Запит, що вміщується (104 000 токенів), поруч із тим, що не вміщується (історія 400K)
Історія на 104 000 токенів вміщується у вікно; 400K не вміщується в жодне з трьох.

Скажімо, ваш агент надсилає історію на 100K токенів і просить 4 000 токенів у відповідь. Це 100 000 + 4 000 = 104 000 токенів, комфортно на будь-якій із трьох. Тепер той самий агент після ще п'ятдесяти кроків: 400K. Жодне вікно зі списку не вмістить це, який би max_tokens ви не встановили. Це момент, коли з'являється помилка, і вона здається раптовою лише тому, що історія зростала потроху з кожним ходом.

Приблизного лічильника достатньо для запобіжника. Англійський текст у середньому має близько 4 символів на токен; код і неанглійський текст використовують більше токенів на символ, тому залишайте запас:

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

CONTEXT = 380_000      # DeepSeek-V4-Flash window
MAX_OUT = 4_000        # the answer you ask for
MARGIN = 0.85          # rough counter, keep 15% spare

def rough_tokens(messages):
    return sum(len(m['content']) // 4 + 4 for m in messages)

def trim(messages):
    budget = int(CONTEXT * MARGIN) - MAX_OUT
    system, rest = messages[:1], messages[1:]
    while rest and rough_tokens(system + rest) > budget:
        rest.pop(0)          # drop the oldest turn first
    return system + rest

history = [{'role': 'system', 'content': '...'}, {'role': 'user', 'content': '...'}]  # system first

reply = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=trim(history),
    max_tokens=MAX_OUT,
)
print(reply.usage.prompt_tokens, reply.choices[0].finish_reason)

Останній рядок — ваше калібрування: usage.prompt_tokens — це те, що API фактично порахував. Порівняйте його з rough_tokens(...) кілька разів і скоригуйте дільник і запас під ваш власний текст.

Чотири способи зменшити запит#

Виберіть найдешевше виправлення, яке працює, у такому порядку.

1. Зменште max_tokens. Просить лише ту відповідь, яка вам потрібна: вхід плюс max_tokens — це те, що ви маєте тримати в межах вікна, і кожна модель має власний ліміт на відповідь (8 192 або 32 768 токенів вище). Не встановлюйте max_tokens більше, ніж потрібно для відповіді, і не вище ліміту моделі на відповіді. Якщо відповідь обривається на встановленому ліміті, вона закінчується на finish_reason: length, що має власне виправлення.

2. Обріжте історію. Відкиньте найстаріші ходи, залиште системний промпт і останні кілька обмінів. Функція trim вище робить саме це. Для агента також скоротіть обсяг: виводи інструментів на 5 000 рядків рідко потрібно зберігати повністю після того, як агент їх використав.

3. Підсумуйте замість відкидання. Коли старі ходи важливі, попросіть модель один раз стиснути їх у коротку нотатку, а потім замініть старі повідомлення цією нотаткою. Ви платите за один додатковий виклик і зберігаєте нитку розмови.

4. Перейдіть на більше вікно. Перехід від MiniMax-M2.7 (180K) до GLM-5.3-Flash (390K) або DeepSeek-V4-Flash (380K) — це зміна ідентифікатора моделі в одному рядку. Якщо вам також потрібні довгі відповіді, DeepSeek-V4-Flash дозволяє до 32 768 вихідних токенів, і всі три мають спільний баланс, тож перемикання нічого не коштує в налаштуванні.

Чек-лист

Перед повторним надсиланням невдалого запиту

Скільки коштує довга історія#

Обрізання — це не лише про помилки. Кожен крок агента повторно надсилає всю історію, тому роздута історія — це також дорога частина рахунку. Візьміть завдання на 30 кроків, де кожен крок надсилає близько 100K токенів і отримує близько 1 500 у відповідь:

Модель За запит 30 запитів OpenRouter, 30 запитів
GLM-5.3-Flash $0.0021 $0.0618 $0.127
DeepSeek-V4-Flash $0.0017 $0.0495 $0.15
MiniMax-M2.7 $0.0052 $0.157 $0.954

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

Таблиця оцінює те саме завдання на кожній моделі за поточними тарифами. Скоротіть історію до чверті — і вхідна частина впаде приблизно на три чверті. Щоб побачити, де ваш власний агент витрачає токени, відстежуйте використання на запит у Python; щодо механіки, чому агенти використовують так багато токенів розбирає приклад на 20 кроків.

DeepSeek-V4-Flash наразі коштує $0.015 за 1M вхідних токенів і $0.10 за 1M вихідних токенів, одна ціна в будь-яку годину. Спробуйте свої цифри:

Калькулятор вартості

Завдання агента на 30 кроків з історією 100K

Вхідні токени на запит: 100 000 · Вихідні токени на запит: 1 500 · Запитів на день: 30

МодельЗа деньЗа місяць
GLM-5.3-Flash$0.0618$1.85
DeepSeek-V4-Flash$0.0495$1.49
MiniMax-M2.7$0.157$4.70

Якщо все ще не працює#

Довгі запити через повільне з'єднання мають окрему проблему: Anthropic радить потокову передачу або Batch API для довгих запитів із великим max_tokens, оскільки мережі можуть розривати неактивні з'єднання, а його SDK очікують, що не потокові запити завершаться протягом 10 хвилин. Якщо помилка — це тайм-аут або розірване з'єднання, а не 400, дивіться помилки з'єднання і встановіть stream=True.

Якщо повідомлення — 401 або 404, проблема в ключі, базовій URL-адресі або ідентифікаторі моделі: помилка API 401 або 404. Щоб отримати точну базову URL-адресу, ідентифікатори моделей і приклади, відкрийте документацію CheapTokens.