Кэширование промптов - это мощная функция, которая оптимизирует использование API, позволяя возобновлять работу с определенных префиксов в ваших промптах. Этот подход значительно сокращает время обработки и затраты на повторяющиеся задачи или промпты с постоянными элементами.

Вот пример того, как реализовать кэширование промптов с помощью Messages API, используя блок cache_control:

В этом примере весь текст “Гордости и предубеждения” кэшируется с помощью параметра cache_control. Это позволяет повторно использовать этот большой текст в нескольких вызовах API без повторной обработки каждый раз. Изменение только пользовательского сообщения позволяет задавать различные вопросы о книге, используя кэшированный контент, что приводит к более быстрым ответам и повышенной эффективности.

Кэширование промптов находится в бета-версии

Мы рады сообщить, что кэширование промптов теперь доступно в публичной бета-версии! Для доступа к этой функции вам нужно включить заголовок anthropic-beta: prompt-caching-2024-07-31 в ваши API-запросы.

Мы будем улучшать эту открытую бета-версию в ближайшие недели, поэтому мы ценим ваши отзывы. Пожалуйста, делитесь своими идеями и предложениями, используя эту форму.


Как работает кэширование промптов

Когда вы отправляете запрос с включенным кэшированием промптов:

  1. Система проверяет, есть ли уже кэшированный префикс промпта из недавнего запроса.
  2. Если найден, используется кэшированная версия, сокращая время обработки и затраты.
  3. В противном случае обрабатывается полный промпт и кэшируется префикс для будущего использования.

Это особенно полезно для:

  • Промптов с множеством примеров
  • Большого объема контекста или фоновой информации
  • Повторяющихся задач с постоянными инструкциями
  • Длинных многоходовых разговоров

Кэш имеет время жизни 5 минут, которое обновляется каждый раз при использовании кэшированного контента.

Кэширование промптов кэширует полный префикс

Кэширование промптов ссылается на весь промпт - tools, system и messages (в этом порядке) вплоть до и включая блок, обозначенный с помощью cache_control.


Ценообразование

Кэширование промптов вводит новую структуру ценообразования. В таблице ниже показана цена за токен для каждой поддерживаемой модели:

МодельБазовые входные токеныЗаписи в кэшПопадания в кэшВыходные токены
Claude 3.5 Sonnet$3 / MTok$3.75 / MTok$0.30 / MTok$15 / MTok
Claude 3.5 Haiku$1 / MTok$1.25 / MTok$0.10 / MTok$5 / MTok
Claude 3 Haiku$0.25 / MTok$0.30 / MTok$0.03 / MTok$1.25 / MTok
Claude 3 Opus$15 / MTok$18.75 / MTok$1.50 / MTok$75 / MTok

Примечание:

  • Токены записи в кэш на 25% дороже базовых входных токенов
  • Токены чтения из кэша на 90% дешевле базовых входных токенов
  • Обычные входные и выходные токены оцениваются по стандартным тарифам

Как реализовать кэширование промптов

Поддерживаемые модели

Кэширование промптов в настоящее время поддерживается на:

  • Claude 3.5 Sonnet
  • Claude 3.5 Haiku
  • Claude 3 Haiku
  • Claude 3 Opus

Структурирование вашего промпта

Разместите статический контент (определения инструментов, системные инструкции, контекст, примеры) в начале вашего промпта. Отметьте конец повторно используемого контента для кэширования с помощью параметра cache_control.

Префиксы кэша создаются в следующем порядке: tools, system, затем messages.

Используя параметр cache_control, вы можете определить до 4 точек кэширования, позволяя кэшировать различные повторно используемые разделы отдельно.

Ограничения кэша

Минимальная длина кэшируемого промпта составляет:

  • 1024 токена для Claude 3.5 Sonnet и Claude 3 Opus
  • 2048 токенов для Claude 3.5 Haiku и Claude 3 Haiku

Более короткие промпты не могут быть кэшированы, даже если они помечены с помощью cache_control. Любые запросы на кэширование меньшего количества токенов будут обработаны без кэширования. Чтобы узнать, был ли промпт кэширован, см. поля использования в ответе.

Кэш имеет время жизни (TTL) 5 минут. В настоящее время “ephemeral” является единственным поддерживаемым типом кэша, который соответствует этому 5-минутному времени жизни.

Что может быть кэшировано

Каждый блок в запросе может быть обозначен для кэширования с помощью cache_control. Это включает:

  • Инструменты: Определения инструментов в массиве tools
  • Системные сообщения: Блоки контента в массиве system
  • Сообщения: Блоки контента в массиве messages.content, как для пользовательских, так и для ассистентских ходов
  • Изображения: Блоки контента в массиве messages.content, в пользовательских ходах
  • Использование инструментов и результаты инструментов: Блоки контента в массиве messages.content, как в пользовательских, так и в ассистентских ходах

Каждый из этих элементов может быть помечен с помощью cache_control для включения кэширования для этой части запроса.

Отслеживание производительности кэша

Отслеживайте производительность кэша с помощью этих полей ответа API, в рамках usage в ответе (или событии message_start при стриминге):

  • cache_creation_input_tokens: Количество токенов, записанных в кэш при создании новой записи.
  • cache_read_input_tokens: Количество токенов, извлеченных из кэша для этого запроса.
  • input_tokens: Количество входных токенов, которые не были прочитаны из кэша или использованы для создания кэша.

Лучшие практики для эффективного кэширования

Для оптимизации производительности кэширования промптов:

  • Кэшируйте стабильный, повторно используемый контент, такой как системные инструкции, фоновая информация, большие контексты или частые определения инструментов.
  • Размещайте кэшированный контент в начале промпта для лучшей производительности.
  • Стратегически используйте точки кэширования для разделения различных кэшируемых секций префикса.
  • Регулярно анализируйте частоту попаданий в кэш и корректируйте свою стратегию по мере необходимости.

Оптимизация для различных случаев использования

Настройте свою стратегию кэширования промптов под ваш сценарий:

  • Разговорные агенты: Снижение стоимости и задержки для длительных разговоров, особенно тех, которые содержат длинные инструкции или загруженные документы.
  • Ассистенты по программированию: Улучшение автодополнения и ответов на вопросы по кодовой базе путем сохранения релевантных разделов или сокращенной версии кодовой базы в промпте.
  • Обработка больших документов: Включение полного длинного материала, включая изображения, в ваш промпт без увеличения задержки ответа.
  • Подробные наборы инструкций: Обмен обширными списками инструкций, процедур и примеров для точной настройки ответов Claude. Разработчики часто включают один-два примера в промпт, но с кэшированием промптов вы можете получить еще лучшую производительность, включив 20+ разнообразных примеров качественных ответов.
  • Агентное использование инструментов: Повышение производительности для сценариев, включающих множественные вызовы инструментов и итеративные изменения кода, где каждый шаг обычно требует нового вызова API.
  • Общение с книгами, статьями, документацией, транскриптами подкастов и другим длинным контентом: Оживите любую базу знаний, встроив весь документ(ы) в промпт и позволяя пользователям задавать ему вопросы.

Устранение распространенных проблем

При возникновении неожиданного поведения:

  • Убедитесь, что кэшированные разделы идентичны и помечены с помощью cache_control в одних и тех же местах между вызовами
  • Проверьте, что вызовы выполняются в пределах 5-минутного времени жизни кэша
  • Убедитесь, что tool_choice и использование изображений остаются постоянными между вызовами
  • Проверьте, что вы кэшируете как минимум необходимое количество токенов

Обратите внимание, что изменения в tool_choice или наличие/отсутствие изображений в любом месте промпта приведут к недействительности кэша, требуя создания новой записи кэша.


Хранение и совместное использование кэша

  • Изоляция организаций: Кэши изолированы между организациями. Разные организации никогда не делятся кэшами, даже если они используют идентичные промпты.

  • Точное соответствие: Попадания в кэш требуют 100% идентичных сегментов промпта, включая весь текст и изображения вплоть до и включая блок, помеченный с помощью cache control. Тот же блок должен быть помечен с помощью cache_control во время чтения и создания кэша.

  • Генерация выходных токенов: Кэширование промптов не влияет на генерацию выходных токенов. Ответ, который вы получаете, будет идентичен тому, который вы бы получили, если бы кэширование промптов не использовалось.


Примеры кэширования промптов

Чтобы помочь вам начать работу с кэшированием промптов, мы подготовили поваренную книгу по кэшированию промпт с подробными примерами и лучшими практиками.

Ниже мы включили несколько фрагментов кода, которые демонстрируют различные паттерны кэширования промптов. Эти примеры показывают, как реализовать кэширование в различных сценариях, помогая вам понять практическое применение этой функции:


Часто задаваемые вопросы