AI リクエストの反復性が高いシナリオ向けに、AI Gateway はキャッシュ機能をアップグレードしました。Redis の正確なキャッシュと DashVector のセマンティックキャッシュを組み合わせることで、コストを削減し、大規模言語モデル (LLM) 呼び出しの効率を向上させます。このトピックでは、セマンティックキャッシュポリシーと正確なキャッシュポリシーの特徴、利点、および構成方法について説明します。
セマンティックキャッシュの主要な概念
セマンティックキャッシュ機構をよりよく理解するために、次のセクションではその主要な概念について説明します。
ベクトル埋め込み
セマンティックキャッシュのコアは、ベクトル技術を使用してユーザーの意図を照合することです。ユーザーが新しいリクエストを行うと、システムはまずテキスト埋め込みを通じてテキストを高次元ベクトルに変換します。このプロセスはベクトル埋め込みと呼ばれます。
これらのベクトルは、テキストのセマンティックな特徴を正確に捉えます。たとえば、「Apple phone」と「iPhone」という単語は異なりますが、ベクトル空間ではそれらのベクトルは非常に近くなります。このベクトル化された表現は、完全なテキスト一致を必要とする従来の正確なキャッシュの制限を克服します。これにより、システムは「北京の明日の天気」と「北京の今後 24 時間の天気予報」がセマンティックに類似していることを理解できます。
ベクトル比較
ベクトルが生成された後、システムはコサイン類似度アルゴリズムを使用して、新しいリクエストのベクトルとキャッシュされたリクエストのベクトルの間の角度を計算します。類似度があらかじめ設定されたしきい値に達すると、キャッシュされた応答がトリガーされます。0.8 から 0.9 の間のしきい値が推奨されますが、必要に応じて調整できます。
この機構により、システムは同義語表現をインテリジェントに識別できます。たとえば、E コマースのカスタマーサービスシナリオでは、ユーザーは「この荷物はいつ届きますか?」または「配達予定時間はいつですか?」と尋ねるかもしれません。システムは、両方の質問を同じキャッシュされた回答「物流情報によると、荷物は明日の午後 3:00 までに配達されます」に一致させることができます。
ベクトルデータベース
ベクトルを効率的に管理するために、DashVector ベクトルデータベースを使用します。このタイプのデータベースは、Hierarchical Navigable Small World (HNSW) アルゴリズムを使用して、ミリ秒単位で数百万のベクトルを取得し、動的更新をサポートします。従来の正確なキャッシュと比較して、セマンティックキャッシュは無限の数のセマンティックバリアントのマッチングをサポートするだけでなく、セマンティックに類似したアイテムのストレージスペースを共有することでリソース使用率を向上させます。
ポリシーの比較
比較ディメンション | 従来の正確なキャッシュ | セマンティックキャッシュ |
マッチングメソッド | 完全な文字列一致。 | コサイン類似度を使用してベクトル空間での距離を決定します。 |
フォールトトレランス | 同義語またはほぼ同義語の式を認識しません。 | 同義語、文のバリエーションなどのあいまい一致をサポートします。 |
応答速度 | ミリ秒レベル (ローカルキーバリューストアのクエリ)。 | ミリ秒レベル (ベクトルデータベースでの最近傍探索)。 |
典型的なシナリオ | 標準的な FAQ や固定パラメーターを持つ API 呼び出し。 | 自然言語の命令、複数回の会話、あいまいクエリ。 |
費用対効果 | 高頻度で反復的なリクエストに最適です。 | セマンティックの多様性が高く、ユーザーの意図が類似しているシナリオに最適です。 |
特徴と利点
デュアルモードキャッシュシステム: 2 つのキャッシュタイプから選択し、必要に応じてマッチングしきい値を動的に調整できます。
正確なキャッシュ: Redis キーバリューストアアーキテクチャに基づいており、同一のリクエストに対してミリ秒レベルの応答を提供します。
セマンティックキャッシュ: DashVector ベクトルデータベース (Alibaba Cloud Vector Retrieval Service) を使用して、セマンティックに類似したリクエストをインテリジェントに照合します。類似度のしきい値は調整可能です。これにより、従来の文字列マッチングの制限を克服します。
冗長な計算の削減: 同一の AI リクエストに対して、キャッシュされた応答データが直接返されるため、大規模言語モデルへの冗長な呼び出しが回避されます。
パフォーマンスの向上: キャッシュから結果を迅速に取得することで、応答時間とバックエンドサーバーの負荷が大幅に削減されます。セマンティックキャッシュにより、意図レベルの応答が可能になり、ユーザーの満足度とエクスペリエンスが大幅に向上します。
シナリオカバレッジの拡大: カスタマーサービスシステムやナレッジベースクエリなどの標準的なシナリオに適しており、「明日の天気」や「今後 24 時間の天気予報」などの自然言語命令のバリアントの処理をサポートします。
ログモニタリング: キャッシュヒット率メトリックの分析を提供します。
手順
左側のナビゲーションウィンドウで、[LLM API] をクリックします。次に、API の名前をクリックして API 詳細ページに移動します。
[ポリシーとプラグイン] をクリックし、[キャッシュ] スイッチを有効にして、パラメーターを構成します。
AI Gateway は、[セマンティックキャッシュ] と [正確なキャッシュ] をサポートするようにキャッシュ機能をアップグレードしました。ポリシーの比較 に基づいて適切なキャッシュメソッドを選択します。
セマンティックキャッシュ
重要リクエストに
x-higress-skip-ai-cache: onリクエストヘッダーが含まれている場合、リクエストはキャッシュをバイパスします。リクエストはバックエンドサービスに直接転送され、応答はキャッシュされません。
[キャッシュキー生成ポリシー]: デフォルトオプションの [最新の質問のみを使用] を選択するか、要件に応じて [過去の質問を統合] を選択します。
[テキスト埋め込み構成]:
[AI サービス]: 作成した AI サービスを選択します。AI サービスがない場合は、サービスの作成 をクリックして作成します。
[モデル名]: 使用するモデルの名前を選択します。
[タイムアウト]: タイムアウト期間を設定します。デフォルト値は 5000 ms です。
[ベクトルデータベース構成]:
[サービスプロバイダータイプ]: DashVector (Vector Retrieval Service) を有効化していない場合は、コンソールへ移動 をクリックしてサービス有効化ページを開きます。次の手順に従います: 。後で使用するためにコレクション名を記録します。
重要コレクションを作成するときは、距離メジャーとして
Cosineを選択します。ベクトルディメンションは、テキスト埋め込みモデルのディメンションと一致する必要があります。Alibaba Cloud Model Studio プラットフォーム上のテキスト埋め込みモデルの出力ベクトルディメンションの詳細については、「汎用テキスト埋め込み」をご参照ください。[エンドポイント]: DashVector エンドポイントを入力します。
[コレクション名]: 作成したコレクションの名前を入力します。
[API キー]: アクセス資格情報。詳細については、「API キーの管理」をご参照ください。
[ベクトル類似度しきい値]: この値は、クエリがキャッシュされたコンテンツとどの程度厳密に一致するかを決定します。値の範囲は 0 から 1 です。0.8 または 0.9 の値が推奨されます。値が大きいほど、セマンティックの類似性が高いことを示します。詳細については、「ベクトル類似度しきい値設定ガイド」をご参照ください。
[タイムアウト]: タイムアウト期間を設定します。デフォルト値は 3000 ms です。
正確なキャッシュ
重要Redis コンソールで、ゲートウェイインスタンスの VPC CIDR ブロックをホワイトリストに追加します。
リクエストに
x-higress-skip-ai-cache: onリクエストヘッダーが含まれている場合、リクエストはキャッシュをバイパスします。リクエストはバックエンドサービスに直接転送され、応答はキャッシュされません。

[キャッシュキー生成ポリシー]: 必要に応じて [最新の質問のみを使用] (デフォルト) または [過去の質問を統合] を選択します。
[Redis キャッシュ構成]:
[Redis エンドポイント]: Redis エンドポイントを入力します。
[ポート]: ポート番号を入力します。
[アクセス方法]: Redis サービスにアクセスする方法を選択します。オプションは [アカウントとパスワードでログイン]、[パスワードでログイン]、[パスワードなしでログイン] です。
[データベースアカウント]: アカウントとパスワードを使用してログインする場合は、データベースアカウントを入力します。
[データベースパスワード]: パスワードベースの認証を選択した場合は、データベースパスワードを入力する必要があります。
[データベース番号]: データベース番号。
[キャッシュ期間 (秒)]: デフォルトのキャッシュ期間は 1800 秒です。この期間中に、API が同一の AI リクエストを受信した場合、LLM は呼び出されず、キャッシュされた応答が直接返されます。
構成を確認し、[保存] をクリックします。
ベクトル類似度しきい値設定ガイド
コアコンセプト
ベクトル類似度しきい値は、セマンティックキャッシュのマッチング秘密度を制御するキーパラメーターです。クエリがキャッシュされたコンテンツとどの程度厳密に一致するかを決定します。
値の範囲: 0.0 (完全に非類似) から 1.0 (完全に類似) までの値。
推奨範囲: 0.8 から 0.9 (ビジネス要件に基づいて調整可能)。値を 0.8 未満に設定しないでください。
低いしきい値 (0.75 など): ユーザーが異なる表現を使用しても、セマンティクスが類似していればキャッシュされた結果が返されます。
高いしきい値 (0.99 など): ユーザーがほぼ同一の表現を使用した場合にのみ、キャッシュされた結果が返されます。
なぜ 0.8 以上の値が推奨されるのですか?
しきい値が 0.8 未満の場合、システムは無関係なクエリを一致として誤って判断する可能性があります。これにより、誤検知 (システムが誤って無関係な結果を返す) が発生し、ユーザーエクスペリエンスやビジネスの正確性に悪影響を与える可能性があります。
効果比較の例
設定例 | 類似度 | クエリ例 | 特徴の説明 |
| 1.0 | 「荷物はいつ届きますか?」 | このエントリを比較のベンチマークとして使用します。 |
0.89 | 「荷物の配達予定時間はいつですか?」 | 「荷物はいつ届きますか?」に一致します。ヒットが記録されます。 | |
0.86 | 「荷物は今日配達されますか?」 | 「荷物はいつ届きますか?」に一致します。ヒットが記録されます。 | |
0.83 | 「荷物は今日どこに配達されますか?」 | ヒットは記録されません。 |
チューニングの提案
ベンチマークテスト: デフォルト値の 0.8 から始めて、しきい値を徐々に増減させてキャッシュヒット率の変化を観察できます。
シナリオ適応:
時間的制約のあるクエリ (リアルタイムの物流追跡など) の場合は、より高い類似度しきい値が推奨されます。
高度に標準化された回答が必要なシナリオ (FAQ 応答など) の場合は、より低い類似度しきい値を使用できます。
パフォーマンスバランス: しきい値を下げると、LLM 呼び出しの数が増加します。
典型的な質問
Q: 最適なしきい値を決定するにはどうすればよいですか?
A: A/B テストの結果を比較することによって:
キャッシュヒット率と LLM 呼び出しコストを計算します。
無関係なキャッシュされた回答に関するユーザーフィードバックを収集します (例: 「なぜ新しい質問で古い回答が返されたのですか?」)。
キークエリ (「リアルタイムクエリ」対「履歴クエリ」など) の応答時間の変動を監視します。
最新のビジネスデータに基づいて、定期的 (たとえば、毎月) にしきい値設定を再評価することをお勧めします。ピーク時には、クエリ量の急増に対応するためにしきい値を下げることを検討できます。
キャッシュヒット率
Simple Log Service を有効化してから、キャッシュヒット率をクエリする必要があります。
次のサンプル検索文は、ゲートウェイレベルでキャッシュヒット率をクエリする方法を示しています。
cluster_id:{your-gatewayId} and inner-ai-cache-{your-gatewayId} | SELECT
SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' THEN 1 ELSE 0 END) AS hit_count,
SUM(CASE WHEN content LIKE '%cache miss for key%' OR content LIKE '%score not meet the threshold%' THEN 1 ELSE 0 END) AS miss_count,
SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' THEN 1 ELSE 0 END) * 100.0 /
NULLIF(SUM(CASE WHEN content LIKE '%cache hit for key%' OR content LIKE '%key accepted%' OR content LIKE '%cache miss for key%'
OR content LIKE '%score not meet the threshold%' THEN 1 ELSE 0 END), 0) AS hit_rate{your-gatewayId}をゲートウェイインスタンス ID に置き換えます。最初のプレースホルダーにはgw-プレフィックスが必要ですが、2 番目のプレースホルダーには不要です。キャッシュ設定からログクエリページを開くと、`cluster_id` が自動的に含まれます。この場合、検索文の残りの部分を貼り付けるだけで済みます。
クエリ結果にはキャッシュヒット率が表示されます。

例
正確なキャッシュが有効になっている場合、同一のクエリのみが一致します:

セマンティックキャッシュが有効になっている場合、セマンティックに類似したクエリも一致する可能性があります。セマンティック類似度がしきい値よりも低い場合、一致は見つかりません:

