Перейти к содержимому

Промпт-кеширование: как экономить на API агентов

Промпт-кеширование сокращает расходы на входные токены агентов в 5–10 раз: повторный префикс запроса читается из кэша по ставке 0.1× (Anthropic) или $0.0036 за миллион у DeepSeek. В статье — как это работает, кто и по каким ставкам кэширует, как попасть в кэш и проверить cache hit rate.

Миллион входных токенов у Claude Sonnet 5 стоит $2, у DeepSeek V4 Pro — $0.435 (цены на момент публикации, август 2026). Агент в длинной сессии пересылает весь контекст на каждом ходу, и без кэширования счёт растёт на глазах: сессия из 50 ходов с контекстом 200K токенов — это 10 миллионов входных токенов только на «перечитывание» истории. С кэшем тот же объём обходится примерно в $2.4 вместо $20. Разбор цифр — ниже.

Почему это вообще про агентов

Инженеры Anthropic, строившие Claude Code, формулируют прямо:

Prompt caching works by prefix matching — the API caches everything from the start of the request up to each cache_control breakpoint. This means the order you put things in matters enormously, you want as many of your requests to share a prefix as possible.

Промпт-кеширование работает за счёт матчинга префикса: API кэширует всё от начала запроса до каждой точки кэширования. Порядок содержимого в промпте критичен — нужно, чтобы как можно больше запросов делили один и тот же префикс.

— Thariq Shihipar, Claude Code team, «Lessons from building Claude Code: Prompt caching is everything», 30.04.2026

Причина в архитектуре: модель ничего не «помнит» между запросами. Каждый ход агента — новый запрос, который отправляет на сервер весь накопленный контекст: системный промпт, инструкции проекта, историю диалога, результаты работы инструментов и ваше новое сообщение. Без кэширования сервер пересчитывал бы каждую букву этого контекста заново на каждом ходу.

Как работает кэширование по префиксу

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

Два следствия, которые определяют всю практику:

  1. Совпадение должно быть точным. Изменение любого токена в середине префикса сбрасывает всё, что идёт после него. «Побуквенного» или посегментного кэширования файлов нет — это прямо указано в документации Claude Code.
  2. Порядок слоёв решает всё. Claude Code раскладывает запрос так, чтобы редко меняющееся шло первым: системный промпт → контекст проекта (CLAUDE.md, авто-память) → история разговора. Изменение системного слоя отбрасывает кэш ниже — потому что весь следующий контент теперь стоит за другим префиксом.
Схема: кэширование по префиксу — холодный и тёплый кэш
Схема автора: первый запрос обрабатывается целиком по полной ставке, следующие ходы читают префикс из кэша по ~0.1×. По материалам docs.claude.com и platform.claude.com.

Время жизни кэша (TTL) разное у всех провайдеров:

  • Anthropic — 5 минут в API-режиме и 1 час на подписке Pro/Max; каждый кэш-хит сбрасывает таймер, так что кэш живёт, пока вы работаете (docs.claude.com, Cache lifetime).
  • OpenAI — минимум 30 минут: параметр prompt_cache_options.ttl принимает единственное значение 30m, оно же по умолчанию; OpenAI может держать кэш дольше (документация).
  • DeepSeek — диск-кэш без фиксированного TTL: неиспользуемый кэш очищается в течение нескольких часов или дней (Context Caching).

Сам кэш живёт на стороне провайдера: у Anthropic это KV-кэш в памяти сервера, который не записывается на диск и не хранит сырой текст промптов (раздел про data retention). DeepSeek кэширует на диске.

У кого как: ставки и TTL

Провайдер Как включается Запись в кэш Чтение из кэша Время жизни
Anthropic (Claude API) автоматически + cache_control 1.25× цены входа (5 мин) / 2× (1 час) 0.1× цены входа 5 мин, опция 1 час
OpenAI (GPT-5.6 и новее) автоматически от 1024 токенов + явные breakpoints 1.25× цены входа пониженная кэш-ставка минимум 30 мин
DeepSeek V4 автоматически, без изменения кода отдельной платы нет $0.007–0.044/1M (≈3% от входа) часы–дни (диск)

Anthropic: читать по 0.1×, писать дороже

На Claude API кэш включается двумя способами: автоматически (один cache_control на уровне запроса) или явными точками кэширования (cache breakpoints) на отдельных блоках. Ставки фиксированные (Prompt caching, pricing):

Модель Вход Кэш-чтение (0.1×) Запись 5 мин (1.25×) Запись 1 час (2×)
Haiku 4.5 $1 $0.10 $1.25 $2
Sonnet 5 $2 $0.20 $2.50 $4
Opus 5 $5 $0.50 $6.25 $10
Fable 5 $10 $1.00 $12.50 $20

Минимальная кэшируемая длина промпта зависит от модели: 512 токенов у Opus 5, Fable 5 и Mythos 5, 2048 у Opus 4.7, 4096 у Opus 4.6/4.5 (Cache limitations). Кэш-хиты не вычитаются из rate limits — на высокой нагрузке это отдельный бонус (документация).

В Claude Code кэширование управляется автоматически: на подписке применяется часовой TTL, на API-ключе — пятиминутный. Вернуть часовой кэш на API можно переменной ENABLE_PROMPT_CACHING_1H=1, форсировать пятиминутный — FORCE_PROMPT_CACHING_5M=1 (docs.claude.com).

OpenAI: 1024 токена, явные breakpoints и 30 минут

У OpenAI кэш включается автоматически для промптов от 1024 токенов на моделях gpt-4o и новее. На GPT-5.6 и более новых семействах появляются две особенности (Prompt caching guide):

  • Запись в кэш платная — 1.25× от обычной ставки входных токенов. На моделях до GPT-5.6 доплаты за запись не было.
  • Явные точки кэширования. prompt_cache_breakpoint на конце стабильного префикса и общий prompt_cache_key на группе запросов. По умолчанию стоит неявная точка на последнем пользовательском или тул-сообщении; режим explicit отключает её, оставляя только ваши точки.

Без ключа улучшенный матчинг не работает, а под каждый ключ рекомендуется не больше ~15 запросов в минуту — выше часть запросов уходит мимо кэша.

DeepSeek: самый дешёвый кэш-хит

DeepSeek включает кэш автоматически, без изменения кода — «Context Caching on Disk» (Context Caching). Цены на момент публикации (Models & Pricing):

Модель Кэш-хит Кэш-мис (обычный вход) Выход
deepseek-v4-flash $0.0028 $0.14 $0.28
deepseek-v4-pro $0.0036 $0.435 $0.87

На странице цен отдельно помечено: с 16.08.2026 DeepSeek переходит на пиковые/внепиковые тарифы (пик — 01:00–04:00 и 06:00–10:00 UTC, вне пика вдвое дешевле). У V4 Pro вне пика кэш-хит будет $0.022, в пик $0.044 — всё равно примерно в 30 раз дешевле обычного входа ($0.66/$1.32).

Скриншот официальной страницы цен DeepSeek: кэш-хит и кэш-мис
Официальная страница «Models & Pricing» DeepSeek API: для deepseek-v4-pro кэш-хит $0.003625 против $0.435 за обычный вход. Источник: api-docs.deepseek.com, август 2026.

Механика у DeepSeek своя: система сохраняет общие префиксы нескольких запросов как самостоятельные единицы и может «размечать» длинные входы фиксированными интервалами токенов. Совпадение должно быть полным, кэш работает по принципу best-effort — 100% хитов не гарантируется (Context Caching).

Официальная документация DeepSeek: правила совпадения кэш-префиксов
Раздел «Cache Persistence and Hit Rules» документации DeepSeek API: запрос A+B+C полностью совпадает с сохранённым префиксом A+B и получает кэш-хит. Источник: api-docs.deepseek.com, август 2026.

Как попасть в кэш: практика

Общий принцип у всех провайдеров один: статичный контент вперёд, динамический — в конец. Инженеры Anthropic для Claude Code зафиксировали порядок так:

  • статичный системный промпт и определения тулов — кэшируются глобально;
  • CLAUDE.md — кэшируется в рамках проекта;
  • контекст сессии — кэшируется в рамках сессии;
  • сообщения разговора — растут ход за ходом (блог Anthropic).

В Claude Code ничего настраивать не нужно — агент сам раскладывает запрос по слоям и ставит кэш. Ваша часть — не мешать: выбирать модель и effort в начале сессии и не менять их в середине, не подключать и не отключать MCP-серверы по ходу задачи, делать /clear между несвязанными задачами. Подробно про управление контекстом — в статье «Контекст Claude Code: как управлять памятью агента», про оплату по токенам вместо подписки — в гайде по API-режиму.

В сыром Anthropic API точки кэширования ставите вручную через cache_control. Стабильные блоки (системный промпт, определения тулов) — в начало, под cache_control, изменчивые данные — в конец:

from anthropic import Anthropic
client = Anthropic()

system = [{
    "type": "text",
    "text": "Ты — ассистент поддержки продукта. Отвечай по базе знаний ниже.",
    "cache_control": {"type": "ephemeral"},   # точка кэширования
}, {
    "type": "text", "text": knowledge_base_text,   # большой стабильный блок
}]

resp = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    system=system,
    messages=[{"role": "user", "content": user_question}],  # динамический хвост
)

Точку ставьте на последний блок, который совпадает между запросами. Если навесить cache_control на блок с временной меткой или идентификатором запроса — префикс не совпадёт и кэш не сработает. Для разогрева кэша перед первым запросом пользователя есть официальный приём — прогрев с max_tokens: 0 (Pre-warming the cache).

В OpenAI API у GPT-5.6 тот же приём, но своими параметрами: явная точка prompt_cache_breakpoint на конце стабильного префикса и общий prompt_cache_key, чтобы запросы попадали в один кэш:

from openai import OpenAI
client = OpenAI()

resp = client.responses.create(
    model="gpt-5.6",
    prompt_cache_key="tenant:acme:support-v1",
    prompt_cache_options={"mode": "explicit"},
    input=[
        {"type": "message", "role": "system", "content": [
            {"type": "input_text", "text": "Ты — ассистент поддержки.",
             "prompt_cache_breakpoint": {"mode": "explicit"}},
        ]},
        {"type": "message", "role": "user", "content": question},
    ],
)

Режим explicit отключает автоматическую точку, поэтому дорогая переменная часть (история тулов, сообщения) не будет каждый раз записываться в кэш. Подробные примеры — в документации.

В DeepSeek делать ничего не нужно: система сама сохранит общий префикс при повторении. Единственное, что стоит поддерживать, — стабильный системный промпт и общий «хвост» инструкций в начале запроса (Context Caching).

Ещё один приём из блога Anthropic: устаревшие данные лучше передавать сообщениями, а не правкой системного промпта. В Claude Code для этого существует тег <system-reminder> — вставка в следующее сообщение не ломает префикс, тогда как редактирование системного слоя сбрасывает кэш целиком (блог Anthropic).

Официальный блог Anthropic: Lessons from building Claude Code — Prompt caching is everything
Заголовок инженерного поста команды Claude Code «Prompt caching is everything». Источник: claude.com/blog, 30.04.2026.

Что инвалидирует кэш

Полный список действий, после которых следующий ход пойдёт мимо кэша, есть в документации Claude Code:

  • смена модели (/model) или уровня effort (/effort) — у каждой модели и каждого effort собственный кэш;
  • компакция (/compact) — история заменяется резюме, префикс перестаёт совпадать;
  • подключение или отключение MCP-сервера, если определения тулов попадают в префикс;
  • включение fast mode;
  • обновление самого Claude Code — меняется системный промпт;
  • запрет целого инструмента (deny);
  • пауза дольше TTL.

Самый дорогой случай — возобновление старой сессии после паузы длиннее TTL: кэш истёк, и /compact при возобновлении перечитывает всю историю по полной ставке (docs.claude.com).

Схема: что ломает промпт-кэш и что он переживает
Схема автора: инвалидация кэша в Claude Code. Тёмная тема — для чередования с другими схемами статьи.

Часть действий кэш переживает. Правка файлов репозитория не трогает его (файл попадает в контекст, только когда агент его читает), правка CLAUDE.md в середине сессии применится только после /clear или рестарта, а /recap и /rewind добавляют или урезают контент так, что префикс остаётся тем же (docs.claude.com).

В сыром API Anthropic действует та же логика: изменение определений тулов сбрасывает весь кэш, переключение web search или citations меняет системный промпт, а смена tool_choice или появление изображения в промпте — тоже инвалидация (What invalidates the cache).

Про MCP: когда тулы загружены в префикс, подключение сервера по ходу сессии сбрасывает кэш. Механика самого протокола — в статье «Что такое MCP».

Как проверить экономию

Все провайдеры отдают статистику кэша в полях usage ответа. У Anthropic это две величины:

Поле Значение
cache_creation_input_tokens токены, записанные в кэш на этом ходе (по ставке записи)
cache_read_input_tokens токены, отданные из кэша (примерно 10% от ставки обычного входа)

cache_read_input_tokens: Tokens served from cache on this turn, billed at roughly 10% of the standard input rate

cache_read_input_tokens — токены, отданные из кэша в этом ходе; тарифицируются примерно по 10% от стандартной ставки входных токенов.

docs.claude.com, Check cache performance

Официальная документация Claude Code: поля cache_creation_input_tokens и cache_read_input_tokens
Раздел «Check cache performance» официальной документации Claude Code: высокое соотношение чтения к записи означает, что кэш работает. Источник: docs.claude.com, август 2026.

Если cache_creation_input_tokens стабильно высокий ход за ходом — что-то меняет префикс, и это стоит разобрать. В Claude Code есть и готовый инструмент: команда /usage показывает статистику по токенам и стоимости сессии, а для непрерывного мониторинга можно вывести поля кэша в статусную строку терминала через скрипт statusline (docs.claude.com).

У DeepSeek соответствующие поля — prompt_cache_hit_tokens и prompt_cache_miss_tokens (Context Caching), у OpenAI — cached_tokens (чтение) и cache_write_tokens (запись) (документация).

Честные ограничения

  • Кэш не бесплатный. Запись стоит 1.25× у Anthropic и OpenAI, а за часовой TTL у Anthropic — вообще 2× от входа. Если префикс меняется на каждом запросе, вы платите за постоянные записи и ничего не экономите. Кэш окупается на повторяющихся стабильных префиксах.
  • Короткие промпты не кэшируются. Минимум — 512–4096 токенов у Anthropic в зависимости от модели, 1024 у OpenAI.
  • Кэш умирает от паузы. Первый ход после перерыва дольше TTL (5 минут на API Anthropic, 1 час на подписке, минимум 30 минут у OpenAI) обрабатывается целиком по полной ставке.
  • Кэш привязан к машине и папке в Claude Code. Системный промпт вшивает рабочую директорию, платформу и состояние git, поэтому две сессии в разных папках не делят кэш, а параллельные сессии в одной — делят (Cache scope).
  • У сабагентов свой кэш. Их первый запрос не читает родительский кэш, а у DeepSeek кэш вообще работает на принципе best-effort без гарантии хитов.
  • Кэш экономит деньги, а не качество. Деградация длинных сессий никуда не девается — контекст по-прежнему нужно компактить и держать коротким. Это отдельная тема, разобранная в статье про контекст Claude Code.

Российские реалии

На доступ из России промпт-кеширование влияет косвенно, но ощутимо:

  • Anthropic по-прежнему недоступна из РФ. Россия не входит в список поддерживаемых стран, и даже страница документации по промпт-кэшу (platform.claude.com) отдаёт с российского IP заглушку «App unavailable in region» — как и весь Claude Platform. Обзор ситуации и способы оплаты — в статье про Claude Code в России (Habr, июнь 2026) и в практическом опыте «Как стать вайбкодером». Тем, кто платит через VPN и посредников, каждый доллар обходится дороже, поэтому кэш-хит в 0.1× важнее именно для таких пользователей: на длинной сессии экономия превращается в реальные сэкономленные переводы.
  • DeepSeek работает из РФ без VPN. На момент публикации api.deepseek.com и платформа отвечают с российского IP, документация и страница цен открываются напрямую. С кэш-хитом за копейки DeepSeek остаётся самой дешёвой бюджетной альтернативой для агентов — отдельный разбор модели — в статье про DeepSeek V4 Pro. Про оплату российскими картами честно: официальной информации и свежих подтверждённых кейсов на момент публикации найти не удалось, обычно требуется карта зарубежного банка или посредник.

Отдельного русскоязычного разбора именно промпт-кеширования в рунете на момент публикации нет. Ближайшее по теме:

Что в итоге

Промпт-кеширование — не опция, а встроенный механизм всех крупных API: Anthropic читает префикс из кэша за 0.1×, OpenAI берёт 1.25× за запись и держит кэш минимум 30 минут, DeepSeek кэширует на диске за копейки. Длинные агентные сессии без него были бы в разы дороже, и именно поэтому Claude Code построен вокруг кэша: команда Anthropic мониторит cache hit rate как uptime и поднимает SEV при просадке.

Практика сводится к четырём правилам: держать статичный контент в начале запроса, не менять модель и тулы в середине сессии, делать /clear между задачами и следить за cache_read_input_tokens против cache_creation_input_tokens. Соблюдаете их — длинные сессии перестают быть статьёй расходов.

Дальше по теме: Claude Code через API: подключение и лимиты, контекст Claude Code, установка Claude Code, что такое MCP, ИИ для баз данных и SQL.


Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка / 5. Количество оценок:

Оценок пока нет. Поставьте оценку первым.

Добавить комментарий

Adblock
detector