ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-04-23上級

Antigravity で LLM 応答をセマンティックキャッシュする — 類似クエリでコストを80%削減する本番実装ガイド

Antigravity と pgvector・Gemini を組み合わせて、LLM 応答を「意味の近さ」でキャッシュする本番運用ガイド。類似度しきい値のチューニング、落とし穴の回避、監視メトリクスの設計まで実装コード付きで解説します。

antigravity435semantic-cachepgvector2gemini15cost-optimization7production59llm-infrastructure

プレミアム記事

チャットボットや社内 FAQ を運用していて、ふと請求書を見て「同じような質問に毎回フル料金を払っているのでは」と気づいた経験はないでしょうか。私自身、個人開発のアプリに組み込んだ Gemini の利用料が想定の3倍近くに膨らみ、ログを追いかけて分かったのは「ほぼ同じ意図の質問が、少しずつ表現を変えて1日に数百件届いている」という事実でした。

従来の Redis を使った完全一致キャッシュでは、こうした「似ているが完全には同じではないクエリ」は全てキャッシュミスになります。ここでは埋め込みベクトルで「意味の近さ」を測るセマンティックキャッシュを、Antigravity を相棒にしながら本番で運用できる形まで仕上げる過程を丁寧に追いかけていきます。完成形は pgvector と FastAPI と Gemini で動くシンプルな実装ですが、しきい値チューニングと落とし穴の回避策を中心に、私が現場で痛い目を見ながら学んだことを可能な限り書き残しました。

なぜ LLM には意味ベースのキャッシュが必要なのでしょうか

従来のキャッシュは「キーが一致すれば値を返す」仕組みです。HTTP レスポンスキャッシュも Redis も同じ発想で、URL やクエリパラメータをキーにしてヒットを判定します。しかし、LLM のユーザーはそれとは決定的に違う振る舞いをします。

実際に運用しているサポートボットのログから、同じ意図でよく投げられる質問の例を挙げてみます。

  • 「キャンセル方法を教えてください」
  • 「解約はどうすればいいですか?」
  • 「退会したい」
  • 「サブスクをやめるには?」

この4つは完全に同じ意図ですが、文字列としては一つも一致しません。完全一致キャッシュではヒット率0%で、毎回 LLM にトークンを消費させることになります。一方で、text-embedding モデルで4つの文を埋め込みベクトルに変換すると、互いのコサイン類似度は 0.89〜0.94 の範囲に収まります。つまり「ベクトル空間で近いクエリは同じ応答でよい」という仮定を置けば、4つのうち3つはキャッシュで返せる可能性があるわけです。

ここで得られる利益は3つあります。1つ目は当然ながら推論コストの削減です。2つ目はレスポンス遅延の短縮で、LLM 呼び出しの 800〜2000 ミリ秒に対してベクター検索とキャッシュ返却なら 50 ミリ秒以下に収まります。3つ目は見落とされがちですが「サービス全体の応答が安定する」ことです。LLM には日によって品質の揺れや一時的な障害がありますが、キャッシュから返す限りは過去の良い応答を再現できます。

もっとも、意味の近さで返すということは「似ているが同じではない」クエリに古い応答を返すリスクも抱え込みます。この記事の後半で扱う「しきい値チューニング」と「落とし穴の回避」は、このリスクを現実的な範囲に収める工夫そのものです。

全体アーキテクチャ — シンプルに始めて段階的に強くする設計

複雑な設計に手を出す前に、最小の構成を先に押さえておきます。セマンティックキャッシュのコア構造は次の5ステップで表現できます。

  1. ユーザーのクエリを受け取ります
  2. 埋め込みモデルでベクトルに変換します
  3. ベクターストアで類似度トップ1を検索します
  4. 類似度がしきい値以上ならキャッシュから応答を返します
  5. しきい値未満なら LLM を呼び出し、応答と埋め込みをベクターストアに保存します

ストアの選択肢は複数あります。私が今回推すのは PostgreSQL + pgvector の構成です。理由は単純で、既に運用中のアプリケーション DB にそのまま統合できるからです。pgvector を使った RAG パイプラインの構築ガイド でも触れていますが、pgvector は HNSW インデックスをサポートしており、数百万件のベクトルでも 50ms 以下で近傍検索を返せます。Upstash Vector や Pinecone のようなマネージド専用サービスも有力ですが、別 API・別課金・別バックアップを管理する負担を考えると、個人開発や中規模 SaaS では「まず pgvector」が合理的だと私は考えています。

埋め込みモデルには Google の text-embedding-004 を採用します。768次元で多言語に対応しており、1k トークンあたり数百分の1セントと非常に安価です。キャッシュの目的であるコスト削減を、埋め込みコストで相殺してしまう失敗は避けなければなりません(この論点は後半の落とし穴で詳述します)。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
LLM コストが膨らみ続ける問題を、キャッシュヒット率の実測データに基づいた類似度しきい値のチューニングで解決できます
pgvector × FastAPI × Gemini で動く本番級のセマンティックキャッシュ実装を、Antigravity が途中で文脈を失わずに保守できる形で手に入れられます
本番で必ず踏む4つの落とし穴(古い情報・PII の漏洩・多言語クロスヒット・コスト逆転)を、事前に回避する設計パターンを習得できます
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-06-28
ストリーミング表示がローカルでは動くのに本番だと一括表示に戻るとき — 中間プロキシのバッファリングと沈黙する停止を計測する運用メモ
Antigravity 経由の Gemini ストリーミングを SSE で配信すると、ローカルでは1文字ずつ出るのに本番では数秒固まってから一括で出ます。中間プロキシのバッファリング・アイドル切断・再接続による二重生成を、計測してから潰す運用メモです。
アプリ開発2026-05-03
Antigravity × TypeScript で作る冪等性キーと重複排除ストア本番設計ガイド
Stripe Webhook の二重課金や Temporal ワークフローの再実行で起きる重複処理を、冪等性キーと重複排除ストアで止める本番設計を、Antigravity を伴走者にして TypeScript で組み上げる実践ガイドです。
アプリ開発2026-05-01
Antigravity で実装するゼロダウンタイム DB マイグレーション:Expand-Contract パターンと AI 駆動の安全策
本番DBの型変更・カラム名変更・テーブル分割を、ユーザー影響ゼロで遂行するための Expand-Contract パターンを Antigravity の AI 支援とともに完全実装する本番運用ガイドです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →