AI cost optimization concept page covering prompt caching, model routing, batch API, distillation, semantic response cache, per-user budgets, self-host vs API break-even.
LLM-cost ломает unit-экономику быстрее любой другой статьи расходов. Naive «отправляй всё в Opus / GPT-4» при 10M запросов/день = $500K/month выкинуто на запросах вроде «расскажи шутку» или «суммаризируй это письмо». Реальные продакшен-системы (Cursor auto, Notion AI, Perplexity Sonar, GitHub Copilot) показывают: 60-80% запросов решаются дешёвой моделью или вообще берутся из кеша — но только если архитектура построена как ladder с early exit, а не как «один LLM по умолчанию».
Эта страница — про то, какие рычаги реально двигают bill: prompt caching (×10), model routing (×5-13), batch API (×2), distillation (×8), semantic response cache (×∞ на hit), self-host break-even (только при steady > 100M tok/day).
LLM cost = tokens × price-per-token × number-of-calls. Атаковать каждый множитель отдельно:
Архитектурно это ladder с early exit: каждый запрос идёт через cache → classifier → router → cheap model → expensive model, выходя на первой ступени, где задача решена. Каждая ступень логируется в cost-meter (Helicone / Langfuse / Braintrust), потому что оптимизация без eval = тихая регрессия качества.
Четыре зоны, склеенные через router и cost-meter:
user и api (AI gateway). На api висит ADR-001 про cost ladder: response-cache → router → cheap → expensive, с per-user budget на каждом шаге.response-cache (Redis + embedding hash, semantic match по cosine > 0.92), classifier (Phi-3.5 1B distilled, $0.0001/call), router (NotDiamond / DIY), budget (Redis token bucket per user/org), cost-meter. На classifier висит ADR-002 про distillation и выбор quantization tier (INT8 vs INT4 AWQ).haiku (cheap, $0.25/$1.25 per 1M), sonnet (mid, $3/$15), opus (expensive, $15/$75). На haiku висит ADR-003 про prompt caching layout: stable system + tools first, dynamic last.batch-q и batch-api (Anthropic Message Batches / OpenAI Batch, 50% off, 24h SLA). На batch-api висит ADR-004 про когда использовать batch (eval suite, embedding regen, dataset labeling, content moderation).vllm с Llama 3.3 70B INT4 на A100 spot. На нём ADR-005 про hybrid (API baseline + self-host для steady customers) с break-even анализом.Edges — только физические соединения. Ответы в анимации идут reverse по тем же стрелкам.
Prompt caching cuts cost 90%. Multi-turn чат с Claude Sonnet: system prompt 12K + tools 3K + few-shot — стабильный prefix, помечен cache_control: {type: "ephemeral"}. Turn 1: cache write at 1.25× input price ($0.056) + output ($0.012) = $0.068. Turn 2: cache read at 0.1× input ($0.0045) + новый user delta + output = $0.023 — в 3× дешевле первого turn. За 20-turn session: $0.50 вместо $5.00 (×10 экономия). Anthropic Claude Code держит ~95% cache hit rate именно из-за этого паттерна.
Критичное правило: cache key = exact prefix match. Любая динамическая часть (Date.now(), request ID, user-specific data) в начале промпта → 0% hit rate. Tools нужно сортировать детерминированно (alphabetically by name), иначе один shuffled tool def на restart = cache miss на всё.
Haiku → Sonnet escalation. Запрос «переведи параграф и объясни идиомы культурно» — classifier даёт simple, confidence 0.72, router отправляет в Haiku ($0.0008). Ответ возвращается, LLM-as-judge даёт score 0.61 (порог 0.75) — недостаточно. Retry на Sonnet ($0.018), судья даёт 0.91 — accept. Total $0.019 — даже с sunk cost от Haiku attempt это в 4× дешевле, чем сразу слать в Opus ($0.082).
Real-world распределение: 70% запросов решает Haiku, 25% эскалируют до Sonnet, 5% доходят до Opus. Avg cost/query: $0.0035 vs $0.045 на «всё в Opus» = ×13 экономия на 10M запросов/день = $1.5K/day = $550K/year saved.
Escalation обязательно нужен с hard cap (max 2 retries), иначе agentic loop уйдёт в Opus×10 и съест бюджет за час.
Batch API for nightly eval. Cron 02
UTC: 5000 queries × 3 prompt variants = 15000 запросов сериализуются в JSONL на S3 (одинcustom_id на строку), submit в Anthropic Message Batches. Provider возвращает batch_abc123, статус validating → in_progress. Через 2h45min — complete, 14987 успехов + 13 ошибок (retried через sync API).
Cost: 60M input + 12M output @ 50% off = $112.50 вместо $225 sync = $41K/year saved при ежедневном eval. Те же 50% применимы к: embedding refresh (>1000 docs), distillation dataset labeling (100K examples), content moderation backlog.
Анти-паттерны: submit в peak (US business hours для OpenAI) растягивает SLA до 6-12h; batch без custom_id ломает attribution; невалидация output_count == input_count = silent dropped rows.
ADR-001 (api): Cost ladder с early exit. Каждый запрос проходит cache → budget → classifier → router → cheap → expensive, выходя на первой решающей ступени. Cost: $0 если cache hit, $0.0001 на classifier, $0.0008-0.018 на cheap/mid, $0.05+ на Opus. Принимаем: усложнение pipeline (5 hops вместо 1) и риск misroute. Получаем: 50-70% cost reduction (RouteLLM paper, Cursor blog) при 3-5% quality loss, измеренной через eval suite.
ADR-002 (classifier): Distillation вместо Haiku-as-classifier. Phi-3.5 1B distilled на 50K labeled queries (labels от Opus-judge), deployed на L4 spot ($0.50/h) с vLLM + AWQ-int4. Throughput 200 req/s, p99 = 25ms, $0.0001 vs $0.0008 у Haiku = ×8 cheaper и ×8 быстрее. Принимаем: ML pipeline (labeling, retraining на drift, eval goldset 1K queries weekly). Получаем: $45K/year saved при 10M req/day + sub-25ms classification (vs 200-400ms на LLM call). Fallback при confidence < 0.6 — escalate к Sonnet.
ADR-003 (haiku/sonnet/opus): Prompt caching layout. Обязательный порядок: system → tools → few-shot → [cache breakpoint] → user/history/RAG. До 4 cache breakpoints в Anthropic request — можно разделить tiers («этот блок на час», «этот на 5 минут»). Принимаем: cache write на 1.25× и storage cost для 1h beta (2× от 5min). Получаем: 10× saving на multi-turn (100K system prompt × 1000 calls/h: $300/h → $30.30/h). Monitor: cache_read / cache_creation ratio должен быть > 5
ADR-004 (batch-api): Batch API для non-interactive. Все workloads с tolerable latency > 5min — через batch (eval, embedding regen, labeling, async moderation). Anthropic до 100K req/batch, OpenAI до 50K, Gemini тоже. Принимаем: 24h SLA cap (typically 1-4h actual, но в peak может уехать), 1-2% straggler rate (retry sync), отдельный invoice line. Получаем: flat 50% discount на input+output. Submit at 02
UTC — off-peak provider window, реальный SLA ~2-4h.ADR-005 (vllm): Hybrid API + self-host. Self-host только при steady > 50M tok/day постоянно (не peak). Llama 3.3 70B INT4 AWQ на A100 spot ($1.20/h, 35GB VRAM) + speculative decoding (Llama 3.2 1B draft). Self-host обслуживает baseline и known heavy customers, API absorbs spikes и Opus-tier complex queries. Принимаем: capacity planning, spot preemption (graceful fallback к API через 10-60min до replacement), model upgrade lag vs frontier. Получаем: ×9 cheaper на 1B tok/day, predictable cost, data sovereignty. Break-even: 100M tok/day ($88 API vs $96 self-host).
auto mode — model routing (Haiku для autocomplete, Sonnet для chat, Opus для agent), published 50-70% cost reduction.