К содержимому
Claude Code с 0:полный курс
Уровень 3 · Деньги, скорость и production 5 мин Проверено автором · 25 июн. 2026 г.

Prompt caching: платим за повтор копейки

Prompt caching удешевляет повторы: ставь cache_control на стабильный префикс запроса и проверяй экономию по cache_read_input_tokens.

Уровень 3 · 0 / 4 уроков0%

В этом уроке нет практического задания — просто прочитай и ответь на вопросы.

Если в каждом запросе ты гонишь один и тот же большой кусок — инструкцию боту, каталог товаров, правила возврата — платить за него полную цену каждый раз глупо. Prompt caching позволяет закэшировать этот префикс: первый раз платишь чуть дороже (запись ~1.25×), а дальше читаешь из кэша почти бесплатно (~0.1× от цены входа).

Главное правило: кэш — это префикс

Запрос склеивается в фиксированном порядке: toolssystemmessages. Кэш работает по совпадению с начала. Любое изменение в префиксе сбрасывает кэш для всего, что идёт после. Поэтому стабильное (инструкция бота, каталог) — в начало, изменчивое (вопрос клиента) — в конец.

Ставишь cache_control на последний стабильный блок:

resp = client.messages.create(
    model="claude-opus-4-8",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": BIG_INSTRUKCIYA_I_KATALOG,
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[{"role": "user", "content": "Где мой заказ 4821?"}],
)

Как проверить, что сработало

Смотри в usage ответа:

"usage": {
  "input_tokens": 18,
  "cache_creation_input_tokens": 2360,
  "cache_read_input_tokens": 0
}

Первый запрос пишет кэш — растёт cache_creation_input_tokens. На втором с тем же префиксом должно появиться cache_read_input_tokens > 0 — значит, читаем из кэша и экономим.

Важно

Если cache_read_input_tokens упорно ноль — в префиксе что-то меняется на каждом запросе. Частые виновники: дата/время или datetime.now() в system, случайный id, несортированный JSON. Вынеси изменчивое в конец messages.

Кэш живёт около 5 минут и привязан к модели — сменил модель, и первый запрос снова пишет кэш заново.

Проверь себя

Отвечено 0/3
Режим:

Куда ставить стабильный контент (инструкцию бота, каталог), чтобы кэш работал?

Как убедиться, что чтение из кэша реально произошло?

Почему datetime.now() в system-промпте ломает кэширование?

Выполни задание в терминале и ответь на вопросы, чтобы завершить урок.

📝 Мои заметки

Сохраняется автоматически в этом браузере · видно на странице «Заметки».

Вопросы и ответы по уроку

Куда ставить стабильный контент (инструкцию бота, каталог), чтобы кэш работал?

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

Как убедиться, что чтение из кэша реально произошло?

cache_read_input_tokens > 0 — прямой признак чтения из кэша. Если он ноль на повторных запросах, префикс где-то меняется.

Почему datetime.now() в system-промпте ломает кэширование?

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

Почитать по теме в блоге

Листай уроки клавишами · поиск по ⌘K