Почему одна строка ломает всё
Кеш у провайдеров ИИ работает как префиксное дерево: система сравнивает первые N токенов нового запроса с предыдущим. Как только токены расходятся — кеш обрывается, и весь остаток промпта считается заново по полной цене. Самая частая причина переплаты за ИИ — это
datetime.now() или любая другая динамика в начале системного промпта:``
python
system = f"Current time: {datetime.now()}.\n{POLICY}\n{KNOWLEDGE_BASE}"
`
Время меняется на каждом вызове — значит, расхождение случается уже на четвёртом слове, и все две тысячи токенов политик и базы знаний каждый раз оплачиваются заново, хотя их содержимое не менялось вообще.
Сколько это стоит в деньгах
Токен из кеша дешевле обычного в 10–31 раз в зависимости от провайдера. На агенте с промптом 1200 токенов и 10 000 вызовов в день разница выглядит так:
- DeepSeek v4-flash: $158/мес без кеша против $8/мес с кешем
- OpenAI gpt-5.6-sol: $1440/мес против $173/мес
- Anthropic Sonnet: $1080/мес против $130/мес
Это и есть эффективность AI моделей на практике: экономия на токенах AI — не абстрактная метрика, а разница в тысячу долларов в месяц на одном-единственном агенте с одной забытой строкой.
Важный нюанс для тех, кто уже на Anthropic
У DeepSeek и OpenAI кеш включается автоматически. У Anthropic его нужно явно попросить параметром cache_control={"type": "ephemeral"} — без этой строки кеша нет вовсе, независимо от того, как собран промпт. Это критично для управления расходами ИИ: если вы просто скопировали пример кода без этого флага, вы платите полную цену за каждый вызов и даже не знаете об этом.
Баги, которые не видно глазами
Не все проблемы с оптимизацией кеша ИИ так очевидны, как время в системном промпте. Есть минимум четыре скрытых сценария:
- Плавающий порядок ключей при сборке схем инструментов из словаря — у Anthropic кеш покрывает tools, system, messages именно в таком порядке, и сбой в начале не виден в коде промпта.
- База знаний из set() — содержимое то же, порядок другой между процессами, префикс расходится.
- Истёкший TTL или проблема на стороне провайдера — сборка промпта корректна, но cache_read_tokens == 0. Чинится маршрутизацией запросов, а не переписыванием промпта.
- Шаблон, рендерящийся по-разному под нагрузкой — условный блок, который попадает в промпт раз в сто вызовов.
Общая черта всех четырёх — промпт большой, изменение маленькое, и без замера usage-полей, которые провайдер и так возвращает, это невозможно найти.
Что делать прямо сейчас
Оптимизация промптов начинается с одной проверки: посмотрите на первую строку своего системного промпта. Если там дата, время, ID сессии или любое другое значение, меняющееся между вызовами, — вынесите его в конец промпта или в отдельное сообщение. Дальше стоит логировать usage` из ответов провайдера в JSONL и смотреть на реальный процент попаданий в кеш — без этого переплата за ИИ остаётся невидимой, пока не придёт счёт за месяц.— — —
❤️ — сильно / 🔥 — так себе
💬 А ты что думаешь? Пиши в комментариях
🎧 Некогда читать — послушай голосовую версию ниже
📎 Читать статью целиком
📢 Подписаться на @aigoby
#AIинструменты #нейросети #AIтулы #ИИ #AI
