Prefix Cache
Как форма промпта, схемы инструментов и маршрутизация определяют, будет ли кеш работать в production.
Проблема
Кеш может быть включён, но cached_tokens остаётся низким. Часто проблема не в провайдере, а в форме запроса.
Симптомы
- Временная метка, request ID или поля тенанта появляются в начале.
- Списки инструментов меняют порядок или содержимое между шагами.
- Агентские циклы используют короткие динамические промпты, которые становятся дороже после cache miss.
- Round-robin маршрутизация размазывает прогретые префиксы по репликам.
Ментальная модель
Prefix cache требует три вещи: начало должно совпадать, запрос должен попасть туда, где префикс прогрет, и кеш должен жить достаточно долго для повторного использования.
Архитектура
Стабилизируй системный промпт, схемы инструментов и форматы ответа. Динамические поля перенеси поздно или в метаданные. Используй каноническую сериализацию. По возможности сохраняй историю append-only. Повторяющиеся префиксы направляй через affinity или prefix-aware маршрутизацию.
Метрики
Отслеживай кешированные токены, cache read input tokens, хеш префикса, число инструментов, версию схемы, TTFT, маршрут, реплику, версию промпта, число прогревов и признаки вытеснения кеша.
Компромиссы
Большой стабильный список инструментов может быть дешевле маленького динамического списка в агентском цикле. Но большие списки инструментов могут ухудшать качество выбора инструмента моделью, особенно на маленьких моделях.
Agentic tool surface
В агенте нельзя оптимизировать один запрос в отрыве от всей траектории. Динамический отбор tools выглядит дешевле на одном шаге, но если он меняет ранний prefix, агент начинает платить за cache miss на каждом следующем шаге. Сначала стабилизируйте prefix, потом уменьшайте prompt.
| Паттерн | Риск | Лучше |
|---|---|---|
| Dynamic tools на каждом шаге | новый prefix_hash | stable tools + masking |
| Разный порядок tools | cache miss без смыслового изменения | canonical order |
| request_id в schema | уникальный prefix | trace metadata вне prompt |
| route-specific system prompt | fragmentation | prompt families |
| tool filtering без проверок качества | дешевле, но хуже качество | router eval + cache metrics |
Self-hosted нюанс
В self-hosted контуре cache hit rate зависит не только от формы промпта, но и от планировщика, sticky routing, числа реплик, разделения prefill/decode и политики прогрева. После scale-out обычный round-robin может снизить кешируемость сильнее, чем изменение промпта.
Анти-паттерны
- Текущее время в первых системных токенах.
- Плавающий порядок
toolsиз неупорядоченного реестра. - Динамический
requestIdвнутри JSON-схемы. - Переписывание начала истории вместо append-only роста.
- Параллельный fan-out до прогрева общего префикса.
- Обычный round-robin для длинных общих префиксов.
Чеклист
- ✓Стабильные инструкции и схемы стоят первыми.
- ✓Динамические поля находятся поздно или вне кешируемого префикса.
- ✓Инструменты и форматы ответа сериализуются детерминированно.
- ✓Логи маршрута агента включают prefix_hash и tools_count.
- ✓Регрессии кеша поднимают алерт при падении cached tokens и росте TTFT.
Пример
В многошаговом агенте команда уменьшала набор инструментов на каждом шаге. Сырой промпт стал короче, но cached_tokens упали почти до нуля: порядок и состав инструментов начали менять начало запроса. Стабильное объявление инструментов и разрешённые инструменты на уровне маршрута вернули повторное использование кеша без лишнего раскрытия инструментов модели.
Шаблон решения
Для изменения кеша запиши форму промпта до и после, стабильность хеша префикса, распределение кешированных токенов, TTFT, стоимость задачи и влияние на качество.