LLM cost budgets: код и cost-арифметика
Читай реальный код учёта token и ценовую арифметику, предсказывай расход и выбирай фикс с наибольшим рычагом — cost-арифметика, per-tenant budget, routing и cache savings.
Cost-инциденты диагностируются в счётчиках token и ценовой математике, а не в прозе. Прочитай код и числа, затем выбери фикс, который senior-инженер сделает первым.
Отработай цикл, который ты запускаешь на каждом скачке расходов: прочитай место вызова, посчитай per-token арифметику в уме, найди, где утекает budget, и потянись за фиксом с наибольшим рычагом раньше, чем поднимешь любой cap.
Сниппет 1 — per-turn cost-арифметика
// Sonnet 4.6: $3 / 1M вход, $15 / 1M выход
const PRICE = { in: 3 / 1e6, out: 15 / 1e6 };
// сессия на 50 ходов, system prompt на 4000 token повторно каждый ход,
// history растёт ~600 token/ход, каждый ответ ~400 output token.
let inputTotal = 0;
for (let turn = 1; turn <= 50; turn++) {
const history = 600 * (turn - 1);
inputTotal += 4000 + history; // system prompt + накопленный history
}
const outputTotal = 50 * 400;
const cost = inputTotal * PRICE.in + outputTotal * PRICE.out;
Какое утверждение о стоимости этой сессии верно?
Сниппет 2 — per-tenant budget enforcement
async function callModel(tenantId: string, req: Request) {
const spent = await budget.getMonthlySpend(tenantId); // async-чтение
if (spent >= LIMIT[tenantId]) throw new BudgetExceeded();
const res = await llm.create(req); // биллит token
await budget.add(tenantId, costOf(res)); // запись после
return res;
}
У этого per-tenant budget-гарда есть дефект, который вскроет всплеск конкурентных запросов. Какой и в чём фикс?
Сниппет 3 — решение о model routing
// Haiku $1/$5, Opus $5/$25 (за 1M вход/выход). Средняя задача: 1k вход, 500 выход.
const opusOnly = 1000 * 5/1e6 + 500 * 25/1e6; // сразу на Opus
// Cascade: сначала Haiku; при провале платим ещё и Opus. p = escalation rate.
function cascade(p) {
const haiku = 1000 * 1/1e6 + 500 * 5/1e6;
const opus = 1000 * 5/1e6 + 500 * 25/1e6;
return haiku + p * opus; // Haiku платим всегда
}
opusOnly ≈ $0.0175/задача. При каком escalation rate p cascade перестаёт экономить деньги?
Сниппет 4 — расчёт cache savings
// Anthropic: cache read = 0.1x базового входа; 5-мин write = 1.25x базового входа.
// Стабильный префикс = 10 000 token, базовый вход $3/1M, переиспользуется N ходов.
function prefixCost(N: number, cached: boolean) {
const base = 10000 * 3/1e6; // полноценная отправка
if (!cached) return N * base; // повторно каждый ход
const write = 10000 * (3 * 1.25)/1e6; // одна cache write
const read = 10000 * (3 * 0.1)/1e6; // каждая cache read
return write + (N - 1) * read;
}
Для префикса на 10 000 token, переиспользуемого 50 ходов, сколько примерно экономит caching и когда окупается?
Каждое cost-решение читается в счётчиках и арифметике: повторно отправляемый префикс плюс растущий history делают долгую сессию квадратичной по входу; per-tenant budget-гард должен быть атомарным (reserve/commit) и в паре с per-request cap, иначе гонки конкурентности пробьют лимит; cascade Haiku→Opus экономит лишь пока escalation rate низок (cost break-even ~0.8, операционный алярм ~30%); а prompt-кэширование префикса 10k за 50 ходов режет ~88% и окупается на первом попадании. Сначала посчитай, затем чини самый большой член — обычно повторно отправляемый context — раньше, чем тронешь cap. Теперь, когда читаешь код учёта токенов на реальном инциденте, ты знаешь, какое число посчитать первым и за каким фиксом потянуться раньше, чем поднимать любой лимит.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.