Назад в блог

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

Почему ИИ-агенты тратят так много токенов: расчёт на 20 шагов

Агент на каждом шаге заново отправляет историю, список инструментов и их ответы. Разбираем, куда уходят токены, на примере из 20 шагов.

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

Карточка чата: один вопрос, а токенов сотни тысяч? Каждый шаг пересылает всю историю.
Содержание
  1. Что такое агент: одна картинка
  2. Три вещи, которые едут с каждым шагом
  3. Один запуск на 20 шагов, с подсчётом
  4. Где резать: четыре привычки
  5. Посчитайте свой запуск

Вы задали агенту один вопрос, он поработал несколько минут, а в статистике — сотни тысяч токенов. Ничего не сломалось. Агент работает в цикле, и каждый круг заново отправляет всё, что было сказано: список инструментов, историю, ответы инструментов. Всё это считается входными токенами. Сам ответ короткий, а вот то, что читается снова и снова, — нет.

Что такое агент: одна картинка#

Обычная модель в чате отвечает один раз. Агент — та же модель в цикле с инструментами: прочитать файл, поискать в сети, запустить команду. Между обращениями модель ничего не помнит. Представьте помощника, который каждый раз после звонка всё забывает: когда он звонит снова, вы зачитываете записи с самого начала и добавляете одну строку. Так устроен API.

Документация Anthropic по tool use (проверено 26 октября 2026) описывает цикл так:

  1. Приложение отправляет сообщение пользователя и список инструментов.
  2. Модель отвечает stop_reason: "tool_use" и блоком tool_use: какой инструмент и с какими аргументами.
  3. Приложение запускает инструмент и отправляет второй запрос: прежние сообщения, вызов инструмента от модели, блок tool_result и тот же список инструментов.
  4. Модель отвечает или просит ещё один инструмент, и цикл идёт по новому кругу.

Там же сказано, что запросы с инструментами оплачиваются по всему отправленному входу, включая параметр tools, плюс выход. Так что на шаге 3 уходит не «только новое», а весь разговор целиком.

text
Запрос 1  tools + system + задача
Запрос 2  tools + system + задача + вызов 1 + результат 1
Запрос 3  tools + system + задача + вызов 1 + результат 1 + вызов 2 + результат 2
...

Механизм тот же, что в статье почему длинный чат стоит дороже, только быстрее. Чат растёт на одно сообщение, когда вы что-то пишете. Агент растёт на два блока на каждом шаге, и никто ничего не печатает.

Три вещи, которые едут с каждым шагом#

Список инструментов. Названия, описания и схемы параметров всех инструментов попадают в каждый запрос, даже если на этом ходу модель ни одним не пользуется. Ещё одна мелочь из документации: при включённых инструментах API добавляет собственную подсказку про tool use — 286 токенов на Claude Sonnet 5.5, Opus 5.5 и Haiku 5.5; у других моделей число другое.

История. Ваша задача, прежние вызовы инструментов, заметки модели.

Ответы инструментов. Вот это самое коварное. Прочитанный файл, страница результатов поиска, лог тестов: попав в историю, они оплачиваются заново на каждом следующем шаге.

Токен — это небольшой кусочек текста, примерно короткое слово или его часть, и всё перечисленное считается именно в них.

Один запуск на 20 шагов, с подсчётом#

Допустим, вы запускаете небольшого агента для кода с тремя инструментами (прочитать файл, найти, запустить тесты), и задача занимает 20 шагов. Берём такие допущения:

  • описания инструментов — 1 500 токенов, системная подсказка — 500, ваша задача — 200, так что каждый запрос начинается с 2 200 токенов;
  • на каждом шаге модель пишет вызов инструмента в 150 токенов, а инструмент возвращает 800;
  • оба попадают в историю, поэтому каждый шаг добавляет к следующему запросу по 950 токенов.
Размер входа одного запроса на шагах 1, 5, 10 и 20 запуска агента: 2 200, 6 000, 10 750 и 20 250 токенов, выход остаётся 150 на шаг
Входные токены запроса растут с каждым шагом, выход остаётся 150 токенов на шаг (допущения выше)

Чтобы получить итог запуска, сложите все 20 запросов. Базовые 2 200 отправляются 20 раз, а круги переносятся на следующие шаги: на шаге 1 их нет, на шаге 2 один, и так до 19 — всего 190 кругов.

20 × 2 200 = 44 000

950 × 190 = 180 500

44 000 + 180 500 = 224 500 входных токенов, а 20 × 150 = 3 000 выходных.

Агент написал 3 000 токенов, а прочитал 224 500. Каждый выходной токен стоит дороже входного (подробнее — входные и выходные токены), но их так мало, что счёт всё равно определяет вход. Вот этот запуск на текущих ценах:

Модель Стоимость OpenRouter
GLM-5.3-Flash $0.0046 $0.0095
DeepSeek-V4-Flash $0.0037 $0.0111
MiniMax-M2.7 $0.0117 $0.071

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

На DeepSeek-V4-Flash один такой запуск выходит в $0.0037, на GLM-5.3-Flash — в $0.0046. Сто запусков — это 22 450 000 входных и 300 000 выходных токенов: $0.367 на DeepSeek-V4-Flash. Таблица выше считает вход и выход вместе, и в сумме эти модели получаются дешевле OpenRouter.

Число шагов влияет сильнее, чем кажется. Запуск на 5 шагов при тех же допущениях:

5 × 2 200 = 11 000

950 × 10 = 9 500

11 000 + 9 500 = 20 500 входных токенов. Шагов вчетверо больше, а входа примерно в одиннадцать раз больше: каждый новый шаг перечитывает и все прежние.

Где резать: четыре привычки#

Проще всего сэкономить на одном ответе инструмента. Допустим, на шаге 3 запуск тестов вернул лог в 4 000 токенов. Дальше его пересылают 17 следующих запросов:

  • было: 4 000 × 17 = 68 000 входных токенов только из-за этого лога;
  • стало, если инструмент вернул лишь 40 нужных строк (около 400 токенов): 400 × 17 = 6 800.

Задача и ответ те же, а входа от этого результата в десять раз меньше. Отсюда четыре привычки:

  • Возвращайте из инструментов меньше. Строки вокруг ошибки, а не весь лог; нужную функцию, а не весь файл. Подробнее — в статье как не пускать вывод инструментов в контекст.
  • Давайте агенту меньше инструментов. Каждое описание едет в каждом запросе.
  • Ограничивайте число шагов и начинайте новую задачу, когда старая история уже не нужна.
  • Складывайте usage всех шагов и останавливайте запуск на заранее выбранном бюджете. Про оценку расходов — как оценить стоимость ИИ-агента.

Посчитайте свой запуск#

Каждый ответ сообщает, сколько токенов принято и сколько выдано, в поле usage. Сложите их по всем шагам, и у вас будут настоящие числа вашего агента вместо моих допущений. Набросок на Python с OpenAI SDK, направленным на CheapTokens (messages и tools — ваши, из агента):

python
from openai import OpenAI

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

total_in = total_out = 0
for step in range(20):  # цикл вашего агента
    resp = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Flash-0731",
        messages=messages,
        tools=tools,
    )
    total_in += resp.usage.prompt_tokens
    total_out += resp.usage.completion_tokens
    # ...запустите инструмент, добавьте результат в messages

print(total_in, total_out)

Два итога подставляются прямо в таблицу стоимости выше. Для длинных историй DeepSeek-V4-Flash даёт контекст 380K и до 32 768 токенов в одном ответе, с одной ценой в любое время суток; у GLM-5.3-Flash контекст 390K и до 8 192 токенов в ответе. Настройка — в документации, актуальная цена каждой модели — на странице цен, а у модели есть своя страница — дешёвый DeepSeek.