AI для початківцівПосібник
Чому довгий чат з AI коштує більше: API повторно надсилає історію
Кожне нове повідомлення в чаті з AI знову надсилає всю історію, тож вхід зростає з кожним ходом. Подивіться на арифметику та 3 способи стримати витрати.

На цій сторінці
Перші повідомлення чату дешеві. П'ятдесяте повідомлення коштує помітно більше, ніж десяте, хоча ви набрали той самий обсяг. Нічого не зламано: так працюють чат-API.
Коротка відповідь#
Модель не пам'ятає ваших попередніх запитів. Документація OpenAI каже це прямо: "кожен запит на генерацію тексту є незалежним і не зберігає стану", а для багатоходової розмови ви включаєте попередні повідомлення та попередню відповідь моделі в наступний запит. Messages API від Anthropic описує той самий підхід: багатоходові розмови без збереження стану, де попередні ходи передаються в параметрі messages.
Отже, вікно чату, яке ви бачите в застосунку, — це ілюзія, створена застосунком. За ним кожне нове повідомлення — це свіжий запит, що несе всю розмову до цього моменту. Ви платите за вхідні токени в кожному запиті, і історія є частиною цього входу. Якщо ви новачок у термінах, спершу прочитайте Що таке токен та Вхідні та вихідні токени.
OpenAI прямо зазначає білінгову сторону для своїх ланцюжків відповідей: усі попередні вхідні токени в ланцюжку тарифікуються як вхідні токени. Той самий принцип діє для будь-якого API, де ви надсилаєте історію самостійно: що ви надсилаєте, те й рахується.
Розібраний приклад із вигаданими числами#
Числа нижче — навчальний приклад, а не вимірювання. Припустімо, кожне ваше повідомлення — близько 200 токенів, а кожна відповідь — близько 300 токенів. Один завершений обмін додає 500 токенів до історії.
Прокрутіть таблицю праворуч →
| Хід | Попередня історія, надіслана знову | Нове повідомлення | Вхід цього запиту | Вихід |
|---|---|---|---|---|
| 1 | 0 | 200 | 200 | 300 |
| 5 | 500 × 4 = 2,000 | 200 | 2,200 | 300 |
| 10 | 500 × 9 = 4,500 | 200 | 4,700 | 300 |
| 20 | 500 × 19 = 9,500 | 200 | 9,700 | 300 |
Відповідь залишається тієї самої довжини, але вхід 20-го ходу майже в п'ятдесят разів більший за вхід 1-го ходу. Вихід не зростає; зростає вхід.
Тепер підсумок для чату на 20 ходів. Історія надсилається знову 0, 1, 2 ... 19 разів залежно від кількості обмінів, що є простою сумою:
- Старі обміни, надіслані знову: 500 × 190 = 95,000 токенів (190 — це 0 + 1 + 2 + ... + 19).
- Нові повідомлення: 200 × 20 = 4,000 токенів.
- Загальний вхід для чату: 95,000 + 4,000 = 99,000 токенів.
- Загальний вихід: 300 × 20 = 6,000 токенів.
Якби модель пам'ятала все безкоштовно, вхід становив би лише 200 × 20 = 4,000 токенів. Решта — це історія, надіслана знову. Подвоєння кількості ходів не подвоює вартість історії, воно приблизно її учетверяє, бо сума зростає як квадрат кількості ходів.
Скільки це коштує за поточними цінами#
Ось той самий чат на 20 ходів (99,000 входу, 6,000 виходу) за поточними цінами. Таблиця жива й оновлюється, коли змінюються тарифи; останній стовпець — довідкова ціна OpenRouter для порівняння.
| Модель | Вхід $/1М | Вихід $/1М | Вартість | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0022 | $0.0045 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0021 | $0.0056 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0059 | $0.0369 |
99 000 вхідних і 6 000 вихідних токенів загалом. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Для швидкої перевірки текстом: на MiniMax-M2.7 ця вся розмова коштує $0.0059. Для такого чату, де домінує вхід, найважливіша ціна входу: на MiniMax-M2.7 вона дешевша за довідкову ціну OpenRouter. За 1M токенів MiniMax-M2.7 становить $0.05 за вхід і $0.15 за вихід.
Три способи стримати витрати#
1. Починайте новий чат, коли змінюється тема#
Найдешевша історія — порожня. Якщо ви завершили налагодження функції й тепер хочете рецепт, новий чат надсилає 200 токенів замість 9,700. У застосунку це одна кнопка; у коді це history = []. Робіть це щоразу, коли попередній контекст більше не допомагає наступному питанню.
2. Обрізайте історію#
Залишайте лише останні кілька повідомлень і відкидайте решту. Припустімо, ви залишаєте останні три обміни, тож історія ніколи не перевищує 500 × 3 = 1,500 токенів:
- Ходи 1-3 зростають нормально: 0 + 500 + 1,000 = 1,500 токенів історії.
- Ходи 4-20 кожен несе обмежені 1,500: 1,500 × 17 = 25,500 токенів.
- Загальна історія: 1,500 + 25,500 = 27,000 токенів, плюс 4,000 нових повідомлень = 31,000 токенів входу.
Це 31,000 замість 99,000 для тих самих 20 ходів, і на MiniMax-M2.7 це становить $0.0025. Ціна обрізання — модель забуває ранню частину чату, тож тримайте системний промпт і будь-які факти, які вона не повинна втратити, поза обрізаною частиною.
3. Замінюйте старі ходи підсумком#
Коли історія стає довгою, попросіть модель один раз її підсумувати, а потім продовжуйте з підсумком замість повного тексту. У наведеному вище прикладі дев'ять обмінів — це 4,500 токенів; підсумок приблизно на 300 токенів переносить далі основні моменти. Ви платите за один додатковий запит, щоб написати підсумок, і кожен наступний запит стає легшим. Це зберігає більше сенсу, ніж просте обрізання, ціною трохи деталей.
Контекстне вікно — це окрема межа: воно обмежує, скільки токенів може вмістити один запит, включно з відповіддю. Історія зрештою досягне цієї стелі; Чому відповідь AI обривається на півслові? пояснює це.
Побачте це у власному коді#
Відповідь містить об'єкт usage, тож ви можете спостерігати зростання самостійно. Це приклад: замініть ключ і візьміть id моделі з документації CheapTokens, бо id різняться між провайдерами.
from openai import OpenAI
client = OpenAI(base_url='https://api.cheaptokens.dev/v1', api_key='YOUR_KEY')
system = {'role': 'system', 'content': 'You are a helpful assistant.'}
history = []
KEEP = 7 # new message + last 3 exchanges (6 messages); None keeps everything
def ask(text):
history.append({'role': 'user', 'content': text})
r = client.chat.completions.create(
model='MODEL_ID_FROM_DOCS',
messages=[system] + (history[-KEEP:] if KEEP else history),
)
answer = r.choices[0].message.content
history.append({'role': 'assistant', 'content': answer})
print(r.usage.prompt_tokens, r.usage.completion_tokens)
return answerВикличте ask() кілька разів підряд і надрукуйте prompt_tokens: з KEEP = None він зростає з кожним ходом, з KEEP = 7 він виходить на плато. Для агентів, що проходять багато кроків, той самий ефект стосується кожного кроку; Як оцінити вартість AI-агента показує, як це закласти в бюджет.
Де запускати довгі чати#
Довгі діалоги та цикли агентів — це саме ті навантаження, де домінує обсяг входу, тож і велике контекстне вікно, і місце для довгих відповідей обидва важливі:
- MiniMax-M2.7: контекст 180K, до 8,192 токенів на відповідь, вхід і вихід обидва дешевші за довідкову ціну OpenRouter.
- DeepSeek-V4-Flash: контекст 380K, до 32,768 токенів на відповідь, вихід дешевший за довідкову ціну OpenRouter.
CheapTokens має один баланс для всіх моделей, фіксовану ціну за модель без пікових годин і API, сумісний з OpenAI Chat Completions та Anthropic Messages, тож наведений вище код працює після зміни базової URL-адреси. Поповніть баланс і надішліть свій перший запит, дотримуючись Вашого першого API-запиту з CheapTokens.



