Почему доля попаданий в кэш AI-агента рушится: GPT, Claude и аудируемые gateway
Руководство с первичными источниками о сбоях кэша у сторонних агентов, механизмах GPT и Claude, воспроизводимом измерении и компенсации Modelflare.
Кэширование в AI-агенте — не флажок в настройках. Это контракт протокола, маршрутизации и учёта. В статье объясняется, почему агент третьей стороны может иметь очень низкую долю попаданий, хотя upstream-модель поддерживает prompt caching, чем отличаются механизмы GPT и Claude и что должен гарантировать проверяемый gateway.
Решение в одном предложении
Не помещайте production-агента, чувствительного к кэшу, за агентом или gateway третьей стороны, который не показывает нативное использование кэша, не сохраняет стабильный префикс, не поддерживает привязку модели и маршрута, не раскрывает TTL и знаменатель и не сверяет результат с долговечным ledger. «Поддерживает кэш» — это описание функции; измеренная доля попаданий для допустимого трафика — эксплуатационный факт.
Это не утверждение, что каждый сторонний агент обязательно ломается. Публичные документы не позволяют доказать общий процент для поставщика без фиксированного корпуса, модели, окна наблюдения и доказательств использования на уровне запроса. Более точный вывод таков: непрозрачный слой преобразования создаёт несколько независимых точек разрыва и способен превратить действующий кэш провайдера в почти всегда холодный путь. Для production-трафика, экономика которого зависит от кэша, отсутствие доказательств уже является причиной отказаться от пути.
Сначала определите знаменатель
Провайдер обычно сообщает три разных корзины. R — токены, прочитанные из кэша, W — записанные токены, U — входные токены, обработанные без повторного использования. Для префиксов, имеющих право на кэш, сопоставимая доля попаданий равна:
eligible_hit_rate = R / (R + W)
Для всего входа, отправленного модели, доля повторного использования равна:
input_reuse_share = R / (R + W + U)
Эти показатели отвечают на разные вопросы. Панель, делящая на весь вход, может показывать низкое значение из-за множества коротких запросов без права на кэш. Панель только для допустимого трафика может скрыть, что динамический суффикс по-прежнему формирует основную стоимость. Публикуйте оба показателя, правило допуска и временное окно.
Доказательством являются поля провайдера, а не зелёный значок в интерфейсе агента:
| Сигнал | Поле OpenAI | Поле Claude | Что подтверждает |
|---|---|---|---|
| Повторно использованный префикс | input_tokens_details.cached_tokens |
cache_read_input_tokens |
Токены из совпавшей записи |
| Новая запись кэша | input_tokens_details.cache_write_tokens |
cache_creation_input_tokens |
Токены для создания или продления записи |
| Неиспользованный вход | input_tokens - input_tokens_details.cached_tokens - input_tokens_details.cache_write_tokens (выводить осторожно) |
input_tokens после breakpoint |
Вход за пределами префикса; семантика различается |
| Корреляция | ID запроса, модель и маршрут | ID запроса, модель и маршрут | Какая попытка провайдера создала usage |
Синтетический пример, не telemetry Modelflare: R=720,000, W=80,000, U=200,000 дают допустимую долю 720,000 / 800,000 = 90%, но долю повторного использования всего входа 720,000 / 1,000,000 = 72%. Публикация одного числа скрывает знаменатель.
input_tokens_details.cache_write_tokens=0 не доказывает отсутствие кэша: чтение существующей записи не создаёт новую. Если сторонний ответ не содержит поле usage, это тоже не ноль, а сбой наблюдаемости, который нужно пометить как неаудируемый.
Почему путь агента теряет попадания при поддержке кэша моделью
Причина обычно находится между приложением и провайдером. Наиболее частые точки разрыва:
- Динамические байты приходят слишком рано. Временная метка, ID запроса, пользователь, эксперимент или меняющаяся текущая дата изменяют префикс до повторно используемых инструкций.
- Инструменты сериализуются заново. Добавление, удаление, перестановка или недетерминированная сериализация схемы инструмента меняет точный префикс; даже порядок JSON-ключей может дать miss.
- Fallback меняет идентичность кэша. Балансировка между alias модели, регионами, организациями или credentials не использует одну общую запись.
- Адаптер отбрасывает нативные настройки. Удаление
cache_control,prompt_cache_key, retention или usage превращает возможность в невидимый best effort. - Промпт короче порога. Короткий ход агента может быть корректным, но не иметь права на кэширование.
- Пройдено окно TTL. Пятиминутная запись Claude или зависящее от модели хранение OpenAI может истечь во время паузы человека.
- Гонка параллельного прогрева. Первые одновременные запросы могут прийти до того, как первый ответ сделает запись доступной.
- История переписывается. Суммаризация, compact, truncation или другая сериализация меняет префикс вместо добавления в конец.
Ни один из этих сбоев не требует злого умысла. Это предсказуемый результат, когда gateway воспринимает запрос агента как произвольный текст и не сохраняет контракт кэша провайдера. Практический вывод строгий: если агент не показывает, какой breakpoint сломался, нельзя надёжно оценить стоимость или диагностировать поток, зависящий от кэша.
GPT и Claude используют похожую идею, но разную семантику
Обе системы требуют точного совпадения повторно используемого префикса, однако управление и учёт различаются. Таблица основана на официальных руководствах, проверенных 2026-08-25; имена моделей, минимумы и retention могут измениться.
| Измерение | Prompt caching OpenAI | Prompt caching Claude |
|---|---|---|
| Единица повторного использования | Полный отрендеренный префикс контекста: инструкции, инструменты, история и мультимодальные части | Упорядоченный префикс до breakpoint cache_control: инструменты, system, сообщения |
| Минимальная длина | Текущий гайд указывает 1 024 видимых токена для GPT-5.6+ и обычно 2 048 для старых моделей | Зависит от модели, примерно 512–4 096 токенов; более короткие промпты не кэшируются |
| Управление | Неявный кэш; явные breakpoints и стабильный prompt_cache_key на поддерживаемых моделях |
Автоматический кэш верхнего уровня или breakpoints блоков; до четырёх и lookback на 20 блоков |
| Хранение | GPT-5.6+ поддерживает TTL 30 минут; старые модели имеют режимы с типичными окнами провайдера | По умолчанию пять минут с обновлением при использовании; один час опционально и дороже при записи |
| Цена | В текущем гайде GPT-5.6+: запись 1,25×, чтение 0,1× базового input | Запись на пять минут 1,25×, на час 2×; чтение 0,1× |
| Доказательство usage | input_tokens_details.cached_tokens и, если возвращается, input_tokens_details.cache_write_tokens |
cache_read_input_tokens, cache_creation_input_tokens и input_tokens после breakpoint |
| Частая инвалидация | Изменение модели, инструментов или настроек, переполнение машины или изменение до breakpoint | Изменение модели, system, инструментов или сообщений; отсутствует предыдущее сообщение или parallel warm-up miss |
OpenAI отмечает, что записи находятся на отдельных машинах: prompt_cache_key помогает группировать и маршрутизировать, но не закрепляет машину и не гарантирует hit. Claude документирует точное совпадение, изоляцию на уровне workspace и диагностику tools_changed и messages_changed. Gateway, скрывающий эти различия, не может честно превратить документы провайдера в одну общую гарантию.
Мультипликаторы объясняют эффект. Для указанной модели OpenAI запись с последующим чтением стоит примерно 1.25 + 0.10 = 1.35× единицы input без кэша; десять полностью повторно использованных запросов — 1.25 + 9×0.10 = 2.15×, а не 10×. Это официальные иллюстративные расчёты, не счёт Modelflare и не гарантия для каждой модели.
Налог адаптера измерим
Используйте матрицу отказов, а не скриншот. Зафиксируйте промпт, модель, credentials и скорость; меняйте одну переменную и сохраняйте исходный объект usage.
| Контролируемое изменение | Ожидаемый сигнал | Что может скрыть непрозрачный агент | Вывод для выпуска |
|---|---|---|---|
| Добавить только ход пользователя | R растёт после первого W |
Переписанную историю или новый маршрут | Префикс сохранён |
| Добавить timestamp в system prompt | R падает до нуля или появляется новый W |
Какие байты изменились | Динамический префикс ломает кэш |
| Переставить свойство инструмента | tools_changed или новая запись |
Поведение сериализатора | Схема должна быть детерминированной |
| Разделить поток между alias или машинами | R ниже и нестабильнее |
Выбранный маршрут и ключ | Нет affinity |
| Ждать дольше документированного TTL | Новая запись после истечения | Время истечения и режим retention | Паузы человека измерять отдельно |
| Параллельно отправить два одинаковых первых запроса | Записать может один или оба | Гонку прогрева и порядок попыток | Холодный burst не показывает ёмкость |
Сохраняйте ID запроса, режим streaming, время первого события, точную модель, маршрут, поля кэша и UTC timestamp. Редактируйте промпты, ключи и клиентские данные. Если gateway возвращает только нормализованную сумму input, пометьте запуск неаудируемым; отсутствующие измерения не являются выдуманными нулями.
Воспроизводимая запись аудита
Ниже приведён небольшой синтетический формат. Оболочка нейтральна, а usage сохраняет нативные поля. Это не benchmark.
{"request_id":"demo-001","timestamp":"2026-08-25T02:00:00Z","model":"MODEL_ID","route":"route-a","stream":true,"usage":{"input_tokens":1000000,"input_tokens_details":{"cached_tokens":0,"cache_write_tokens":1000000}}}
{"request_id":"demo-002","timestamp":"2026-08-25T02:00:03Z","model":"MODEL_ID","route":"route-a","stream":true,"usage":{"input_tokens":1000000,"input_tokens_details":{"cached_tokens":720000,"cache_write_tokens":80000}}}
Проведите минимум пять фаз: последовательный прогрев, диалог с добавлением, изменение dynamic system, изменение порядка инструментов и повтор после интервала TTL. Сохраняйте нативные поля чтения/записи каждого провайдера и сравнивайте R/(R+W) и R/(R+W+U) по фазе, маршруту, модели и UTC-дню. Одного смешанного числа недостаточно для production-решения.
Что гарантирует Modelflare и чего не гарантирует
Публичная страница статуса Modelflare сейчас описывает OpenAI Cache Hit Rate Guarantee. Для допустимых запросов, которые удовлетворяют требованиям кэша OpenAI и создают действительный кэш, дневная доля считается по календарному дню UTC. Если она ниже применимого уровня, разница компенсируется и показывается в Dashboard → Token Usage Analysis. Публичные уровни сейчас: 65%, 75% и 85%.
Граница намеренная:
- Гарантия относится к допустимому действительному OpenAI-трафику, а не к коротким или постоянно меняющимся запросам, которые не проходят условия.
- Она не превращает меняющиеся модель, schema инструмента, маршрут или TTL в повторно используемый префикс.
- Расчёт выполняется по UTC-дню, а кредит отражается в документированном интерфейсе аккаунта; это не обещание hit для каждого запроса.
- Нативные usage и расчёт eligibility остаются обязательными. Явный знаменатель делает компенсацию проверяемой.
Так отличается аудируемое обещание сервиса от слогана стороннего агента: первое называет популяцию, окно, порог и место кредита.
Преимущество цены и легитимность эксплуатации — разные доказательства
На актуальной странице цен также показан промо-коэффициент 0.015 для первого пополнения в применимой кампании/группе, с опубликованным минимумом и условиями. Это ценовая льгота, а не гарантия кэша. Перед оплатой проверьте на странице область моделей и правила расчёта.
Публичные материалы о доверии и правовые документы называют Havenbyte LLC оператором и описывают работу как базирующуюся в США. В них Stripe указан как платёжный процессор для платежей, счетов, возвратов и антифрод-контролей. Это сигналы ответственности и хранения, но не заявление о регистрации в конкретном штате или сертификации.
Рекомендация для production-агентов
Выбирайте стороннего агента только после прохождения списка:
- Он передаёт нативные настройки кэша и возвращает нативные чтения и записи.
- Он сохраняет байты стабильного префикса инструкций и инструментов и добавляет динамическое состояние после него.
- Он показывает модель, маршрут, границу организации/региона, режим TTL и ID запроса.
- Он отдельно записывает последовательный и параллельный прогрев.
- Он письменно определяет допустимый трафик, знаменатель, окно UTC, порог и компенсацию.
- Он позволяет экспортировать доказательства по запросам без раскрытия ключей и клиентского содержимого.
Если любой ответ «нет», не используйте путь для workload, чья экономика зависит от повторного использования. Проведите эксперимент через прямой путь провайдера или выберите аудируемый gateway вроде Modelflare и используйте тот же корпус. См. также надёжную маршрутизацию AI API, учёт затрат AI API, цены и trust.
Источники и дата проверки
Эти первичные источники проверены 2026-08-25. Они описывают контракты провайдеров и текущую публичную политику Modelflare, но не доказывают универсальную долю попаданий неназванного стороннего агента.
- Руководство OpenAI Prompt Caching
- Цены OpenAI API
- Руководство Anthropic Prompt Caching
- Диагностика кэша Anthropic
- Статус и гарантия кэша Modelflare
- Цены и текущие условия Modelflare
- Trust и оператор Modelflare
FAQ: Низкая доля стороннего агента всегда означает мошенничество?
Нет. Причиной могут быть короткие промпты, меняющиеся префиксы, распределённые маршруты, истёкший TTL или отсутствующие поля. До контролируемого теста правильный вывод — «не воспроизводится» или «неаудируемо».
FAQ: Можно ли сравнить Claude и GPT одним числом?
Только после нормализации знаменателя и сохранения нативных полей. Сравнивайте один корпус и одну фазу, а не смешанное число панели.
FAQ: Компенсация отменяет необходимость стабильного префикса?
Нет. Компенсация ограничивает финансовый риск допустимого OpenAI-трафика с кэшем; она не делает недопустимый запрос повторно используемым и не исправляет агента, который переписывает префикс.