← Cloudflare Workers AI / workers-ai / features
Кэширование промптов
Кэширование промптов, также называемое кэшированием префиксов, представляет собой оптимизацию производительности, которая позволяет Workers AI быстрее отвечать на запросы с промптами, использующими общие входные данные. Оно сокращает время до получения первого токена (TTFT) и повышает пропускную способность в токенах в секунду (TPS), используя повторно уже вычисленные входные тензоры вместо их пересчёта с нуля.
Кешированные входные токены оплачиваются со скидкой по сравнению с обычными входными токенами. Workers AI по умолчанию включает кеширование префиксов для отдельных моделей. Подробности о совместимости и стоимости приведены на странице каждой страница модели.
Как это работает
При обработке запроса LLM проходит через два этапа:
- Этап предзаполнения : обрабатывает входные токены (системные промпты, определения инструментов, история диалога).
- Этап вывода : генерирует выходные токены.
При кэшировании префиксов Workers AI сохраняет вычисленные входные тензоры, полученные на этапе prefill. В последующих запросах с тем же префиксом модель пропускает prefill для уже закэшированной части и обрабатывает только новые входные токены. Это существенно экономит вычислительное время, особенно для агентных рабочих нагрузок, где последовательные запросы используют значительный объём общего контекста.
Например, когда агент для написания кода отправляет новый промпт, он обычно повторно отправляет все предыдущие промпты, определения инструментов и историю диалога. Разница между последовательными запросами часто составляет всего несколько новых строк. Кэширование префиксов позволяет избежать повторного prefill для всего общего контекста.
Заголовок привязки сессии
Кэширование префиксов работает только тогда, когда запрос направляется на тот же экземпляр модели, где хранятся закэшированные тензоры. Чтобы повысить частоту попаданий в кэш, отправляйте x-session-affinity заголовок с уникальным идентификатором сессии или агента. Это направляет запросы с одинаковым идентификатором на один и тот же экземпляр модели, повышая вероятность попадания в кэш префиксов.
REST API
curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/run/@cf/moonshotai/kimi-k2.5" \
-H "Authorization: Bearer {api_token}" \
-H "Content-Type: application/json" \
-H "x-session-affinity: ses_12345678" \
-d '{
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "What is prefix caching and why does it matter?"
}
],
"max_tokens": 2400,
"stream": true
}'Привязка Workers AI
const response = await env.AI.run(
"@cf/moonshotai/kimi-k2.5",
{
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Explain prefix caching." },
],
},
{
extraHeaders: {
"x-session-affinity": "ses_12345678",
},
},
);Структурирование промптов для кэширования
Кэширование префиксов сопоставляет точную последовательность токенов от начала промпта. Даже одно отличие в токене делает кэш недействительным начиная с этого места.
Чтобы увеличить количество попаданий в кэш:
- Сначала размещайте статический контент. Системные промпты, определения инструментов и общие инструкции должны находиться в начале промпта. Данные, специфичные для пользователя, или динамический контент (отметки времени, запросы пользователя) размещайте в конце.
- Не указывайте метки времени в системных промптах. Если добавить отметку времени в начало системного промпта, префикс будет меняться при каждом запросе, и кэш перестанет работать. Если временной контекст необходим, добавляйте его в сообщение пользователя.
- Повторно используйте определения инструментов в разных запросах. Для агентов, вызывающих функции, инструменты являются частью префикса промпта. Если определения инструментов остаются неизменными в запросах одной сессии, это повышает повторное использование кэша.
Мониторинг токенов из кэша
Workers AI отображает количество закэшированных токенов в ответе usage объект. Используйте его, чтобы убедиться, что кэширование префиксов работает, и отслеживать экономию затрат. Первый запрос обычно выполняется без кэша, поэтому ожидается, что при первом обращении кэшированные токены не возвращаются. Из-за размера блока входные данные должны быть достаточно большими, чтобы попасть в кэш.
Кэшированные токены оплачиваются по более низкой ставке, чем обычные входные токены, которые учитываются в общем количестве нейронов.