Ubie(ユビー)のエンジニアによる、LLMプロバイダ各社のPrompt Caching(プロンプトキャッシュ)の仕組みと実践的な使い方の解説記事。キャッシュヒットで入力トークンコストが最大90%オフになる仕組みを、「どうプロンプトを設計すればキャッシュが効くか」を良い例・悪い例の図解付きで徹底解説。OpenAI / Gemini / Claudeそれぞれの実装差と料金差、さらにBigQueryで実際の会話ログからコスト削減率を試算するSQLまで紹介している、実務寄りのガチ記事。
Ubieのモバイルアプリ(iOS / Android)では、身体の悩みを相談できる医療AIエージェントをtoC向けに提供している。toCでLLMプロダクトを提供する上でコスト最適化は重要な課題であり、その中核技術のひとつがPrompt Caching。まだ試していない場合は50%規模のコスト削減余地が眠っている可能性があるという。
Prompt Cachingは入力の「先頭一致」でキャッシュヒットする。つまり設計原則は「変化しにくいプロンプトを先頭に配置する」こと。
| プロバイダ | キャッシュ方式 | 条件・注意点 | コスト |
|---|---|---|---|
| OpenAI | 自動(デフォルトで有効) | キャッシュ対象プロンプトが1024トークン超である必要。コード変更不要でただプロンプトを送るだけで効く | 書き込み: 追加コストなし ヒット時: 入力が90%オフ(gpt-5ファミリー) |
| Gemini | 暗黙的キャッシュ(デフォルト有効)+ 明示的キャッシュ | 暗黙的キャッシュは何度かリクエストしないと効かないことがあり、内部はブラックボックス。チューニングしたい場合は明示的キャッシュで事前にキャッシュ作成可能 | 暗黙的: 書き込み追加コストなし、ヒット時90%オフ(Gemini 2.5) 明示的: 保持期間に応じストレージコスト発生 |
| Claude | 手動(自動キャッシュなし) | プロンプトの該当ブロックに cache_control: { type: "ephemeral" } を明示指定。指定ブロックより前がキャッシュ対象。デフォルトTTL 5分(設定で1時間) |
書き込み: 通常の1.25倍 読み込み: 0.1倍 → なんでもキャッシュすると逆に高くなる可能性あり |
📝 実装メモ: 記事ではLangChain(@langchain/openai / @langchain/anthropic)でのTypeScript実装例が紹介されている。Claudeだけは自動キャッシュがないので cache_control の付け忘れに注意。
実際の会話ログ(session_id, input_token_size, output_token_size, created_at)が溜まっているテーブルに対して、BigQueryの分析クエリでキャッシュ導入時のコスト削減率を事前試算できる。クエリのロジックは次の通り:
ROW_NUMBER)LAG 関数で前回呼び出しとのトークン差分・日時差分を取得記事の結論: 「すでにログが取れている場合はサクッと試算できるので試してみてください。思ったより減ります」とのこと。
cache_controlの手動設定が必須で、書き込み1.25倍なので乱用注意この記事は Ubie Tech Advent Calendar 2025 の記事。医療AIをtoCで提供するUbieならではの実務的なコスト最適化ノウハウが詰まった一冊。