Package Information
Documentation
n8n-nodes-openrouter-cache
n8n community node для OpenRouter Chat Model с поддержкой Prompt Caching.
Возможности
- Полная совместимость с AI Agent и другими LangChain узлами
- Поддержка
cache_controlдля Anthropic Claude и Google Gemini - Настраиваемый TTL кэша (5 минут или 1 час для Anthropic)
- Кэширование системных промптов и первого пользовательского сообщения
- Автоматическое определение поддержки кэширования по модели
Как работает кэширование
| Провайдер | Кэширование |
|---|---|
| OpenAI | Автоматическое (минимум 1024 токена) |
| Anthropic Claude | Требует cache_control - этот узел добавляет его автоматически |
| Google Gemini | Требует cache_control - этот узел добавляет его автоматически |
| DeepSeek | Автоматическое |
| Groq | Автоматическое |
| Grok | Автоматическое |
Установка
Через Docker (рекомендуется)
- Соберите пакет локально:
cd n8n-nodes-openrouter-cache
pnpm install
pnpm build
- Создайте
Dockerfile:
FROM n8nio/n8n:latest
USER root
# Копируем собранный пакет
COPY ./n8n-nodes-openrouter-cache /home/node/.n8n/custom/n8n-nodes-openrouter-cache
# Устанавливаем зависимости
WORKDIR /home/node/.n8n/custom/n8n-nodes-openrouter-cache
RUN npm install --production
USER node
WORKDIR /home/node
- Обновите
docker-compose.yml:
version: '3.8'
services:
n8n:
build: .
# или используйте image: n8nio/n8n:latest и volumes
ports:
- "5678:5678"
environment:
- N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom
volumes:
- n8n_data:/home/node/.n8n
# Для разработки можно монтировать напрямую:
# - ./n8n-nodes-openrouter-cache:/home/node/.n8n/custom/n8n-nodes-openrouter-cache
volumes:
n8n_data:
- Запустите:
docker-compose up --build
Альтернатива: монтирование volume
Если не хотите пересобирать образ:
services:
n8n:
image: n8nio/n8n:latest
volumes:
- n8n_data:/home/node/.n8n
- ./n8n-nodes-openrouter-cache/dist:/home/node/.n8n/custom/n8n-nodes-openrouter-cache/dist
- ./n8n-nodes-openrouter-cache/package.json:/home/node/.n8n/custom/n8n-nodes-openrouter-cache/package.json
environment:
- N8N_CUSTOM_EXTENSIONS=/home/node/.n8n/custom
Использование
Добавьте узел OpenRouter Chat Model (with Cache) в workflow
Создайте credentials с вашим OpenRouter API ключом
Выберите модель
Настройте кэширование:
- Enable Prompt Caching: включить для Anthropic/Gemini моделей
- Cache TTL: 5 минут (по умолчанию) или 1 час
- Cache System Prompt: кэшировать системный промпт
- Cache First User Message: кэшировать первое сообщение пользователя (для больших документов)
Подключите к AI Agent или другому LangChain узлу
Экономия на токенах
При использовании кэширования:
| Провайдер | Запись кэша | Чтение кэша |
|---|---|---|
| Anthropic | 1.25x цены | 0.1x цены (90% экономия!) |
| Google Gemini | бесплатно + хранение | 0.25x цены |
| OpenAI | бесплатно | 0.5x цены |
| DeepSeek | 1x цены | 0.1x цены |
Reasoning-модели (DeepSeek V4, o-series)
Reasoning-токены списываются из того же бюджета, что и ответ (Maximum Tokens). Если размышления съедают бюджет целиком, модель возвращает пустой content с finish_reason: "length" — AI Agent отдаёт пустой output, и воркфлоу выглядит сломанным без видимой причины.
Воспроизводится стабильно: deepseek/deepseek-v4-pro, maxTokens: 250 → reasoning: 250, текста нет.
Настройки в разделе Reasoning:
| Параметр | Действие |
|---|---|
| Effort: Disabled | reasoning.enabled = false — размышления выключены полностью. Sonnet 5.5, Opus 5.5, Fable 5.x выключить не дают (400 «Reasoning is mandatory») — там узел шлёт effort: minimal. Haiku 5.5, Sonnet 5, Opus 5 выключаются честно (у них minimal ≠ выкл) |
| Effort: Minimal…Max | reasoning.effort — подсказка провайдеру. На Claude 4.6+ это не бюджет размышлений, а общая «старательность» ответа (output_config.effort) |
| Reasoning Max Tokens | reasoning.max_tokens — жёсткий потолок, имеет приоритет над Effort |
| Exclude From Response | reasoning.exclude — скрыть размышления из ответа (токены всё равно тратятся) |
⚠️ Проверено на deepseek/deepseek-v4-pro:
Effort: Disabled— работает надёжно (reasoning: 0, 3/3 прогона с текстом)Reasoning Max TokensиEffort: Low— провайдер не соблюдает лимит (приmax_tokens: 100пришло 179)
Поэтому для гарантии либо выключай reasoning совсем, либо ставь Maximum Tokens с большим запасом (4096+). Дефолт узла — 4096; проблема возникает, когда его понижают.
Если генерация всё же вернулась пустой, узел пишет в лог n8n:
[openrouter-cache] <model> returned an empty generation (finish_reason=length). ...
Прочие опции (0.7.0)
| Опция | Где | Что делает |
|---|---|---|
| Cache Conversation (Auto) | Prompt Caching | Верхний cache_control (только Anthropic): OpenRouter двигает брейкпоинт на последнее сообщение — результаты тулов агента кэшируются от шага к шагу |
| Verbosity | Options | Длина/тщательность ответа. Для Claude 5.x — главный рычаг вместо температуры |
| Extra Body (JSON) | Options | Любые поля запроса, мержатся последними. Для DeepSeek: {"provider": {"quantizations": ["fp8","bf16"]}} — уводит от fp4-провайдеров (дефолтный роутинг OpenRouter тянет к самым дешёвым) |
⚠️ Claude 5.x игнорирует Temperature, Top P, Frequency/Presence Penalty — OpenRouter молча их отбрасывает.
Проверка работы кэша
Проверить экономию можно:
- На странице Activity в OpenRouter
- Через API
/api/v1/generation - В поле
cached_tokensв ответе API
Лицензия
MIT