Небольшой пост по кэшированию в современных LLM и почему это важно понимать ⭐
Это один из тех механизмов, который на прямую влияет на ваши пятичасовые и недельные окна. Ну и, конечно, на прямые расходы, если вы платите через API

-------------------
Вся архитектура Claude Code и других агентных LLM построена вокруг prompt caching
Без него работа современных агентных систем была бы на порядок дороже
И при этом про кэширование почти никто не знает. Давайте разбираться ⤵️
Сначала: что такое вообще это ваше кэширование
Кэш — это когда система не пересчитывает одно и то же заново, а сохраняет уже готовый результат и переиспользует его
С его помощью становится возможным эффективное переиспользование ранее просчитанных данных
Например, браузеры не скачивают логотип сайта при каждом открытии страницы. А берут его из локального кэша. Поэтому страница открывается быстрее, а серверу не надо отдавать один и тот же файл тысячу раз 🥰
С LLM логика похожая, только вместо картинок и файлов кэшируется часть вычислений внутри модели
Почему это критично для LLM
Модель STATELESS
КАЖДЫЙ РАЗ, когда вы отправляете сообщение в модель — не важно, Codex, Claude Code или Gemini CLI — в модель отправляется ВСЁ КОНТЕКСТНОЕ ОКНО, а не только ваше последнее сообщение
system prompt + tools + история диалога + новое сообщение
Она ничего не помнит и не знает о вас между запросами
А спустя час Claude Code пишет вам:
new task? /clear to save 161.5k tokens
Это значит, что сохранённый кэш длинного контекста уже не стоит считать надёжно доступным, и следующий запрос может потребовать полного пересчёта
Без кэша это дорого и медленно
Как работает prompt caching
У моделей бОльшая часть контекста не меняется от запроса к запросу
System prompt тот же. Описание инструментов то же. Большая часть истории та же. Меняется только новое сообщение в конце 🙏
Поэтому модель не пересчитывает весь этот повторяющийся префикс заново, а читает уже подготовленный кэш
Что именно кэшируется внутри
Под капотом трансформера для каждого токена считаются специальные Q/K/V-представления: Query, Key и Value
Для нового токена Query считается заново. А вот Key и Value для прошлых токенов уже были посчитаны раньше и не меняются, если префикс тот же
Модель уже прочитала старый контекст и держит его в готовом виде. И если префикс совпал, можно не пересчитывать его заново
Почему кэш легко сломать
Prompt caching работает только при точном совпадении префикса
Один лишний пробел, другой system prompt, изменившийся список tools — и совпадение ломается
В Claude Code порядок примерно такой:
System Prompt → Tool Definitions → Chat History → Current Input
И инвалидация каскадная: если поменялось что-то сверху, слетает всё ниже 💀
Например, если подключить или отключить MCP-сервер в середине большой сессии, то весь кэш слетит
Изменились tool definitions → сломался кэш tools, system и messages → следующий запрос перечитывает всё заново
Что ломает кэш
• Подключили или отключили MCP-сервер — слетает почти всё
• Включили web search — слетает system + messages
• Поменяли tool_choice — слетают messages
• Сделали compact — изменилась история, старый кэш уже не совпадает
• Поменяли reasoning / effort level — история перечитывается заново
• Сменили модель — кэш физически остаётся, но у другой модели свой namespace, поэтому он не работает
-------------
Это часть очень большой статьи про Context Engineering
https://habr.com/ru/articles/1028260/
-------------
Продолжение тут, в постах ограничение на 4000 символов