|
Professor Seleznov
|
Небольшой пост по кэшированию в современных и почему это важно понимать ⭐ Это один из тех механизмов, который на прямую влияет на ваши пятичасовые и недельные окна. Ну и, конечно, на прямые расходы, если вы платите через 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 символов-Источник
|
|
|