フォーム読み込み中
生成AI(大規模言語モデル:LLM)の普及に伴い、コストや応答遅延といった課題が浮上しています。
チャットボットや文書の要約、会議録の自動生成などで膨大なデータを取り扱うため、この問題は避けられません。これを解決する技術として注目されているのが「コンテキストキャッシング」です。
前編記事では、「コンテキストキャッシング」の基本概念やGoogle Cloud Vertex AI (Gemini)とAnthropic (Claude)の機能比較、そして、代表的なユースケースについて解説しました。
後編の本記事では、より詳しい 具体的なコスト比較 や サンプルコードを用いた実装ポイントの解説および導入時のノウハウ を掘り下げます。
業務の効率化とコスト削減を目指す企業必見の内容です。
コンテキストキャッシング とは、LLM が参照する大容量データ(テキストや画像、動画、音声など)を、クラウド上に キャッシュ として保存しておき、2 回目以降の呼び出し で同じデータを再送しなくて済むようにする仕組みです。大量の情報を送る場合、トークン課金やネットワーク負荷が高くなるのが従来の LLM 運用の課題でしたが、一度キャッシュすれば キャッシュ ID を渡すだけで済むため、コスト削減 と 応答速度向上 の両方に効果があります。
Google Cloud (Gemini) と Anthropic (Claude) は、それぞれ 異なる実装のコンテキストキャッシング を提供しており、動画・音声まで含むマルチモーダルをキャッシュできる Gemini、テキスト重視で短い TTL を採用する Claude など、特徴を住み分けています。前編では、この違いと大まかなユースケースを俯瞰してみました。
改めてユースケースの概要を復習しておきます。
製造業
技術文書や検査画像を何度も参照するシーンが多く、データの重複送信をキャッシュ使用で回避
金融業
契約書や法令文書を繰り返し要約・分析する場合に、キャッシュ利用で大幅なコスト圧縮
メディア/放送
長時間の動画を翻訳・要約するたびにフルデータ送信せずに済むので、動画の参照コストとLLMからの応答速度時間を削減
社内用RAGチャットボット
PDFを直接添付し回答をさせることにより精度を大きく改善させる可能性がある。ただし、社員1人1人が個別にPDFを添付した分だけコストがかさむので、キャッシュ機能を利用し複数社員が共通利用できるキャッシュオブジェクトから回答を得ることで精度向上とコスト削減を両立
これらはあくまで一例であり、コンテキストキャッシングは 「同じ文脈を何度も使う」 すべての業務に効果を発揮し得る機能 です。
更に詳しくは、前編記事「 圧倒的なコスト削減効果!「コンテキストキャッシング」で変わる生成AI運用(前編)──概要からメリットまで徹底解説」を御覧ください。
前半部とここまでの振り返りで、コンテキストキャッシングの基本概念や機能、ユースケースをご理解いただけたかと思います。しかし、いざ自社が導入をしようとしたときに、複雑な料金体系から「ちゃんと設計して使わないと、むしろコストが上がってしまうのではないか?」という懸念もあるでしょう。そこで、暫定的ではありますが以下のようなフレームワークを用いて、キャッシュ戦略を自社に取り込めるかどうかを判断する一助となるように記します。
PoC (小規模実験)
小さめのデータでキャッシュを使ってみて、ヒット率や費用対効果を試す。実際に複数の社員が何度も同じファイルやコンテキストをLLMに入力をしていた場合、キャッシュを利用できるメリットを見いだせる可能性が出てくる。
* この際、GeminiやClaudeではmetadataとして、cached_token_countを取得することができるため、1か月の間でどれだけの数値が上がったかを見ることが有効になる
本導入
PoC で得た結果をもとに、対象データ範囲を拡大するかどうかを判断する。実際にキャッシュの使用率で効果があったファイル以外のファイルをどのように含めるかを検討する。
例えば、 スモールテストではPDFのみとしたが、movやmp3などの動画や音声データも含めるかを検討し、キャッシュさせるファイルに対するルールを策定するなど講じる。
あくまでも一例ですが、特定のGoogle Cloud Storage(GCS)を準備し、cached_content/ のようなディレクトリに配置したファイルは自動的に1時間のTTLでキャッシュが作られるように自動化する等、キャッシュ発動のトリガーをシステム化することで不必要な請求金額を回避する
モニタリング & チューニング
本導入後の運用フェーズでは、事前に取り決めたルールに準拠しつつ、キャッシュ対象ファイルの利用率やCached tokenをAPI経由で取得しモニタリングする。
仮にTTLの内に利用された回数やcached_token_countが少なかった場合は、キャッシュ利用が不要であると判断し、ファイルをディレクトリから削除するなどの処置をとる。
逆に利用が想定よりも多かった場合は、TTLの延長を検討しよりコスト的にも速度的にも有利になるように継続改善を進める。
全社展開
上記1-3のサイクルを一定期間(例えば、3か月)回してみて、課題がクリアされれば、大規模な運用や複数部門への水平展開を行う。その際に、不必要なキャッシュオブジェクトが大量に作成されぬよう、ガイドやルールなどを策定&コストのアラートルールを設けて監視を行うことが前提となる(ここがないと、アンコントローラブルとなり、特にストレージ費用の面で想定外のコストが発生してしまうので、要注意)
実際にここまでキャッシュ戦略を要件定義し運用を進めている企業は少ないと考えておりますが、生成AIありきで業務を組み立てる必要がある昨今では、キャッシュ戦略によってその企業が生成AIを活用できるキャパシティが左右されると言っても過言ではありません。
特にSaaS系の生成AIサービスを利用する場合は、アカウント単位の課金 × 固定費用となるため、キャッシュなど意識しなくてもよいと考え立ちだと思います。
しかし、AppSheetやPowerAppsのようなノーコード・ローコードツールの導入も進み、アプリケーションの民主化が増加しているのも事実です。その際、キャッシュを用いて自社のデータ活用を効率化することは業種を問わない共通のニーズになるのではないでしょうか。
ここまででキャッシュの重要性はある程度ご理解いただけたかと思います。
続いて、実際にキャッシュ/非キャッシュのコストを比較することで、より現実的な数値で利点や注意すべき点を確認していきましょう。
ここでは「Vertex AI Gemini」を前提とした試算比較を行います。なお、Gemini APIに関する単価テーブルは*2025年3月10日時点 で2つ存在しており、本試算のベースとなる料金テーブルは Vertex AI のモデルを前提としています。
また、前編では大雑把に $0.025/1M tokens で試算しましたが、以下の前提に基づき、より正確に試算し直します。
ただし、Vertex AI Geminiの料金計算テーブルは非常に複雑であるため、より直感的に理解ができるようケースをシンプルにした4パターンを比較していきます
テキストの入力の試算ケース:
動画の入力の試算ケース:
前提:
深く理解いただく必要はありませんが、Vertex AI Geminiのモーダル別の単価と単位をまとめた表になります。入力トークンが12.8万(128k)未満か以上で料金が異なります。(後に続くケースの試算は、こちらの単位と単価を使用します。)詳細は公式サイトの料金表を御覧ください。
| モデル | 項目 | タイプ | 料金(12.8万トークン未満) | 単位 | 料金(12.8万トークン以上) | 単位 |
|---|---|---|---|---|---|---|
Gemini 1.5 pro | マルチモーダル入力 | テキスト | 0.0003125 | /1,000文字 | 0.000625 | /1,000文字 |
| テキスト出力 | 出力(テキストのみ) | 0.00125 | /1,000文字 | 0.0025 | /1,000文字 | |
| キャッシュ入力 | テキスト | 0.000078125 | /1,000文字 | 0.00015625 | /1,000文字 | |
| キャッシュのストレージ | テキスト | 0.001125 | /1,000文字 / 時間 | 0.001125 | /1,000文字 / 時間 |
| モデル | 項目 | タイプ | 料金(12.8万トークン未満) | 単位 | 料金(12.8万トークン以上) | 単位 |
|---|---|---|---|---|---|---|
Gemini 1.5 pro | マルチモーダル入力 | 動画 | 0.00032875 | /秒 | 0.0006575 | /秒 |
| テキスト出力 | 出力(テキストのみ) | 0.00125 | /1,000文字 | 0.0025 | /1,000文字 | |
| キャッシュ入力 | 動画 | 0.0000821875 | /秒 | 0.000164375 | /秒 | |
| キャッシュのストレージ | 動画 | 0.0011835 | / 秒 / 時間 | 0.0011835 | / 秒 / 時 |
まずはGeminiで標準的なテキスト入力のケースを2つ見ていきましょう。
このケースは20万トークンのインプットで、10回繰り返し処理を行います。12.8万トークンを超えているので先程の単価表の右側の料金(12.8万トークン以上)を使います。
| キャッシュあり | キャッシュなし | ||||
|---|---|---|---|---|---|
| 入力トークン | 繰り返し回数 | 詳細 | 金額($) | 詳細 | 金額 |
| 200,000 | 10 | - | - | 入力トークン*2.5文字/単位*単価*繰り返し回数 | 3.125 |
| 200,000 | 10 | 入力トークン*2.5文字/単位*単価*繰り返し回数 | 0.781 | - | - |
| 200,000 | - | 1時間キャッシュストレージに保管 | 0.56 | ||
| 合計($) | 1.343 | 合計($) | 3.125 | ||
このケースは20万トークンのインプットで、先程よりも多い50回繰り返し処理を行います。12.8万トークンを超えているので先程の単価表の右側の料金(12.8万トークン以上)を使います。
| キャッシュあり | キャッシュなし | ||||
|---|---|---|---|---|---|
| 入力トークン | 繰り返し回数 | 詳細 | 金額($) | 詳細 | 金額 |
| 200,000 | 50 | - | - | 入力トークン*2.5文字/単位*単価*繰り返し回数 | 15.625 |
| 200,000 | 50 | 入力トークン*2.5文字/単位*単価*繰り返し回数 | 3.906 | - | - |
| 200,000 | - | 1時間キャッシュストレージに保管 | 0.56 | ||
| 合計($) | 4.468 | 合計($) | 15.625 | ||
なお、20万トークンのテキストインプットにおける損益分岐点は「3回以上の繰り返し処理」になります。詳細な計算は割愛しますが、3回以上繰り返し使う場合は、キャッシュがお得になり、2回までしか繰り返し使わないということであれば、キャッシュを使用しないほうがコスト的に有利になります。
続いて、テキストだけでなく「動画」を大容量データとしてキャッシュするケースを想定し、キャッシュあり/なしの費用を比較してみましょう。
特に動画などのマルチモーダルは、Geminiの大規模コンテキストウィンドウとの相性がよく、キャッシュが活躍する場面が多いので、要チェックです。
動画と音声はそれぞれ秒数に比例した固定レートでトークンに変換されます。詳細は開発者ドキュメント「トークンを理解してカウントする」を参照してください。
動画の場合の固定レートは、263 トークン/秒ですので、1.5時間は5,400秒 x 263 = 約142万トークンとなります。12.8万トークン以上なので先程の動画の料金表の右側にある料金(12.8万トークン以上)を利用します。
| キャッシュあり | キャッシュなし | ||||
|---|---|---|---|---|---|
| 秒数 | 繰り返し回数 | 詳細 | 金額($) | 詳細 | 金額 |
| 5,400 | 10 | - | - | 入力トークン*単価*繰り返し回数 | 35.505 |
| 5,400 | 10 | 入力トークン*単価*繰り返し回数 | 8.876 | - | - |
| 5,400 | - | 1時間キャッシュストレージに保管 | 6.39 | ||
| 合計($) | 15.267 | 合計($) | 35.505 | ||
動画は先程と同じで12.8万トークン以上なので先程の動画の料金表の右側にある料金(12.8万トークン以上)を利用します。
| キャッシュあり | キャッシュなし | ||||
|---|---|---|---|---|---|
| 秒数 | 繰り返し回数 | 詳細 | 金額($) | 詳細 | 金額 |
| 5,400 | 50 | - | - | 入力トークン*単価*繰り返し回数 | 177.525 |
| 5,400 | 50 | 入力トークン*単価*繰り返し回数 | 44.381 | - | - |
| 5,400 | - | 1時間キャッシュストレージに保管 | 6.39 | ||
| 合計($) | 50.772 | 合計($) | 177.525 | ||
なお、1.5時間における動画インプットの損益分岐点は、20万トークンのテキストインプットのケースと同様に「3回以上の繰り返し処理」になります。詳細な計算は割愛しますが、3回以上繰り返し使う場合は、キャッシュがお得になり、2回までしか繰り返し使わないということであれば、キャッシュを使用しないほうがコスト的に有利になります。
続いて、Claude が提供するプロンプトキャッシング機能の試算を比較していきます。Claude の料金体系はシンプルであり、Vertex AI Geminiのように12.8万トークンの壁が存在せず、TTLも5分固定になっています。以下の料金が常に適用されます。詳細は 公式の料金表 を参照ください。
Claude 3.7 Sonnetの場合、以下のような料金となります。
20万(0.2M)入力トークンで、10回試行の合計コストは次のようになります。
キャッシュなしの場合:
10回の実行ですべて料金がかかります。
キャッシュが有効な場合:
| キャッシュあり | キャッシュなし | |
|---|---|---|
| 初回入力コスト | -- | 0.6 USD |
| 初回キャッシュ書き込みコスト | 0.75 USD | -- |
| 9回入力コスト | -- | 5.4 USD |
| 9回キャッシュ読み出しコスト | 0.54 USD | -- |
| 合計 | 1.29 USD | 6 USD |
ここまででVertex AI Gemini(テキスト・動画のケース)とAnthropic(テキストのケース)を比較し、キャッシングのコストインパクトをご理解いただけたかと思います。
続いて実際に開発者や運用担当者向けに、SDKを介したキャッシュの利用方法をコードベースでご紹介します。
ただし、実際にはより複雑なビジネスロジックを含むコードが必要になりますので、あくまでも基本的な呼び出し方法の参考であることにご留意ください。
ポイント
Python コード例(キャッシュを使用する)
import vertexai
from vertexai.preview.generative_models import GenerativeModel
from vertexai.preview import caching
vertexai.init(project="my-gcp-project", location="asia-northeast1")
# 既存のキャッシュID (例: "projects/.../cachedContents/...")
cache_id = "projects/123/locations/us-central1/cachedContents/456"
cached_content = caching.CachedContent(cached_content_name=cache_id)
model = GenerativeModel.from_cached_content(cached_content=cached_content)
response = model.generate_content("Please summarize the main ideas from these documents.")
print(response.text)
Python コード例(キャッシュを使用する)
cached_content = caching.CachedContent.create(
model_name="gemini-1.5-pro-002",
system_instruction=system_instruction,
ttl=timedelta(minutes=60), # デフォルトが1時間
contents=contents,
)
ポイント
cache_control でマークしたプレフィックスをキャッシュし、繰り返し使う
TTL は最低 5 分 (ヒットで延長)、書き込みが 125%、読み取りが 10%
大量テキスト(例: 50万文字 → 約 20万トークン)を一度にキャッシュする場合でも、(Claude 側には 12.8万入力トークン超過の割増概念はない)
Python コード例
import anthropic
client = anthropic.Anthropic(api_key="YOUR_ANTHROPIC_API_KEY")
response = client.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": "あなたは文学作品を分析するAIアシスタントです。テーマ、キャラクター、文体について洞察に富んだコメントを提供することが目標です。"
},
{
"type": "text",
"text": "<長大なテキスト or 法令文書など>",
"cache_control": {"type": "ephemeral"}
}
],
messages=[{"role": "user", "content": "上記の文書の要点を教えて"}],
)
print(response.usage.model_dump_json())
ここまで、コンテキストキャッシング を活用した Google Cloud (Gemini) と Anthropic (Claude) の実装例と料金試算を掘り下げました。
上記のユースケース利用シナリオはあくまでも一例であり、LLMに何かしらの大きいコンテキストを送信する場合、多くのケースではキャッシュが有効に働くことが想定されます。ぜひ自社に当てはめていただき、キャッシュを実装するためのキッカケとなれば幸いです。
LLMのキャッシング機能はまだまだプレビュー段階ということもあり、今後さらに機能拡張される可能性があります。
大量のテキストやマルチモーダルデータを効率よく扱う企業が増えるなかで、LLM 運用のコストと速度のバランスを取るための 重要な要素 となるでしょう。ぜひ、本後編の具体例や計算手法を参考に、 自社のワークフローに合わせたキャッシュ設計 を検討してみてください。
Vertex AI Search を使って社内文書検索環境(RAG)を構築してみませんか?ソフトバンクのエンジニアが構築をサポートします。
Vertex AI DIY プランでは、以下の3つのことをご体験いただけます。詳細は、関連サービスにある「Vertex AI DIYプラン」をご確認ください。
Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。
MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。
条件に該当するページがございません