AI ゲートウェイは、デュアルエンジンアプローチにより、反復的な AI リクエストのキャッシュを強化します。Redis ベースの完全一致キャッシュと DashVector セマンティックキャッシュを組み合わせることで、コストを削減し、大規模言語モデル (LLM) 呼び出しの効率を向上させます。このドキュメントでは、両方のキャッシュポリシーの特徴、メリット、設定について説明します。
セマンティックキャッシュの概念
ベクトル埋め込み
-
セマンティックキャッシュは、ベクトル技術を使用してユーザーの意図をマッチングします。ユーザーが新しいリクエストを行うと、システムはまず テキスト埋め込み によってテキストを高次元ベクトルに変換します。このプロセスを ベクトル埋め込み と呼びます。
-
これらのベクトルは、テキストのセマンティックな特徴を正確に捉えます。例えば、「Apple の携帯電話」と「iPhone」は異なる単語ですが、ベクトル空間ではそのベクトルは非常に近くなります。完全なテキスト一致を必要とする従来の完全一致キャッシュとは異なり、このベクトル化された表現により、システムは「明日の北京の天気」と「北京の今後 24 時間の天気予報」がセマンティックに類似していると理解できます。
ベクトル比較
-
ベクトルを生成した後、システムは コサイン類似度 アルゴリズムを使用して、新しいリクエストのベクトルとキャッシュされた項目のベクトルとの間の角度を計算します。類似度が事前に設定されたしきい値に達した場合、システムはキャッシュされた応答を返します。しきい値は 0.8 から 0.9 の間を推奨しますが、必要に応じて調整できます。
-
このメカニズムにより、システムは同義表現をインテリジェントに識別できます。例えば、e コマースのカスタマーサービスシナリオで、ユーザーが「この荷物はいつ届きますか?」や「配達予定時間はいつですか?」と尋ねるかもしれません。システムは両方の質問を同じキャッシュされた回答「物流情報によると、お荷物は明日の午後 3 時までに配達される予定です」にマッチングさせることができます。
ベクトルデータベース
AI ゲートウェイは DashVector を使用してベクトルを効率的に管理します。このタイプのベクトルデータベースは、HNSW (Hierarchical Navigable Small World) アルゴリズムを使用して、ミリ秒単位で数百万のベクトルを取得し、動的更新をサポートします。従来の完全一致キャッシュとは異なり、セマンティックキャッシュは無限の数のセマンティックな変種のマッチングをサポートし、セマンティックに類似した項目のストレージスペースを共有することでリソース使用率を向上させます。
戦略の比較
|
特徴 |
完全一致キャッシュ |
セマンティックキャッシュ |
|
マッチング方法 |
完全な文字列一致。 |
コサイン類似度によって決定されるベクトル空間距離。 |
|
フォールトトレランス |
同義またはほぼ同義の表現を認識しません。 |
同義語、文のバリエーションなどに対するあいまい一致をサポートします。 |
|
応答速度 |
ミリ秒レベル (ローカルキーバリュークエリ)。 |
ミリ秒レベル (ベクトルデータベースでの最近傍探索)。 |
|
代表的なシナリオ |
標準的な FAQ や固定パラメーターを持つ API 呼び出し。 |
自然言語の命令、マルチターン対話、あいまいクエリ。 |
|
コスト効率 |
高頻度で反復的なリクエストに最適です。 |
セマンティックな多様性が高く、ユーザーの意図が類似しているシナリオに最適です。 |
メリット
-
デュアルモードキャッシュシステム:2 つのキャッシュモードから選択し、ビジネスニーズに基づいてマッチングしきい値を動的に調整する柔軟性を提供します。
-
完全一致キャッシュ:Redis のキーバリューストレージアーキテクチャに基づいており、同一のリクエストに対してミリ秒レベルの応答を提供します。
-
セマンティックキャッシュ:DashVector ベクトルデータベース (Alibaba Cloud ベクトル検索サービスの一部) を使用して、セマンティックに類似したリクエストをインテリジェントにマッチングします。類似度のしきい値は調整可能で、従来の文字列マッチングの制限を克服します。
-
-
冗長な計算の削減:同一の AI リクエストに対して、システムはキャッシュデータを直接返し、LLM への冗長な呼び出しを回避します。
-
パフォーマンスの向上:キャッシュから結果を迅速に取得することで、AI ゲートウェイは応答時間とバックエンドサーバーの負荷を大幅に削減します。セマンティックキャッシュは「意図レベル」の応答を可能にし、ユーザー満足度とエクスペリエンスを大幅に向上させます。
-
シナリオカバレッジの拡大:カスタマーサービスシステムやナレッジベースクエリなどの標準的なシナリオに加え、「明日の天気」や「今後 24 時間の天気予報」などの自然言語命令の変種もサポートします。
-
ログモニタリング:キャッシュヒット率のメトリックを分析できます。
操作手順
AI ゲートウェイコンソールにログインし、[インスタンス] を選択します。トップメニューバーでリージョンを選択し、ターゲットインスタンスの ID をクリックします。
左側のナビゲーションウィンドウで [モデル API] を選択し、ターゲット API 名をクリックして [API 詳細] ページに移動します。
-
Policies and Plug-ins をクリックし、キャッシュ スイッチを有効にして、パラメーターを設定します。
AI ゲートウェイはキャッシュ機能をアップグレードし、Semantic と Exact Match をサポートするようになりました。戦略の比較 に基づいて、適切なキャッシュモードを選択します。
セマンティックキャッシュ
重要リクエストに
x-higress-skip-ai-cache: onヘッダーが含まれている場合、リクエストはキャッシュをバイパスします。リクエストは直接バックエンドサービスに転送され、応答はキャッシュされません。-
Cache Key Strategy:デフォルトのオプションである Latest Query Only を選択するか、要件に応じて Integrate Historical Queries を選択します。
-
テキストベクトル化設定:
-
AI Service:既存の AI サービスを選択します。AI サービスがない場合は、[サービスを作成] をクリックして作成します。
-
Model Name:使用したいモデルの名前を選択します。
-
Timeout Period:タイムアウト期間を設定します。デフォルト値は 5,000 ms です。
-
-
ベクトルデータベース設定:
-
Service Provider:DashVector を有効化していない場合は、[コンソールへ移動] をクリックしてサービス有効化ページを開きます。する必要があります。後で使用するためにコレクション名を記録しておきます。
重要コレクションを作成する際は、距離メトリックとして
Cosineを選択し、ベクトル次元がテキスト埋め込みモデルの次元と一致することを確認してください。Model Studio プラットフォーム上のテキスト埋め込みモデルの出力ベクトル次元を確認するには、「テキストとマルチモーダル埋め込み」をご参照ください。 -
Service URL:ご利用の DashVector サービスエンドポイントを入力します。
-
コレクション名:作成したコレクションの名前を入力します。
-
API キー:アクセス認証情報です。詳細については、「API キーの管理」をご参照ください。
-
Vector Similarity Threshold:この値は、クエリがキャッシュされたコンテンツとどの程度厳密に一致するかを決定します。範囲は 0 から 1 で、推奨値は 0.8 または 0.9 です。値が高いほど、セマンティックな類似性が高いことを示します。詳細については、「ベクトル類似度しきい値の設定」をご参照ください。
-
Timeout Period:タイムアウト期間を設定します。デフォルト値は 3,000 ms です。
-
完全一致キャッシュ
重要-
Redis コンソールに移動し、ゲートウェイインスタンスの VPC CIDR ブロックをホワイトリストに追加します。
-
リクエストに
x-higress-skip-ai-cache: onヘッダーが含まれている場合、リクエストはキャッシュをバイパスします。リクエストは直接バックエンドサービスに転送され、応答はキャッシュされません。
-
Cache Key Strategy:デフォルトのオプションである Latest Query Only を選択するか、要件に応じて Integrate Historical Queries を選択します。
-
Redis キャッシュ設定:
-
Redis service URL:ご利用の Redis サービス URL を入力します。
-
Port Number:ご利用のポート番号を入力します。
-
Access Method:Redis サービスへのアクセス方法を選択します。オプションは [アカウント+パスワード]、[パスワードのみ]、[パスワードなし] です。
-
Database Account:[アカウント+パスワード] のアクセス方法を選択した場合は、データベースアカウントを入力します。
-
Database Password:パスワードが必要なアクセス方法を選択した場合は、データベースパスワードを入力します。
-
Database No.:指定されたデータベース番号。
-
Duration (seconds):デフォルトのキャッシュ期間は 1,800 秒です。この期間中、API が同一の AI リクエストを受信した場合、LLM は呼び出されず、キャッシュされた応答が直接返されます。
-
-
-
設定を確認し、Save をクリックします。
ベクトル類似度しきい値の設定
基本概念
ベクトル類似度しきい値は、クエリがキャッシュされたコンテンツとどの程度厳密に一致するかを決定することで、セマンティックキャッシュのマッチング感度を制御する重要なパラメーターです。
-
値の範囲: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 を有効化する必要があります。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` フィルターが含まれます。この場合、フィルターの後に残りのクエリ文を貼り付けるだけで済みます。[モニタリング (AI キャッシュ)] ページで [ログの表示] をクリックしてログクエリページに移動します。ログソースはapig-plugin-logです。前述のクエリ文をクエリバーに入力して実行します。 -
クエリはキャッシュヒット率を返します。
例えば、結果は `hit_count` (キャッシュヒット) が 7、`miss_count` (キャッシュミス) が 6、`hit_rate` (ヒット率) が約 53.85% であることを示す場合があります。
例
-
完全一致キャッシュが有効な場合、同一のクエリのみがマッチングされます。例えば、ユーザーが「あなたは誰ですか?」というクエリを送信し、それがキャッシュから提供されない場合、モデルは通常どおりトークンを消費します (入力トークン:127、出力トークン:40)。同じクエリが完全一致キャッシュにヒットした場合 (from-cache で示される)、入力と出力の両方のトークンは 0 になり、キャッシュされた結果が直接返されます。これにより、トークンの消費が大幅に削減されます。
-
セマンティックキャッシュが有効な場合、セマンティックに類似したクエリもマッチングできます。セマンティックな類似度がしきい値を下回るクエリはマッチングされません。
セマンティックキャッシュヒットが発生すると、キャッシュされた応答が類似の質問に再利用されます。入力と出力の両方のトークンは 0 で、モデル推論リソースを消費しません。
例えば、ユーザーが
Where can my package be delivered today?(荷物は今日どこに配達されますか?) と尋ね、このクエリがキャッシュされた質問とセマンティックに大きく異なる場合、キャッシュミスが発生します。その後、`qwen-max` モデルが応答を生成し、通常どおりトークンを消費します。