Кэширование промптов
На Claude-моделях NordRouter автоматически кэширует длинные контексты. Если вы шлёте запросы с повторяющимся началом (система-промпт, история диалога, большой документ) — повторная часть тарифицируется по цене кэш-чтения, до 90% дешевле обычного входа.
Как это работает
- Первый запрос с длинным контекстом — контекст записывается в кэш.
- Последующие запросы с тем же началом — совпавшая часть читается из кэша по сниженной цене.
- В ответе это видно по
usage.prompt_tokens_details.
Сколько это стоит
Кэш работает как у Anthropic — по двум ставкам от цены входа модели:
| Операция | Множитель | Когда списывается |
|---|---|---|
| Запись (cache-write) | ×1.25 | первый раз, когда контекст попадает в кэш |
| Чтение (cache-read) | ×0.1 (−90%) | каждый повтор того же контекста |
Точная цена у каждой модели своя — смотрите каталог моделей. Пример на Claude Fable 5 (вход $1.548/1M): запись ≈ $1.94/1M, чтение ≈ $0.155/1M.
Порог срабатывания
Кэшируются только достаточно длинные контексты (от нескольких тысяч токенов). Короткие запросы идут по обычной цене — для них кэш не нужен.
Как пользоваться
1. Автоматически — ничего делать не нужно
Большинству настраивать нечего. Если ваш инструмент отправляет один и тот же префикс (системный промпт, историю, большой документ) — NordRouter кэширует его сам. Так уже работает в Claude Code, OpenCode, Cline и любых чат-ботах с историей: на каждом шаге агент пересылает весь контекст — первый шаг пишет кэш, каждый следующий читает его со скидкой 90%.
2. Проверить, что кэш сработал
Посмотрите блок usage в ответе — если часть входа ушла в кэш, там будет cached_tokens:
"usage": {
"prompt_tokens": 21364,
"prompt_tokens_details": {
"cached_tokens": 21361 // ← прочитано из кэша по ×0.1
},
"completion_tokens": 40
}cached_tokens > 0 — значит эта часть входа списалась по цене чтения, а не полной.
3. Управлять вручную через cache_control
Если хотите сами решать, что именно кэшировать (эндпоинт /v1/messages), поставьте маркер cache_control на конце блока, который переиспользуете — например на большом справочнике в system:
curl https://nordrouter.com/v1/messages \
-H "x-api-key: sk-nr-ВАШ-КЛЮЧ" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "anthropic/claude-fable-5",
"max_tokens": 512,
"system": [
{
"type": "text",
"text": "Ты ассистент по нашей документации. Вот справочник: <...много текста...>",
"cache_control": { "type": "ephemeral" }
}
],
"messages": [{ "role": "user", "content": "Первый вопрос по справочнику?" }]
}'from anthropic import Anthropic
client = Anthropic(base_url="https://nordrouter.com", api_key="sk-nr-ВАШ-КЛЮЧ")
resp = client.messages.create(
model="anthropic/claude-fable-5",
max_tokens=512,
system=[{
"type": "text",
"text": "Ты ассистент по нашей документации. Вот справочник: <...>",
"cache_control": {"type": "ephemeral"}, # кэшируем справочник
}],
messages=[{"role": "user", "content": "Первый вопрос по справочнику?"}],
)
print(resp.usage) # cache_creation_input_tokens на 1-м запросе, cache_read на след.Первый запрос запишет справочник в кэш, все следующие с тем же system прочитают его по ×0.1. Ваши cache_control всегда в приоритете — авто-кэш в такие запросы не вмешивается.
Тумблер в личном кабинете
ЛК → Настройки → «Кэширование промптов (Claude)»:
- Включено (по умолчанию) — авто-кэш для всех Claude-запросов без своих маркеров. Оптимально для агентов и диалогов.
- Выключить стоит, только если каждый ваш запрос полностью уникален — чтобы не платить за запись кэша, который не переиспользуется.
- Если передаёте
cache_controlсами — положение тумблера не важно, ваши маркеры всё равно в приоритете.
Пример экономии
Справочник на 40 страниц (~30 000 токенов), к нему 10 вопросов на Claude Fable 5:
| Без кэша | С кэшем | |
|---|---|---|
| Что списывается | 10 × 30k входа | 1 запись + 9 чтений |
| Стоимость входа | ~$0.46 (≈41₽) | ~$0.10 (≈9₽) |
Экономия ≈78% — и чем больше вопросов к тому же контексту, тем сильнее эффект. Именно поэтому агентный кодинг (где контекст переиспользуется десятки раз) выходит в разы дешевле.