3行でいうと

  • Anthropicが提供するプロンプトキャッシュは、「前置きが完全に同じ」ときだけ効く、入力側の割引です。出力は毎回モデルが作ります。セマンティックキャッシュは、これとは別の層で、似た質問に保存済みの答えをそのまま返します。
  • 「似ている」の判定はしきい値で決まり、公式の文書は、間違った答えを返す可能性を、仕組み上のものとして明記しています。しかも、数字の向きが製品で逆です。Azureは小さいほど厳しいと明記され、Redisは「類似度がしきい値を上回れば一致」という書き方から、大きいほど厳しい向きと読めました。
  • 実用では、しきい値のほかに、利用者ごとの分け方、保存期間、複数ターンの会話の扱いを決める必要があります。節約の見積もりは、「当たる割合」と「毎回かかる照合の費用」の2つで決まります。

この記事は、実際に使って確かめた記録ではありません。この記事は公式の文書を読んでまとめたもので、実際に使って確かめた記録ではありません。情報は2026年10月16日に確認しました。プレビューの製品もあり、仕様は変わることがあります。

先に結論

3つの「キャッシュ」を区別する

「キャッシュ」という言葉は、AIのAPIで少なくとも3つの別の意味で使われます。

何を保存するか 当たる条件 当たると
プロンプトキャッシュ(Anthropic) 同じ前置きの処理 前置きが完全に同じ 入力の単価が下がる。出力は毎回作られる
完全一致の応答キャッシュ(Cloudflare AI Gateway) 返事そのもの リクエスト全体が同一 モデルを呼ばずに返る
セマンティックキャッシュ(Azure、Redis、GPTCache) 質問の意味の数値化と返事 質問の意味が、しきい値以内に近い モデルを呼ばずに返る

Anthropicの文書は、キャッシュに当たるには、前置きが100%同じであることが要ると書き、似ているだけの前置きは当たらないと説明しています。このキャッシュは、組織をまたいで共有されません。

Cloudflareの文書は、同一のリクエストにだけ効くと書き、キー(SHA-256の値)は、提供元、エンドポイント、モデル、認証の見出し、リクエストの本文全体から作られます。意味の近さで探すセマンティック検索は、将来の計画として書かれていて、現時点では提供されていません。

プロンプトキャッシュの料金や条件の細かい話は、別の記事で扱っています。ここでは、セマンティックキャッシュが、その外側の層だと押さえておけば十分です。

仕組み:保存と検索の流れ

AzureとRedisの文書から、共通の流れが読み取れます。

  1. 質問が来たら、先に埋め込み(文章の意味を数字の列にしたもの)を作ります。これには別のモデルを呼びます。
  2. 保存済みの質問の埋め込みと照らし合わせ(ベクトル検索)、近さ(類似度)が基準を満たす保存済みの質問を探します。
  3. あれば、保存済みの返事を返します(ヒット)。モデルは呼びません。
  4. なければ、モデルを呼んで答えを作り、質問の埋め込みと答えを保存します。保存期間(TTL)を決めておきます。

Azure API Managementでは、これが2つの設定(ポリシー)に分かれていて、受け付ける側に照合(llm-semantic-cache-lookup)、返事を返す側に保存(llm-semantic-cache-store)を置きます。保存の側で、保存期間を秒で決めます(文書の例は60秒)。対応するAPIは、OpenAIのChat CompletionsとResponses、AnthropicのMessages(v2の階層のみ)、Google Vertex AIです。照合の失敗はエラーにならない、と書かれています。

Redisの「LangCache」では、検索の呼び出し(entries/search)で質問を送り、空なら自分でモデルを呼んで、保存の呼び出し(entries)で質問と答えを送ります。

GPTCacheは、MITライセンスのPythonのライブラリで、埋め込みの生成、類似度の評価、返事の保存、ベクトルの保存(ベクトルデータベース。Milvus、FAISS、Chroma、Qdrantなど)を、4つの部品として持つ作りです。

しきい値:数字の向きが逆

「どれくらい近ければ、同じとみなすか」の数字がしきい値です。

数字をそのまま比べることはできません。どちらの数字も、「どの距離の定義か」は文書で確認できませんでした。Redisは距離の計算を書いておらず、Azureも、点数の定義は読んだ範囲に見当たりませんでした。厳しい側の値から始めて調整する、というのが、2社の共通の勧めです。Redisは、「まず厳しく」始めるよう書いています。

Azure API Managementの設定項目(公式の記載)

llm-semantic-cache-lookup

項目 必須 内容
score-threshold はい 0.0〜1.0。小さいほど近い意味が必要
embeddings-backend-id はい 埋め込みを作る呼び出し先
embeddings-backend-auth はい system-assigned のみ
ignore-system-messages いいえ(既定 false) true にすると、システム文を比べる対象から外す。文書は true を推奨
max-message-count いいえ 会話の件数がこの数を超えたら、キャッシュを使わない
vary-by(子要素) いいえ キャッシュを分ける条件。契約(サブスクリプションID)などで分ける。複数あれば連結

llm-semantic-cache-store:duration(秒、必須)、cache-response(既定 false。省略時は200 OKの返事だけ保存)。

その他の記載:外部のキャッシュ(Azure Managed Redis。検索の機能RediSearchが必要で、キャッシュを作るときにしか有効にできない)と、埋め込み用の別のモデルの配備が要ります。照合の直後に、レート制限を置くよう勧められています。コンテンツの安全性のポリシーも検討するよう書かれています。

落とし穴

公式の文書に書かれた点を、4つにまとめます。

1. 外れる(偽の当たり)。 Azureの2つの文書は、似ているだけの質問に、間違った、古い、またはそのリクエストに安全でない返事を返すことがあるので、評価して安全策を足すよう書いています。GPTCacheの文書は、当たりの誤り(偽陽性)と、当たるはずのものが外れる誤り(偽陰性)の両方が起きうると書いています。

2. 古くなる。 保存期間(TTL)が長いほど、世の中や社内の情報が変わったあとも、古い答えを返し続けます。Azureの例は60秒でした。どのくらいが適切かは、答えの内容によります。僕らが読んだ範囲では、目安の数字は見当たりませんでした。

3. 分けずに混ぜる。 Azureは vary-by で、契約(サブスクリプションID)ごとにキャッシュを分ける例を示しています。分けないと、ある人の情報を含む答えが、似た質問をした別の人に返ることがある、というのは僕らの推論です。Redisは、最大5個の属性(タグ)を付けられると書いています。提供元のキャッシュは組織ごとに分かれていますが、自分で作る層は、自分で分ける設計が要ります。

4. 会話の途中。 複数ターンの会話では、直前の1文だけが似ていても、文脈が違えば答えは違います。Azureの max-message-count は、会話が長いときにキャッシュを使わない設定で、ignore-system-messages は、システム文を比べる対象から外す設定です。

GPTCacheの文書には、運用面の注意もあります。保存の入れ替えが件数だけで決まり、メモリ不足の原因になりうること、APIが変わりうること、新しいモデルやAPIの対応を維持者が止めていること、他のLLM(AnthropicやHugging Face Hubなど)への対応が、READMEの一覧で未完了の項目になっていることです(Hugging Faceは、埋め込みの側では対応済みと別に書かれています)。

費用:当たる割合と、毎回の照合費の2つで決まる

セマンティックキャッシュは、当たれば本体のモデルの呼び出しが丸ごと要りません。しかし、当たるかどうかにかかわらず、質問のたびに埋め込みを作る費用と、保存や検索の費用がかかります。簡単な式は次のとおりです(僕らの整理)。

1件あたりの節約 ≒ ヒット率h × 本体の1件の費用C − 照合の1件の費用e
損益分岐のヒット率 ≒ e ÷ C

例えば、eがCの20分の1なら、ヒット率が5%を超えると、費用の面では黒字になる、という計算です(数字は式の説明のための仮の値です)。この式には、間違った答えを返した損害は入っていません。

Redisの文書は、節約の目安を「月の出力トークン費 × ヒット率」とし、入力トークンの分は、埋め込みと保存の費用とほぼ相殺される、と書いています。例は、月の費用が200ドルで、60%が出力なら出力は120ドル、ヒット率50%なら約60ドルの節約、という計算です。これはRedisの試算の例で、実測値ではありません。

プロンプトキャッシュは、当たったときの読み取りが、通常の入力の0.1倍(モデルによっては0.05倍など)とAnthropicのプロンプトキャッシュの文書に書かれていますが、出力は通常どおりかかります。つまり、セマンティックキャッシュが節約できるのは、プロンプトキャッシュでは削れない出力側の費用です。その代わり、間違いの可能性を引き受けます。

使うかどうかの見立て

見立てです。次のように考えると、無理が少ないと思います。

気をつけること

出典

更新履歴