Назад в блог
LLM Systems

Контроль token cost: лимиты, маршрутизация и наблюдаемость

Считайте принятый ответ

Лимиты и допустимый маршрут

Авторская модель COST-GATE-6
Допущения, а не тариф поставщика
ТемаCost per accepted answer
ФокусCOST-GATE-6
СтатусPUBLISHED / 2026-10-11
Потоки токенов проходят через бюджетный шлюз и маршруты к панели наблюдаемости
Потоки токенов проходят через бюджетный шлюз и маршруты к панели наблюдаемости
TERMINAL_PREVIEW.LOG
$ cost --contract COST-GATE-6
> bind: task / budget / tariff
> route: eligible / capped
> measure: accepted answer
Разбор

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

За общей архитектурой AI-проекта обращайтесь к странице AI-специалиста в Армении. Смежные услуги — prompt engineering и AI-автоматизация. Здесь рассматривается узкая задача контроля token cost; правила выбора модели подробно описаны в model routing, а проверка качества — в evaluation suite.

Из чего состоит стоимость

Разделите фиксированные расходы, переменные расходы на запрос и стоимость контроля. Входные токены включают системные инструкции, историю, извлечённые документы и результат инструмента. Выходные токены включают ответ и структурированные поля. Повторный вызов, резервная модель и исправление невалидного ответа расходуют дополнительный бюджет. Для длинного контекста проверьте правила тарификации конкретного провайдера на дату расчёта; тарифы меняются. Храните версию цены вместе с версией маршрута.

Формула для одного класса задач: API = N × ((I × Pin + O × Pout) / 1_000_000) × A, где N — число запросов за период, I/O — средние входные/выходные токены, Pin/Pout — цена за миллион токенов в выбранной валюте, A — измеренный коэффициент дополнительных вызовов. Отдельно прибавьте поиск, хранение, инструменты, наблюдаемость и человеческую проверку. Делите сумму на число принятых ответов, а не на число попыток.

Копируемая модель сметы COST-GATE-6

Ниже гипотетический пример в условных денежных единицах (у.е.) за месяц, составленный 27 октября 2026 года. Это допущения для демонстрации арифметики, а не рыночные цены или результаты aicoding.am. Pin=2, Pout=8 у.е. за миллион токенов; I=2000, O=500 токенов; дополнительные вызовы A=1.15; прочие переменные расходы 0.003 у.е. на запрос; фиксированные 50 у.е. в месяц. Качество и допустимость маршрута здесь не оценены.

Запросов NAPI = N × 0.008 × 1.15Прочие переменныеФиксированныеВсегоПри 80% принятых: цена ответа
1 0009.203.0050.0062.200.07775
10 00092.0030.0050.00172.000.02150
100 000920.00300.0050.001 270.000.015875

Скопируйте формулы и замените все допущения своими данными. При другом миксе задач считайте каждый класс отдельно и суммируйте, иначе длинные запросы скроются за средним. Сценарии показывают, как фиксированная часть распределяется по объёму; они не предсказывают будущую нагрузку или скидку.

Три сценария масштаба

Пилот (1 000 запросов). Главное — увидеть распределение длины запроса и долю принятия. Не оптимизируйте тариф до проверки качества и прав доступа. Сохраняйте версии промпта и источников для воспроизводимости.

Рабочий процесс (10 000). Группируйте трассы по задачам: FAQ, поиск документов, черновик, действие. Для каждого класса задайте максимум входа и выхода, допустимые модели и число повторов. Проверяйте стоимость принятого ответа рядом с долей отказов.

Большой объём (100 000). Следите за дневным и месячным бюджетом, аномалиями, очередью и перерасходом по tenant. Вводите ограниченный выпуск нового маршрута и откат, если цена уменьшается ценой критичного регресса. Прогноз пересчитывайте по фактическим p50/p95 токенов, а не по одной средней.

Скрытые расходы и ошибки оценки

Короткий промпт может ухудшить извлечение фактов и увеличить число повторов. Более дешёвая модель может дать меньше принятых ответов и больше ручного разбора. Кэш требует контроля tenant, прав, версии источника и срока действия; неверное попадание дороже экономии токенов. Поиск и индексация документов, хранение трасс, алерты, тесты, поддержка и изменения модели тоже входят в TCO. Если поставщик меняет цену или правила кеширования, обновите расчёт, не переносите старую ставку молча.

Не логируйте секреты, персональные данные и полный пользовательский текст ради наблюдаемости. Храните идентификатор задачи, версию маршрута и промпта, число токенов, код результата, стоимость по версии тарифа и причину отказа. Для аудита выбирайте ограниченные обезличенные выборки. Лимит на пользователя или tenant предотвращает неожиданный счёт, но должен иметь понятный fallback: отказ, очередь или передача человеку.

Как получить корректную оценку

Зафиксируйте период, валюту, дату тарифа, объём запросов по классам, распределения входа/выхода, допустимые модели, долю повторов и критерий принятого ответа. Прогоните одинаковые обезличенные кейсы через текущий и кандидатный маршрут; измерьте цену, качество, задержку и ручной труд. Для оценки диапазоном рассчитайте низкий, базовый и высокий объём и коэффициент повторов. Публикуйте допущения рядом с цифрами, не выдавая расчёт за счёт production.

За диапазонной оценкой и TCO передайте объёмы, обезличенные примеры, ограничения данных и целевые критерии качества. Это позволит сравнить варианты без ложной точности.

Как контролировать бюджет

Определите контракт COST-GATE-6: (1) класс задачи и область данных; (2) максимальные токены и стоимость запроса; (3) допустимый маршрут по результатам evaluation; (4) максимум повторов и fallback; (5) проверка ответа; (6) учёт цены принятого результата. Маршрутизатор не должен обходить ограничения доступа или выпускать невалидный ответ ради снижения расходов.

ts
const budget = budgetFor(task.class, tenant);
const route = eligibleRoutes(task, policy, evaluationVersion)
  .filter(r => estimatedWorstCase(r, task) <= budget.perRequest)
  .sort(byCostPerAcceptedAnswer)[0];
if (!route) return review('no_eligible_route');
const candidate = await callWithTokenCap(route, task, budget.tokenCap);
const verdict = validate(candidate, task);
recordUsage({ route, tokens: candidate.usage, tariffVersion, verdict });
return verdict.accepted ? candidate.answer : boundedFallbackOrReview(verdict);

Проверяйте дневной burn rate, прогноз месяца, долю запросов у лимита, входные/выходные токены по классам, стоимость принятого ответа, критичные ошибки и ручной разбор. Алерт должен показывать причину роста: объём, длина контекста, повторы, смена модели или тариф. Перед выпуском нового маршрута сравните одинаковые задачи и остановите его при ухудшении качества или нарушении политики, даже если токены стали дешевле.

CODE_BLOCK.TXT
const route = eligibleRoutes(task, policy).filter(withinBudget)[0];
if (!route) return review("no_eligible_route");
const answer = await callWithTokenCap(route, task);
return validate(answer) ? accept(answer) : boundedFallbackOrReview(answer);