ИИ и LLMПриложения на LLM

Кеширующий шлюз LLM

Направьте SDK OpenAI или Anthropic на один URL, и повторные запросы будут обслуживаться из HotKV, а не оплачиваться снова. Менять код не нужно.

строка кода для изменения
1
статический бинарный файл
~6 МБ
открытый исходный код
Apache-2.0
Шаг 1 из 5
Запуск шлюза

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

Пример сеансаplaying
# Запуск шлюза
$ hotkv-gateway --upstream https://api.openai.com --semantic --embedding-model text-embedding-3-small
(gateway listening on 127.0.0.1:8080, cache in HotKV)

Анимированная демонстрация с настоящими командами HotKV и примерами ответов. Нажмите на любой шаг, чтобы перейти к нему. Команды и ответы остаются на английском, ровно так, как вы вводите и видите их в HotKV.

Проблема

Большая часть трафика LLM повторяется. Один и тот же системный промпт и вопрос приходят снова и снова от разных пользователей, из повторных попыток и тестовых прогонов, и каждый запрос оплачивается. Добавлять кеш внутрь каждого сервиса, на каждом используемом языке, долго, и в этом легко ошибиться.

Как с этим справляется HotKV

hotkv-gateway стоит между вашим приложением и API LLM. Измените базовый URL SDK, и одинаковые запросы будут обслуживаться из HotKV, потоковые ответы воспроизводятся как потоки, переформулированные вопросы могут обслуживаться по смыслу, а одинаковые запросы, находящиеся в обработке, разделяют один вызов к провайдеру. Если HotKV медленный или недоступен, запросы идут напрямую к провайдеру.

Шаг за шагом

Что происходит, команда за командой

  1. 01

    Запуск шлюза

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

    hotkv-gateway --upstream https://api.openai.com --semantic --embedding-model text-embedding-3-small
  2. 02

    Первый запрос, промах

    В кеше пока ничего нет. Запрос один раз уходит к провайдеру, а завершённый ответ 200 сохраняется.

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @question.json | grep -i x-hotkv-cache
  3. 03

    Тот же запрос, попадание

    Одинаковый запрос, даже с ключами в другом порядке, обслуживается из HotKV и никогда не доходит до провайдера.

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @question.json | grep -i x-hotkv-cache
  4. 04

    Переформулированный вопрос

    При включённом семантическом кеше вопрос в один ход, сформулированный иначе, может быть обслужен ответом на похожий вопрос.

    curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d @rephrased.json | grep -i x-hotkv-cache
  5. 05

    Всплеск одинаковых запросов

    Три одинаковых запроса приходят, пока первый ещё обрабатывается. Они разделяют один вызов к провайдеру.

    for i in 1 2 3; do curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -d @new.json & done
Где это уместно

Реальные сценарии

Оценка и прогоны CI

Наборы тестов и оценки промптов при каждом запуске отправляют одни и те же запросы. За шлюзом чего-то стоят только изменённые промпты.

Платформы на разных языках

Бэкенд на Python, воркер на Node.js и сервис на Go получают один и тот же кеш, меняя один базовый URL, без библиотеки на каждом языке.

Модели на собственных серверах

Перед vLLM или Ollama шлюз экономит время GPU вместо платы за API, потому что повторные промпты никогда не доходят до сервера модели.

Встроено

Что вы получаете

Точный и семантический кеш

Одинаковые запросы чата, дополнений и эмбеддингов кешируются, а вопросы чата в один ход могут также находиться по смыслу (--semantic).

Повтор потока

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

Безопасно по умолчанию

У каждого ключа API свой кеш. Ошибки и отфильтрованные ответы никогда не сохраняются, а запросы могут пропускать кеш с помощью заголовка.

Никогда не мешает

Если HotKV медленный или недоступен, запросы идут напрямую к провайдеру. Шлюз также сообщает свои показатели на /_hotkv/metrics.

Единственное изменение в вашем коде

python
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8080/v1")   # the only change

# For Anthropic: start the gateway with --upstream https://api.anthropic.com
import anthropic
client = anthropic.Anthropic(base_url="http://localhost:8080")

Частые вопросы

Нужна ли шлюзу лицензия HotKV?

Нет. Он работает с любым сервером HotKV. С лицензией, включающей кеш промптов, записи хранятся в пространстве имён PCACHE, а HotKV считает сэкономленные токены. Семантическому кешу лицензия нужна всегда.

Могут ли два клиента видеть ответы друг друга?

Нет. Ключ кеша включает учётные данные вызывающей стороны, поэтому у каждого ключа API свой кеш, если только вы не храните в шлюзе один ключ провайдера или не запускаете его с --scope global.

С какими провайдерами он работает?

OpenAI, Azure OpenAI, OpenRouter, vLLM, Ollama, LiteLLM и любые другие, понимающие API OpenAI, а также API Messages от Anthropic с точным кешем.

Связанные сценарии

Попробуйте на своей нагрузке

HotKV понимает протокол Redis, поэтому вы можете подключить к нему существующий клиент и выполнить те же команды.