Кэширование промптов
Prompt Caching позволяет кэшировать повторно используемые префиксы промптов, снижая потребление токенов и задержку ответа.
Принцип работы
Когда ваш запрос содержит длинный, повторно используемый system prompt или контекстную информацию:
- Первый запрос — все токены обрабатываются полностью, префикс промпта кэшируется
- Последующие запросы — при попадании в кэш токены кэшированной части не тарифицируются повторно
- Истечение кэша — кэш имеет определённый TTL (обычно 5-10 минут), после истечения требуется повторное кэширование
Поддержка кэширования
Модельные ресурсы OfoxAI предоставляются облачными провайдерами — AWS Bedrock, Azure OpenAI, Google Cloud, Alibaba Cloud, Volcengine и другими. Модели, поддерживающие Prompt Caching у облачного провайдера, поддерживаются и в OfoxAI.
| Облачный провайдер | Модель | Механизм кэширования |
|---|---|---|
| AWS Bedrock | Серия Claude | Нативный Prompt Caching |
| Azure OpenAI | Серия GPT-4o | Автоматическое кэширование |
| Google Cloud | Серия Gemini | Context Caching |
| Alibaba Cloud | Серия Qwen | Кэширование на стороне платформы |
| Volcengine | Серия Doubao | Кэширование на стороне платформы |
Поддержка кэширования конкретными моделями определяется документацией соответствующего облачного провайдера. OfoxAI прозрачно передаёт параметры кэширования без необходимости дополнительной настройки.
Способ использования
Протокол OpenAI
Prompt Caching для моделей OpenAI работает автоматически — активируется при обнаружении повторяющегося префикса промпта:
# Длинный system prompt будет автоматически закэширован
SYSTEM_PROMPT = """Вы — ассистент технической поддержки OfoxAI.
Информация о продукте, которую вам нужно знать:
- OfoxAI — это LLM Gateway, поддерживающий 100+ моделей
- Поддерживает три основных протокола: OpenAI / Anthropic / Gemini
- ...
(дополнительная информация о продукте)
"""
# Первый запрос: кэширование system prompt
response1 = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": "Какие модели поддерживает OfoxAI?"}
]
)
# Второй запрос: попадание в кэш — быстрее и дешевле
response2 = client.chat.completions.create(
model="openai/gpt-4o",
messages=[
{"role": "system", "content": SYSTEM_PROMPT}, # попадание в кэш
{"role": "user", "content": "Как настроить Claude Code?"}
]
)Протокол Anthropic
Модели Anthropic поддерживают явное управление кэшем:
import anthropic
client = anthropic.Anthropic(
base_url="https://api.ofox.ai/anthropic",
api_key="<Ваш OFOXAI_API_KEY>"
)
response = client.messages.create(
model="anthropic/claude-sonnet-4.5",
max_tokens=1024,
system=[{
"type": "text",
"text": "Вы — профессиональный ассистент. Далее следует документация продукта...",
"cache_control": {"type": "ephemeral"} # явное включение кэширования
}],
messages=[{"role": "user", "content": "Подведите итог по характеристикам продукта"}]
)
# Просмотр состояния кэша
print(f"Токены записи в кэш: {response.usage.cache_creation_input_tokens}")
print(f"Токены из кэша: {response.usage.cache_read_input_tokens}")Экономия затрат
При попадании в кэш токены кэшированной части тарифицируются по сниженной цене. Процент экономии зависит от модели:
- Серия Anthropic Claude — попадание в кэш экономит около 90% затрат на ввод
- Серия OpenAI GPT — попадание в кэш экономит около 50% затрат на ввод
- Серия Google Gemini — попадание в кэш экономит около 50-75% затрат на ввод
Фактическая экономия зависит от показателя попадания в кэш и тарифной политики облачного провайдера. Подробности см. в статистике использования в консоли OfoxAI.
Лучшие практики
- Размещайте длинный текст в начале — system prompt, содержимое базы знаний и другие неизменяемые части ставьте в начало messages
- Сохраняйте одинаковый префикс — только полностью идентичный префикс попадает в кэш
- Проектируйте структуру промпта рационально — разделяйте фиксированную и изменяемую части
# ✅ Хороший дизайн: фиксированное содержимое в начале, изменяемое в конце
messages = [
{"role": "system", "content": LONG_STATIC_PROMPT}, # кэшируется
{"role": "user", "content": dynamic_question} # изменяемая часть
]
# ❌ Плохой дизайн: изменяемое содержимое вперемешку с фиксированным
messages = [
{"role": "system", "content": f"Today is {date}. {LONG_PROMPT}"} # меняется каждый день, не кэшируется
]Попадание в кэш можно проверить в поле usage ответа API, а также в статистике использования в консоли OfoxAI, где отображается показатель попадания в кэш.