プロンプトと結果のキャッシュ(Anthropic、Vertex)
AnthropicのプロンプトキャッシュとVertexのキャッシュを使うと、長く繰り返し使うシステムプロンプトの入力コストを10分の1に削減できます。
「プロンプトと結果のキャッシュ(Anthropic、Vertex)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
なぜキャッシュするのか
多くのエージェント呼び出しは、ほぼ同一です。システムプロンプトと少数ショットの例は同じで、ユーザー入力だけが異なります。キャッシュしないと、呼び出しのたびに静的な部分を再処理することになります。
キャッシュによって、入力トークンのコストを10分の1に削減できる場合があります。
2種類のキャッシュ
- プロンプトキャッシュ(サーバーサイド)— プロバイダーが、繰り返し現れるプレフィックスに対するモデルのKV状態をキャッシュします
- 結果キャッシュ(クライアントサイド)— コードで、同一入力に対する完全なレスポンスをキャッシュします
Anthropicのプロンプトキャッシュ
キャッシュ可能な部分をcache_controlで指定します。
response = client.messages.create(
model='claude-sonnet-4-5',
max_tokens=1024,
system=[
{'type': 'text', 'text': LONG_SYSTEM_PROMPT, 'cache_control': {'type': 'ephemeral'}}
],
messages=[{'role': 'user', 'content': user_input}]
)
# 1st call: full price
# 2nd call within 5min: 10% of input costキャッシュヒット率
レスポンスのusageオブジェクトを確認します。
response.usage.cache_creation_input_tokens # tokens cached this call
response.usage.cache_read_input_tokens # tokens read from cacheキャッシュする対象
- 1,000トークンを超えるシステムプロンプト
- ツール定義
- 少数ショットの例
- クエリ間で共有されるRAGコンテキスト(まれ)
キャッシュマーカーを配置する場所
cache controlは、最後の静的ブロックに指定する必要があります。マーカーより前にあるものはすべてキャッシュされます。安定した内容を先頭に置き、可変の内容を末尾に置きます。
OpenAIのプロンプトキャッシュ
OpenAIは1,024トークンを超えるプロンプトを自動的にキャッシュします。明示的なマーカーは必要ありません。
# Just send the same prefix repeatedly. Cache discount applies automatically.
# Check response.usage.prompt_tokens_details.cached_tokensVertex AIのコンテキストキャッシュ
Google Vertexでは、キャッシュオブジェクトを明示的に作成する必要があります。
from vertexai.generative_models import GenerativeModel, content_cache
cache = content_cache.CachedContent.create(
model='gemini-1.5-pro',
contents=[long_system_content],
ttl=300
)
model = GenerativeModel.from_cached_content(cache)
response = model.generate_content(user_input)クライアントサイドの結果キャッシュ
完全一致するクエリ(同じ入力で、期待される出力も同じ)には、キーと値のキャッシュを使います。
import hashlib
def cache_key(model, messages):
return hashlib.sha256(f'{model}:{json.dumps(messages)}'.encode()).hexdigest()
def cached_call(model, messages):
key = cache_key(model, messages)
if cached := redis.get(key):
return json.loads(cached)
result = real_call(model, messages)
redis.set(key, json.dumps(result), ex=3600)
return resultセマンティックキャッシュ
Embeddingを使って、同一ではなく類似したクエリをキャッシュします。
qvec = embed(query)
matches = vector_db.query(qvec, k=1)
if matches and matches[0].score > 0.95:
return matches[0].metadata['cached_response']キャッシュの無効化
古いキャッシュは誤った回答を返します。次のような戦略があります。
- TTL — 時間に敏感なデータには短く設定する
- データ更新時に手動で無効化する
- ユーザーごとのキーを使い、更新が1人のユーザーだけに影響するようにする
パーソナライズされたレスポンスをキャッシュしない
「自分の残高はいくらですか?」という質問は、ユーザー間でキャッシュできません。マルチテナントシステムで共有キャッシュを使う場合は注意してください。
キャッシュコストとLLMコスト
RedisのコストはLLMのコストと比べれば無視できる程度です。積極的にキャッシュしてください。ヒット率が10%でも、実際の節約につながります。
実際の節約効果
長い共有システムプロンプトとプロンプトキャッシュを使うと、本番環境で入力コストが50~90%下がるケースが日常的に見られます。投資対効果が最も高い最適化の1つです。
Anthropicでキャッシュを有効にする方法
Anthropicでプロンプトキャッシュを有効にするにはどうすればよいでしょうか?
まとめ
静的なプレフィックスにはサーバーサイドのプロンプトキャッシュを使い、完全一致にはクライアントサイドのKVキャッシュを使い、あいまいな一致にはセマンティックキャッシュを使います。ヒット率と節約効果を必ず確認してください。
よくある質問
「プロンプトと結果のキャッシュ(Anthropic、Vertex)」レッスンは無料ですか?
はい。「プロンプトと結果のキャッシュ(Anthropic、Vertex)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「プロンプトと結果のキャッシュ(Anthropic、Vertex)」で何を学びますか?
AnthropicのプロンプトキャッシュとVertexのキャッシュを使うと、長く繰り返し使うシステムプロンプトの入力コストを10分の1に削減できます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「プロンプトと結果のキャッシュ(Anthropic、Vertex)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステップごとのトークン予算
- モデルルーティング(安価 -> 高価)
- プロンプトと結果のキャッシュ(Anthropic、Vertex)
- 量子化と投機的デコーディング