Momento Cache の Valkey で実現するセマンティック応答キャッシュ
同じ回答で解決できる質問に毎回回答を生成すると、コストと待ち時間が増えます。セマンティック応答キャッシュを使えば、質問の言い回しが異なっていても、AI アシスタントが過去の回答を再利用できます。

言い回しが違うだけで、同じ処理を繰り返す
地域や商品カテゴリーごとに異なる多数の規定を扱う、小売企業の顧客向けサポートアシスタントを考えてみましょう。このアシスタントは、問い合わせのたびに規定を検索し、出典を添えた説明を生成します。その中には、言い回しが少し違うだけで、繰り返し寄せられる質問もあります。
ある顧客が「ヘッドホンはいつまで返品できますか?」と質問します。アシスタントは公式の返品ポリシーを引用し、返品期限が30日間であると説明します。続いて、別の顧客が「ヘッドホンの返品期限は何日ですか?」と尋ねます。同じ説明で両方の質問に答えられるにもかかわらず、アシスタントは再び検索と生成を行い、似た回答を返してしまいます。
セマンティック応答キャッシュは、こうした処理の重複を防ぎます。Valkey に過去の回答と質問に関するメタデータを保存し、Valkey Search モジュールでそのメタデータを使って、似た質問への回答を探します。アプリケーションは回答の候補を取得し、その中から適切なものを返せるようになります。
その結果、推論の呼び出し回数が減り、待ち時間も短くなります。回答を再利用するたびに生成コストを抑えられ、モデルが新たに回答を生成するのを待つ必要もありません。繰り返し寄せられる質問が多いほど、費用と平均応答時間の両方を削減できます。
この用途に Momento Cache の Valkey が適している理由
Momento Cache は、リアルタイムのワークロード向けに開発された Redis のオープンソースフォークである Valkey の主要なプロバイダーです。Momento Cache と Valkey を使えば、Snap、FOX、Coinbase、Capcom などのグローバル企業を支えるものと同じ高性能な基盤を利用できます。
セマンティックキャッシュの各レコードには、元の質問、回答の全文と出典、そして埋め込みを保存します。埋め込みとは、類似検索のために質問を数値ベクトルで表現したものです。地域、言語、商品カテゴリー、条件、ポリシーのバージョンなどの追加フィールドで、その回答を再利用できる範囲を定義します。
Valkey がこれらのレコードを保持し、Search モジュール がベクトルとメタデータのインデックスを作成します。ベクトル検索と構造化フィールドのフィルターを組み合わせることで、セマンティックキャッシュは次の3つを実現できます。
- 回答と検索用データをまとめて保存する。 回答、出典、質問のベクトル、適用範囲を示すフィールドを1つのキーに保存します。一致するレコードには、アプリケーションが回答の適否を判断して返すために必要な情報がすべて含まれています。
- 文脈に合った回答を検索する。 ベクトルの類似度と、地域などの追加フィールドに対するフィルターを組み合わせます。言い換えられた質問への回答を見つけながら、異なるポリシーの適用範囲に属するレコードは除外できます。
- キャッシュした回答をワーカー間で共有する。 あるアプリケーションワーカーが Valkey に保存した回答は、ほかのワーカーからも利用できます。どのインスタンスが処理を担当しても、後続のリクエストで回答を再利用できます。
Valkey は、回答の共有ストアと、フィルターを適用したベクトル検索を提供します。検索に使う埋め込みを定義し、候補の回答を採用するか最終的に判断するのは、アプリケーションです。
セマンティックキャッシュの仕組み

意味が近く、再利用に適した回答が見つかれば、情報の取得と回答の生成を省略できます。
先ほどの2人目の顧客によるヘッドホンの返品に関する質問を例に、実際の処理を見てみましょう。
-
キャッシュを利用できる質問か、どの範囲に該当するかを確認する。 アプリケーションは、ヘッドホンの返品ポリシーに関する一般的な質問であると判断します。アプリケーションのコンテキストから、地域は米国、言語は英語であることと、現在有効なポリシーのバージョンを取得します。
-
回答の候補を探す。 埋め込みサービスが質問をベクトルに変換します。アプリケーションは FT.SEARCH コマンドで、このベクトルとメタデータのフィルターを Valkey に渡します。検索結果として、回答、ポリシーの出典、メタデータ、ベクトル間の距離を含む回答候補が返されます。
-
回答が質問に適しているかを確認する。 アプリケーションはベクトル間の距離を確認し、回答に影響する条件が一致しているかを確かめます。これにより、「開封済み」と「未開封」のような小さな表現の違いも見逃さずに判断できます。必要な条件が一致していれば、キャッシュされた説明を返します。
-
キャッシュミス時には回答を生成する。 適切な候補がなければ、アプリケーションは最新のポリシーを取得し、新しい回答を生成します。
-
再利用できる回答を保存する。 回答を返した後、キャッシュに適した内容であれば、その新しい回答を Valkey に保存します。たとえば、特定の顧客に固有の情報を含む回答は、この共有キャッシュには保存しません。
Valkey に回答を追加するたびに、後続の質問で情報の取得と回答の生成を省略できる機会が増えます。次の顧客が同じ返品ポリシーについて別の言い回しで尋ねたときには、モデルを再度呼び出さずに、より早く説明を返せます。
コストを抑え、回答を速くする
セマンティックキャッシュは、再利用できる回答を返す際に情報の取得と回答の生成を省略し、時間と費用を節約します。ヒット率が25%なら、対象となる質問の4件に1件で処理を短縮できます。
コストの削減。 回答の生成に $1,000 を使う場合、ヒット率が25%なら $250 を削減できる可能性があります。もちろん、キャッシュ基盤にも費用はかかりますが、通常は同じ回答を繰り返し生成する費用よりもはるかに少なく済みます。
応答の高速化。 情報の取得と推論は、呼び出しにかかる時間が特に長い処理で、数秒を要することも珍しくありません。一方、Momento Cache は Valkey のキャッシュにヒットした回答をミリ秒単位で返します。
実際のヒット率は、アプリケーションに寄せられる質問の傾向によって変わります。同じ回答を再利用できる質問が増えるほど、有料のモデル呼び出しを減らし、ユーザーの待ち時間を短縮する機会も増えます。
繰り返される質問に、もっと速く答える
ユーザーが同じ内容を異なる言い回しで尋ねるとき、セマンティックキャッシュを使えば、1つの回答を多くのリクエストに再利用できます。Momento Cache 上の Valkey Search は、回答の共有ストアとフィルター付きのベクトル検索を組み合わせ、アプリケーションが適切な回答を再利用し、生成コストとユーザーの待ち時間を削減できるようにします。
アプリケーションにセマンティックキャッシュを導入してみませんか。Momento Cache を使い始めることで、繰り返し寄せられる質問への回答を再利用できます。