AIとLLMLLMアプリケーション

キャッシュ付きLLMゲートウェイ

OpenAIやAnthropicのSDKを1つのURLに向けるだけで、繰り返しのリクエストには再び料金を払う代わりにHotKVから応答します。コードの変更は不要です。

変更するコードの行数
1
静的バイナリ
~6 MB
オープンソース
Apache-2.0
ステップ 1 / 5
ゲートウェイを起動

プロバイダーの前に置くバイナリまたはコンテナは1つだけです。呼び出し元の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は、アプリケーションとLLM APIの間に入ります。SDKのベースURLを変えるだけで、同一のリクエストはHotKVから応答され、ストリーミングの応答はストリームとして再生され、言い換えた質問には意味で応答でき、処理中の同一リクエストは1回の上流呼び出しを共有します。HotKVが遅いか停止している場合、リクエストはそのままプロバイダーに送られます。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    ゲートウェイを起動

    プロバイダーの前に置くバイナリまたはコンテナは1つだけです。呼び出し元の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

    同一リクエストの集中

    最初のリクエストがまだ処理中のうちに、同一のリクエストが3件届きます。これらは1回の上流呼び出しを共有します。

    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を1つ変えるだけで同じキャッシュを使えます。言語ごとのライブラリは不要です。

セルフホストのモデル

vLLMやOllamaの前に置けば、繰り返しのプロンプトがモデルサーバーに届かないため、APIの料金ではなくGPU時間を節約できます。

標準搭載

得られるもの

完全一致とセマンティックのキャッシュ

同一のchat、completion、embeddingsリクエストをキャッシュし、単発のチャットの質問は意味でも照合できます(--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キーごとに独自のキャッシュを持ちます。ただし、ゲートウェイで上流キーを1つだけ使う場合や、--scope globalで起動した場合は除きます。

どのプロバイダーで使えますか?

OpenAI、Azure OpenAI、OpenRouter、vLLM、Ollama、LiteLLMなど、OpenAI APIに対応するものすべてに加え、完全一致キャッシュではAnthropicのMessages APIにも対応します。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。