Суть Читай реальные тела запросов Anthropic SDK и блоки usage, предсказывай, где встаёт cache breakpoint и попадёт ли он, и выбирай фикс наибольшего рычага.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min
Тело запроса решает, что кэшируется; блок usage говорит, сработало ли. Читай оба, предсказывай поведение и выбирай фикс, который сеньор делает первым — до того, как трогать TTL.
Цель
Отработай цикл, который ты гоняешь на каждом инциденте с кэшем: читай, где стоит cache_control breakpoint, читай поля usage для подтверждения попадания или тихого промаха, и тянись к фиксу порядка раньше, чем к ручке настройки.
Breakpoint поставлен корректно на последнем стабильном блоке, но кэш ни разу не попадает. Почему?
Heads-up Таймстамп сидит после breakpoint, поэтому он вообще не влияет на кэшируемый префикс — это ровно правильное размещение. Волатильный контент должен быть после breakpoint; он не причина промаха.
Heads-up Breakpoint кэширует весь префикс вплоть до своего блока включительно, так что breakpoint на последнем стабильном блоке кэширует оба блока. Размещение на документе корректно, а не причина промаха.
Heads-up Один breakpoint на втором блоке кэширует весь ведущий ряд, включая оба блока. Несколько текстовых блоков в system — норма и полностью кэшируемы.
Этот блок usage повторяется на каждом запросе в устойчивом высокочастотном трафике. О чём он говорит?
Heads-up cache_creation означает запись, а не чтение. Здоровый устойчивый трафик показывает cache_read_input_tokens высоким и cache_creation около нуля после прогрева. Устойчивые записи с нулевыми чтениями — сигнатура отказа.
Heads-up input_tokens (41) — это лишь некэшированный хвост. 30 218 токенов cache_creation тарифицируются по 1.25x как запись; ничего не прочитано по 0.1x.
Heads-up Это повторяется на каждом запросе в устойчивом трафике, так что это не одноразовый прогрев. Чтения остаются на нуле, потому что префикс меняется на каждом вызове.
1-часовой TTL выставлен и системный промпт стабилен, но hit rate скачет от деплоя к деплою. Какой фикс с наибольшим рычагом?
Heads-up TTL контролирует время жизни, а не стабильность префикса. Переставленный блок tools в начале ломает совпадение при любом TTL; длина окна не спасает меняющийся префикс.
Heads-up Перенос breakpoint не останавливает перестановку tools. Фикс — детерминированный порядок tools; только тогда важно размещение breakpoint.
Heads-up Смена тарифа меняет множитель записи, а не корневую причину скачущих попаданий. При недетерминированном порядке tools ты и так платишь записи постоянно.
Сниппет 4 — арифметика точки окупаемости
# Sonnet 4.6: базовый вход $3.00/MTok, запись в кэш (5м) $3.75/MTok, чтение из кэша $0.30/MTok# стабильный префикс на 20k токенов, перечитан N раз внутри окна TTLwrite_cost = 20_000/1e6 * 3.75 # одна записьread_cost = 20_000/1e6 * 0.30 * N # N чтенийuncached = 20_000/1e6 * 3.00 * (N+1) # те же N+1 запросов, без кэша
Викторина
Completed
При такой цене после скольких чтений кэширование префикса на 20k становится дешевле, чем не кэшировать вовсе?
Heads-up TTL меняет множитель записи (1.25x против 2x), а не то, бьют ли чтения полную ставку. При $0.30 против $3.00 за чтение даже 5-минутный тариф окупается на первом чтении.
Heads-up Премия — это лишь 0.25x одной записи (3.75 против 3.00). Она отбивается почти сразу, потому что каждое чтение экономит 2.70/MTok (3.00 − 0.30); одно чтение её с лихвой покрывает.
Heads-up Выходные токены не зависят от кэша и идентичны в обоих случаях; они выпадают из сравнения. Точка окупаемости задаётся целиком математикой записи против чтения на входе.
Итог
Любой вопрос о кэше читается в теле запроса и блоке usage. Breakpoint кэширует весь префикс вплоть до своего блока включительно, поэтому он принадлежит последнему стабильному блоку — но стабильный breakpoint бесполезен, если блоки перед ним (сначала tools, затем system) не побайтно идентичны, отчего недетерминированный порядок tools и ре-сериализованные пробелы — топовые отравители. Поля usage — единственная правда: высокий cache_creation при cache_read около нуля на устойчивом трафике — отравленный префикс, а не успех. А арифметика окупаемости жестока в пользу кэша — перечитываемый префикс бьёт полную ставку уже после одного чтения, так что реальная работа — держать префикс стабильным, а не тюнить TTL.