# AIエージェントをソフトウェアに組み込むプラクティス
# Semantic Cache with No-Cache Zones|禁止領域付きキャッシュ
🎯 「同じ質問に何度もお金を払っていませんか?」セマンティックキャッシュでコスト削減できますが、キャッシュしてはいけない領域を先に切らないと事故になります。
🔥 解決する課題
AIエージェントへのリクエストは1回あたりのコストが高く、同じ意図のクエリが繰り返し届く環境では無駄なトークン消費が積み上がります。しかし完全一致キャッシュでは表記揺れに対応できずヒット率が極端に低くなります。かといって意味的キャッシュを無差別に適用すると、個人情報依存の応答が他ユーザに返る、リアルタイムデータの古い情報を返す、安全判断の誤りが大量複製されるといった重大事故を招きます。
💡 提案パターン
まず「キャッシュしてはいけない領域(No-Cache Zone)」をポリシーで先に定義します。PII依存・リアルタイムデータ・安全判断の3分類を禁止区域として切り出し、残りの安全な領域でのみベクトル埋め込みによる意味的類似度マッチングを行います。類似度閾値はリスクレベルに応じて段階的に設定し(低リスクFAQは0.92、中リスクは0.95、高リスクは0.97)、失敗コストが高い領域ほど厳しくします。キャッシュTTLには10-20%のジッタを加えて一斉失効による負荷集中(サンダリングハード)も防ぎます。
✅ 選定条件
使うとき:
- 同一・類似クエリの繰り返し率が全リクエストの概ね20%以上ある
- 1リクエストあたりのLLMコストが無視できない
- キャッシュ禁止領域を明確にポリシー定義できる
使わないとき:
- ほぼ全クエリがユーザ固有コンテキストに依存し汎用キャッシュのヒットが見込めない
- 全領域で失敗コストが極めて高くキャッシュ再利用が許容されない
⚠️ 落とし穴
- 埋め込みモデルを変更するとキャッシュ全体が無効化されます。モデルバージョンをメタデータに記録し、更新時の移行戦略を事前に決めておく必要があります
- No-Cache Zoneのパターンマッチが甘いと禁止すべきクエリが漏れます。ルールベースだけでは表記揺れに弱いため、本番では意図分類器の併用を検討してください
- 攻撃者が意図的に誤った応答をキャッシュに載せるキャッシュポイズニングのリスクがあります。書込時に品質スコアの閾値を設けてください
🔧 実装方針
- No-Cache Zoneの判定はルールベース(パターンマッチ+メタデータ判定)を最小構成とし、本番では意図分類器を併用して表記揺れに対応します
- 類似度検索の閾値はリスクレベル別に段階的に設定し、失敗コストが高い領域ほど閾値を引き上げます(低リスク0.92、中リスク0.95、高リスク0.97が出発点)
- 中リスク領域ではキャッシュヒット時に軽量モデルで妥当性を再検証する二段構成を採用します
- 埋め込みモデルのバージョンをキャッシュのメタデータに記録し、モデル更新時の段階的再埋め込みまたはフラッシュ戦略を事前に設計します
- キャッシュTTLにジッタ(10-20%のランダム幅)を加え、一斉失効によるLLMへの負荷集中を防止します
#
AIエージェント# #
ソフトウェアアーキテクチャ#