Что такое «token budget» для агента и как его выставлять?
Краткий тезис
budget — это заранее установленный лимит на количество токенов, которые агент может потратить за один call|вызов LLM, за одну сессию взаимодействия или за календарный период (день/месяц). Правильная настройка budget критична для контроля стоимости работы агента, предотвращения зацикленных или бесконечных цепочек вызовов и безопасной эскалации к человеку при превышении лимита. Бюджет выставляется на основе эмпирических замеров средней сложности задач, стоимости модели и допустимого времени ответа, а затем корректируется через мониторинг реального потребления.
1. Термин: Token budget (бюджет токенов)
budget — это максимальное количество токенов (единиц обработки LLM), которое агент может израсходовать в рамках одного или нескольких последовательных вызовов языковой модели. Токены включают как входные (prompt + контекст), так и выходные (сгенерированный ответ). Бюджет задаётся на трёх основных уровнях:
- Per task — на одну задачу (один полный цикл "мысль → действие → наблюдение");
- Per session — на одну сессию пользователя (несколько задач в рамках одного диалога);
- Per month — на аккаунт/пользователя/проект (суммарный лимит за месяц).
Зачем нужен budget? Без него агент может:
- попасть в бесконечный цикл вызовов (например, при плохо спроектированных цепочках мыслей);
- чрезмерно накручивать стоимость API (особенно при длинных контекстах);
- генерировать ответы, не укладывающиеся в ограничения по времени или ёмкости памяти.
2. Уровни бюджета: сравнение
| Уровень | Типичный лимит | Пример | Когда применять | Риски при превышении |
|---|---|---|---|---|
| Per task | 1000–8000 токенов (вход+выход) | 4000 input + 1000 output | Простые одношаговые команды | Агент не завершит задачу полностью |
| Per session | 10 000–100 000 токенов | 50 000 на диалог | Многошаговые рассуждения, планирование | Сессия прерывается, потеря контекста |
| Per month | 1 000 000–10 000 000 токенов | 5 млн на пользователя | SaaS-продукты, корпоративные аккаунты | Блокировка доступа, дополнительные счета |
Как видно, бюджет per task — самый детальный и критичный для архитектуры агента. Именно его мы настраиваем в первую очередь.
3. Как выставлять token budget?
Выставление бюджета — итеративный процесс, сочетающий эмпирику, анализ модели и мониторинг.
3.1 Эмпирический метод
- Запустите агента без ограничений на 10–100 типовых задач.
- Соберите статистику: количество токенов на вход, на выход, общее за задачу.
- Возьмите перцентиль 95 (P95) или 99 (P99) от распределения — это и будет per task budget.
- Для per session — сложите типичное число шагов задачи, умножьте на per task budget, добавьте запас 20–30%.
Пример:
- P95 токенов на задачу = 5000.
- Обычно задача решается за 3 шага → бюджет сессии = 3 × 5000 × 1,2 = 18 000 токенов.
3.2 Основанный на модели
Если известны лимиты контекстного окна LLM (например, GPT-4 Turbo – 128k), бюджет можно выставить как долю от окна:
- Per task 10–25% от максимального окна (чтобы оставалось место для истории взаимодействия).
- Per session 50–75% от окна, чтобы не перегружать модель.
3.3 Мониторинговый метод
Используйте инструменты логирования (LangSmith, Weights & Biases, собственный счётчик) для отслеживания фактического потребления. На основе трендов корректируйте бюджет: если 20% задач превышают текущий лимит, пора его увеличивать.
4. Механизмы при превышении token budget
Когда агент достигает лимита, система должна реагировать предсказуемо. Типовые механизмы:
- Остановка (hard stop): агент немедленно завершает выполнение, возвращает сообщение пользователю "Лимит токенов исчерпан".
- Урезание контекста (truncation): автоматически обрезается самая старая часть истории, чтобы уложиться в budget (например, суммирование предыдущих шагов).
- Эскалация человеку (human handoff): агенту не хватает бюджета — он передаёт управление оператору с частичным контекстом.
- Динамическое расширение если задача признана важной (например, VIP-пользователь), бюджет может быть увеличен до следующего уровня.
На практике комбинируют: сначала обрезают контекст, при повторном превышении — эскалация.
5. Мониторинг и оповещения
Мониторинг строится на журналировании каждого вызова LLM. Важные метрики:
- Budget usage процент использованного бюджета от лимита.
- Token overshoot на сколько токенов превышен лимит (для анализа).
- Cost per task стоимость одного выполнения.
Рекомендуется настроить алерт при 80% usage — это даёт время на реакцию до полного исчерпания бюджета.
Пример структуры лога (JSON):
{
"session_id": "sess_001",
"task_id": "task_001",
"step": 2,
"input_tokens": 1200,
"output_tokens": 340,
"total_used": 1540,
"budget_per_task": 2000,
"budget_remaining": 460,
"timestamp": "2025-03-15T10:30:00Z"
}
6. Пример кода на Python: счётчик и проверка бюджета
Демонстрация простой реализации для агента на основе OpenAI API:
import time
from openai import OpenAI
class AgentWithBudget:
def __init__(self, client: OpenAI, per_task_budget: int = 5000, model: str = "gpt-4"):
self.client = client
self.per_task_budget = per_task_budget
self.model = model
self.total_used = 0
self.task_used = 0
def _count_tokens(self, messages: list) -> int:
# Упрощённый подсчёт: длина строки * коэффициент (в реальности — tiktoken)
total = sum(len(str(m["content"])) for m in messages) // 4
return total
def call_llm(self, messages: list) -> str:
prompt_tokens = self._count_tokens(messages)
if prompt_tokens + 200 > self.per_task_budget - self.task_used:
raise BudgetExceeded("Превышен бюджет задачи")
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
max_tokens=min(200, self.per_task_budget - self.task_used - prompt_tokens)
)
used = prompt_tokens + response.usage.completion_tokens
self.task_used += used
self.total_used += used
return response.choices[0].message.content
class BudgetExceeded(Exception):
pass
Пояснения:
per_task_budget— лимит на одну задачу.task_usedсбрасывается при старте новой задачи.- При превышении выбрасывается исключение — агент может его перехватить и выполнить эскалацию.
7. Связь с токенизацией и стоимостью LLM
Token budget напрямую влияет на cost per task. Стоимость вызова = (input_tokens × price_input) + (output_tokens × price_output). Например, для GPT-4 (2024): $0.03 за 1k входных, $0.06 за 1k выходных. Если budget per task = 5000 токенов (скажем, 4000 input + 1000 output), то максимальная стоимость одной задачи ≈ ($0.03×4) + ($0.06×1) = $0.18.
Зная бюджет, можно оценить:
- стоимость тысячи решённых задач;
- ежемесячные расходы на агента;
- точку окупаемости по сравнению с ручной обработкой.
8. Практические советы по настройке
- Начинайте с консервативных значений например, 2000 токенов per task, 20 000 per session.
- Для multi-step агентов (ReAct, Plan-and-Execute) считайте бюджет на шаг: каждый шаг потребляет токены на размышление, действие и наблюдение.
- Используйте динамический budget если задача простая (например, получить погоду), лимит мал; для сложных резюмирований — больше.
- Отслеживайте тренды если среднее потребление растёт, возможно, агент стал галлюцинировать или зацикливаться.
- Разделяйте бюджет на "наблюдение" (observation) и "действие" (action): можно жёстко ограничить длину ответа модели, но разрешить большой контекст.
Пет-проект для закрепления
Задача Разработать агента-исследователя, который получает запрос пользователя, формулирует несколько поисковых запросов к веб-поиску, анализирует результаты и даёт сводку. Агент должен иметь настраиваемый token budget и механизм эскалации при превышении.
Инструменты Python, OpenAI API, tiktoken для точного подсчёта токенов, requests для поиска (можно имитировать), библиотека logging.
Шаги:
- Напишите класс
AgentWithTokenBudget, который принимаетper_task_budgetиmax_steps. - Внутри каждого шага (вызов LLM для формулировки запроса, обдумывания результатов) используйте
tiktokenдля подсчёта токенов. - После каждого шага проверяйте остаток бюджета; если он меньше 200 токенов, вызовите
_escalate()— отправьте уведомление в лог и верните частичный результат пользователю. - Ведите CSV-лог по каждому вызову: step, input_tokens, output_tokens, accumulated.
- Запустите на 10 случайных запросах, соберите статистику, подберите оптимальный
per_task_budgetчерез анализ P95.
Ожидаемый результат
- Скрипт агента, который ни разу не превышает заданный бюджет и корректно завершается или эскалирует.
- График распределения потребления токенов (гистограмма) с указанием P50, P95.
- Рекомендация по выставлению бюджета для конкретной модели.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 5 | Оценка качества retrieval в RAG |
| 7 | Уменьшение latency RAG-системы |
| 10 | Self-RAG и когда его использовать |
| 778 | Понятие "tool use" в агентах |
| 780 | Стратегии reranking в Agentic RAG |
| 785 | Мониторинг затрат на LLM в продакшене |
Навигация
- Предыдущий: 778
- Следующий: 780
- Индекс: 00. Индекс разборов