Перейти к содержимому
ОПТИМИЗАЦИЯ ЦЕНЫ

Сокращаем стоимость Claude API на 90% через prompt caching: гайд 2026

Prompt caching от Anthropic снижает цену входных токенов до 90% при повторном контексте. Реальные цифры, примеры кода и паттерны, которые работают в проде.

Если вы используете Claude в продакшене в 2026 году и ещё не включили prompt caching — почти наверняка вы переплачиваете, и часто на порядок. Кеширование промптов от Anthropic — это самый мощный рычаг для счёта за Claude API, и в отличие от большинства «трюков оптимизации» он прозрачный, детерминированный и поставляется в официальном SDK. В этом посте разберём, что такое prompt caching на самом деле, математику цены, паттерны, где оно реально окупается, и грабли, на которые наступают команды в первый месяц после внедрения.

Что такое prompt caching

Prompt caching позволяет помечать префиксные сегменты запроса как кешируемые. На первом вызове Anthropic сохраняет внутреннее представление этого префикса на своей инфраструктуре. На любом последующем вызове в течение короткого TTL (5 минут по умолчанию, обновляется на каждом попадании) тот же префикс отдаётся из кеша вместо повторного кодирования.

Подключение — добавление точки cache_control к content-блоку. Все блоки до и включая эту точку становятся частью ключа кеша. На один запрос допускается до четырёх breakpoint'ов, что даёт иерархическое кеширование — например, стабильный system prompt, потом стабильные описания инструментов, затем подвижная история диалога.

Кеш привязан к организации и к точному содержимому префикса. Изменение любого токена в кешируемом префиксе инвалидирует запись — это правильное поведение (вы никогда не получите устаревший контекст), но и самая частая причина, почему hit rate оказывается ниже ожидаемого.

Математика цены

Кеширование не бесплатно. Anthropic тарифицирует один и тот же входной токен по трём ставкам:

  • Обычный input — 1.0× базовой цены входа модели.
  • Cache write — 1.25× input (премия 25% за заполнение кеша).
  • Cache read — 0.1× input (10% от базовой ставки при попадании).

Точка безубыточности на любой кешируемый префикс: одно чтение по 0.1× плюс запись 1.25× обходят два «холодных» вызова по 1.0× после двух переиспользований. С третьего попадания каждый вызов на этом префиксе по сути бесплатен относительно некешируемого baseline.

Конкретный пример: system prompt на 20 000 токенов на Sonnet 4.6 при ~$3 за 1M входных токенов:

  • Холодный вызов: 20 000 × $3 / 1M = $0.060 за вызов.
  • Cache write: 20 000 × $0.50 / 1M = $0.01 (один раз на TTL).
  • Cache read: 20 000 × $0.05 / 1M = $0.001 за вызов.

Десять кешированных чтений в окне 5 минут стоят $0.075 + 9 × $0.006 = $0.129 против 10 × $0.060 = $0.600 без кеша. Это сокращение на 78% на десяти переиспользованиях, и потолок асимптотически идёт к теоретическим 90% при росте плотности повторов.

Где кеширование реально окупается

В продакшене стабильно окупаются четыре паттерна:

  1. Длинные system prompt. Всё, что больше пары тысяч токенов — подробные персоны, правила форматирования, brand voice, гайдлайны — нужно кешировать. System prompt по определению идентичен между запросами.
  2. RAG со стабильной базой знаний. Если в промпт зашит фиксированный корпус документов (документация продукта, политики, схемы) — кешируйте его. Переменные пользовательские запросы идут после breakpoint'а.
  3. Tool definitions у агентов. JSON-схемы функций/инструментов у нетривиального агента легко переваливают за 10K токенов. Между вызовами они почти никогда не меняются. Кешируйте.
  4. Многошаговые ассистенты с длинной историей. Кешируйте до последнего полностью стабильного хода. Каждое новое сообщение пользователя расширяет префикс; предыдущая история переиспользуется.

Код: Python и TypeScript через Claudexia

Claudexia предоставляет Claude через OpenAI-совместимый эндпоинт, и prompt caching проходит насквозь прозрачно — без дополнительной настройки, проприетарных заголовков и переписывания. Вы выставляете cache_control ровно так же, как против нативного API Anthropic.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_CLAUDEXIA_KEY",
    base_url="https://api.claudexia.tech/v1",
)

SYSTEM_PROMPT = open("system_prompt.txt").read()  # ~20K токенов

response = client.chat.completions.create(
    model="claude-sonnet-4.6",
    messages=[
        {
            "role": "system",
            "content": [
                {
                    "type": "text",
                    "text": SYSTEM_PROMPT,
                    "cache_control": {"type": "ephemeral"},
                }
            ],
        },
        {"role": "user", "content": "Сделай саммари последнего отчёта по продажам."},
    ],
)

usage = response.usage
print(usage.cache_creation_input_tokens, usage.cache_read_input_tokens)
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.CLAUDEXIA_KEY,
  baseURL: "https://api.claudexia.tech/v1",
});

const response = await client.chat.completions.create({
  model: "claude-sonnet-4.6",
  messages: [
    {
      role: "system",
      content: [
        {
          type: "text",
          text: SYSTEM_PROMPT,
          cache_control: { type: "ephemeral" },
        },
      ],
    },
    { role: "user", content: "Сделай саммари последнего отчёта по продажам." },
  ],
});

console.log(response.usage);

В объекте usage отдельно приходят cache_creation_input_tokens и cache_read_input_tokens — именно по ним проверяется, что кеш реально работает. Логируйте их в проде с первого дня.

Реальные цифры из прода

Клиент с внутренним support-агентом на шлюзе Claudexia перешёл с 22 000-токенового system prompt без кеша на тот же промпт за одним breakpoint'ом cache_control. До кеширования один system-сегмент стоил около $1 980/месяц при ~30 вызовах в час. После — при среднем попадании префикса 14 раз в окне 5 минут — та же строка упала до $215/месяц, сокращение 89% без изменений в выводе модели или качестве. Tool definitions, спрятанные за вторым breakpoint'ом, срезали ещё ~$140/месяц. Суммарно счёт агента за Claude упал с примерно $2 400/месяц до меньше $400.

Такое соотношение типично. Любая нагрузка со стабильным префиксом и хотя бы несколькими вызовами в окне 5 минут даст 70–90% экономии на input сразу после правильной настройки кеша.

Грабли

Несколько вещей ловят команды на первом раскате:

  • TTL 5 минут — скользящее окно, не абсолютное. Каждое попадание его обновляет. Но если трафик умер на полные 5 минут, следующий вызов снова платит 1.25× за запись. Для низкочастотных нагрузок это тихо съедает экономию — измеряйте распределение интервалов между запросами.
  • Четыре breakpoint'а — жёсткий лимит. Используйте иерархически: system → tools → статичный контекст → недавняя история. Не тратьте breakpoint'ы на под-сегменты, которые меняются вместе.
  • Инвалидация при любом изменении префикса. Одна правка в system prompt — даже пробел — инвалидирует запись. Относитесь к кешируемым префиксам как к иммутабельным build-артефактам и версионируйте их явно.
  • Минимальный размер блока. Совсем мелкие кешируемые блоки (меньше ~1K токенов на большинстве моделей) не кешируются вовсе — SDK молча их пропускает. Тривиальный контент кешировать смысла нет.

Когда кешировать не стоит

Кеш плохо подходит для нескольких сценариев:

  • Одиночные вызовы. Если промпт не будет переиспользован в течение 5 минут — вы платите премию 1.25× за запись просто так.
  • Короткие промпты. Ниже минимума на блок кеширование — no-op.
  • Сильно вариативный system prompt. Если в то, что выглядит как system prompt, шаблонизируются персональные данные — каждый вызов становится холодной записью. Вынесите переменное за breakpoint, либо кешируйте только стабильную «оболочку», смирившись, что персонализированный слой платит полную цену.

Claudexia и кеширование

Claudexia пробрасывает prompt caching на Anthropic прозрачно — те же breakpoint'ы, тот же TTL, тот же учёт в usage ответа. Никакого проприетарного «режима кеширования» включать не надо, а наши множители write/read в точности совпадают с тарифами Anthropic. Если вы уже кешируете напрямую против Anthropic, смена base_url на https://api.claudexia.tech/v1 сохраняет всю текущую экономию.

Если кеширование ещё не включено — включите на этой неделе. Это самое рентабельное изменение, которое вы внесёте в свою Claude-нагрузку за весь год.