AI i LLMAplikacje LLM

Brama LLM z cache

Skieruj swoje SDK OpenAI lub Anthropic na jeden adres URL, a powtórzone żądania będą obsługiwane z HotKV zamiast być płacone ponownie. Bez zmian w kodzie.

linia kodu do zmiany
1
statyczny plik binarny
~6 MB
open source
Apache-2.0
Krok 1 z 5
Uruchom bramę

Jeden plik binarny lub kontener przed dostawcą. Własny klucz API wywołującego jest przekazywany dalej, więc brama nie potrzebuje żadnego.

Przykładowa sesjaplaying
# Uruchom bramę
$ 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)

Animowany przegląd z prawdziwymi poleceniami HotKV i przykładowymi odpowiedziami. Kliknij dowolny krok, aby do niego przejść. Polecenia i odpowiedzi pozostają po angielsku, dokładnie tak, jak je wpisujesz i widzisz w HotKV.

Problem

Większość ruchu do LLM się powtarza. Ten sam prompt systemowy i pytanie przychodzą raz po raz od różnych użytkowników, z ponowień i uruchomień testów, a każde z nich jest rozliczane. Dodawanie cache w każdej usłudze, w każdym używanym języku, jest powolne i łatwo je zepsuć.

Jak radzi sobie z tym HotKV

hotkv-gateway stoi między aplikacją a API LLM. Zmień bazowy adres URL SDK, a identyczne żądania są obsługiwane z HotKV, odpowiedzi strumieniowe są odtwarzane jako strumienie, inaczej sformułowane pytania mogą być obsłużone według znaczenia, a identyczne żądania w toku współdzielą jedno wywołanie do dostawcy. Jeśli HotKV jest wolny lub niedostępny, żądania idą prosto do dostawcy.

Krok po kroku

Co się dzieje, polecenie po poleceniu

  1. 01

    Uruchom bramę

    Jeden plik binarny lub kontener przed dostawcą. Własny klucz API wywołującego jest przekazywany dalej, więc brama nie potrzebuje żadnego.

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

    Pierwsze żądanie, pudło

    Nic jeszcze nie ma w cache. Żądanie idzie raz do dostawcy, a zakończona odpowiedź 200 jest zapisywana.

    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

    To samo żądanie, trafienie

    Identyczne żądanie, nawet z kluczami w innej kolejności, dostaje odpowiedź z HotKV i nigdy nie dociera do dostawcy.

    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

    Inaczej sformułowane pytanie

    Przy włączonym cache semantycznym inaczej sformułowane pytanie jednoturowe może dostać odpowiedź na podobne.

    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

    Seria identycznych żądań

    Trzy identyczne żądania przychodzą, gdy pierwsze jest jeszcze w toku. Współdzielą jedno wywołanie do dostawcy.

    for i in 1 2 3; do curl -si localhost:8080/v1/chat/completions -H "Authorization: Bearer $OPENAI_API_KEY" -d @new.json & done
Gdzie się sprawdza

Scenariusze z życia

Ewaluacje i uruchomienia CI

Zestawy testów i ewaluacje promptów wysyłają te same żądania przy każdym uruchomieniu. Za bramą kosztują tylko zmienione prompty.

Platformy wielojęzyczne

Backend w Pythonie, worker w Node.js i usługa w Go dostają ten sam cache po zmianie jednego bazowego adresu URL, bez biblioteki w każdym języku.

Modele hostowane samodzielnie

Przed vLLM lub Ollama brama oszczędza czas GPU zamiast opłat za API, ponieważ powtórzone prompty nigdy nie docierają do serwera modelu.

Wbudowane

Co dostajesz

Cache dokładny i semantyczny

Identyczne żądania czatu, uzupełnień i embeddingów są buforowane, a jednoturowe pytania czatu mogą też być dopasowywane według znaczenia (--semantic).

Odtwarzanie strumieni

Odpowiedzi strumieniowe są przechwytywane i odtwarzane jako strumień, więc klienci zachowują się dokładnie jak wcześniej.

Bezpieczne domyślnie

Każdy klucz API ma własny cache. Błędy i odfiltrowane odpowiedzi nigdy nie są zapisywane, a żądania mogą pominąć cache za pomocą nagłówka.

Nigdy nie przeszkadza

Jeśli HotKV jest wolny lub niedostępny, żądania idą prosto do dostawcy. Brama raportuje też swoje liczby pod /_hotkv/metrics.

Jedyna zmiana w Twoim kodzie

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")

Częste pytania

Czy brama wymaga licencji HotKV?

Nie. Działa z dowolnym serwerem HotKV. Przy licencji obejmującej cache promptów wpisy żyją w przestrzeni nazw PCACHE, a HotKV śledzi zaoszczędzone tokeny. Cache semantyczny zawsze wymaga licencji.

Czy dwóch klientów może widzieć nawzajem swoje odpowiedzi?

Nie. Klucz cache zawiera dane uwierzytelniające wywołującego, więc każdy klucz API ma własny cache, chyba że trzymasz w bramie jeden klucz do dostawcy lub uruchomisz ją z --scope global.

Z którymi dostawcami to działa?

OpenAI, Azure OpenAI, OpenRouter, vLLM, Ollama, LiteLLM i z wszystkim innym, co obsługuje API OpenAI, a także z API Messages od Anthropic z dokładnym cache.

Powiązane przypadki użycia

Wypróbuj na własnym obciążeniu

HotKV mówi protokołem Redis, więc możesz skierować na niego istniejącego klienta i uruchomić te same polecenia.