Контроль затрат
На что на самом деле расходуются токены при работе агентов и какие четыре фактора влияют на итоговую стоимость.
Если вы запускали агента для работы с кодом на полный рабочий день, вы уже видели счёт. Агентные циклы потребляют токены в масштабах, нехарактерных для обычного чата: каждый прочитанный файл, каждый результат инструмента и каждый diff попадают в контекст и повторно отправляются на следующем шаге.
Выходные токены обходятся дороже
У каждой передовой модели выходные токены стоят в 4–5 раз дороже входных. Модель, которая рассуждает вслух в окончательном ответе, тратит деньги быстрее, чем та, что отвечает кратко. Осознанно ограничивайте max_tokens и предпочитайте модели с краткими ответами для повседневных задач.
| Модель | $/млн входных | $/млн выходных | Соотношение |
|---|---|---|---|
claude-opus-4-8 | $3 | $15 | 5× |
claude-sonnet-4-6 | $0.90 | $4.50 | 5× |
claude-haiku-4-5 | $0.40 | $2 | 5× |
gemini-3-flash | $0.20 | $1.20 | 6× |
Четыре способа снизить затраты
- Выбирайте модель по задаче. Для классификации, извлечения данных и маршрутизации не нужен Opus — Haiku выполняет эти задачи примерно за седьмую часть его стоимости. Оставьте флагманскую модель для задач, требующих сложных рассуждений.
- Кэширование промптов. Неизменные системные промпты и определения инструментов повторно считываются из кэша за малую долю стоимости входных токенов. Для агентов это самый действенный способ снизить затраты — см. Кэширование промптов.
- Сокращайте контекст на каждом шаге. Не отправляйте повторно всю историю диалога; сохраняйте последние сообщения и постоянно обновляемую сводку. Именно неограниченный рост контекста превращает сессию стоимостью $2 в сессию за $20.
- Ограничивайте цикл. Установите жёсткий лимит шагов для автономных запусков, чтобы застрявший агент не мог бесконечно повторять цикл.
Оценка затрат до запуска
IN_RATE = {class="s">"claude-opus-4-8": 3.0, class="s">"claude-sonnet-4-6": 0.9, class="s">"claude-haiku-4-5": 0.4}
OUT_RATE = {class="s">"claude-opus-4-8": 15.0, class="s">"claude-sonnet-4-6": 4.5, class="s">"claude-haiku-4-5": 2.0}
def cost(model, tok_in, tok_out):
return tok_in / 1e6 * IN_RATE[model] + tok_out / 1e6 * OUT_RATE[model]
print(cost(class="s">"claude-opus-4-8", 20_000, 2_000)) class=class="s">"c"># 0.09
print(cost(class="s">"claude-sonnet-4-6", 20_000, 2_000)) class=class="s">"c"># 0.027
print(cost(class="s">"claude-haiku-4-5", 20_000, 2_000)) class=class="s">"c"># 0.012
Одна и та же задача с 20K входных и 2K выходных токенов стоит на Opus в 7.5 раз дороже, чем на Haiku. Если задача — классификация, такая переплата ничего не даёт.
Измерение после запуска
Каждый ответ содержит usage объект. Записывайте его в журнал вместе с идентификатором запроса и типом задачи — без этого оптимизация затрат превращается в гадание. Панель управления шлюзом показывает использование по моделям, но только ваши собственные журналы позволяют понять, *зачем* был сделан запрос.