LLM推論の最適化技術。同一のプレフィックス(システムプロンプト・文書等)のKVキャッシュを複数リクエスト間で再利用することで、初回以外のTTFTを最大90%削減しAPIコストを大幅削減する。
プレフィックスキャッシング(Prefix Caching)は、LLM の推論において、複数のリクエストで共通するプレフィックスの KV キャッシュを再利用することでコストと遅延を削減する最適化技術です。
RAG や長いシステムプロンプトを使う LLM アプリケーションでは、毎回のリクエストで同じ文書やプロンプトを先頭に付けます。プレフィックスキャッシングを使えば、最初のリクエストで System プロンプトを計算して KV キャッシュを保存し、2 回目以降はキャッシュをロードして即座に続きを計算できます。
| プロバイダ | 対応状況 | コスト削減 | 最小キャッシュ長 | 備考 |
|---|---|---|---|---|
| Anthropic API | 2024/5〜(オプトイン) | 90% | 1,024 トークン | cache_control ヘッダーで指定 |
| OpenAI API | 2024/10〜(自動) | 50% | 1,024 トークン | 自動適用、コントロール不可 |
| Google Gemini | 2024/9〜(明示的) | 75% | 32,768 トークン | Context Caching として提供 |
| vLLM | 2023〜(Automatic) | 最大 100% | 設定可 | OSS 推論エンジン |
| SGLang | 2024〜(RadixAttention) | 最大 100% | — | ツリー構造で効率最大化 |
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
system=[
{"type": "text", "text": "あなたはプロのコードレビュアーです..."},
{
"type": "text",
"text": "<coding_standards>" + very_long_standards_doc + "</coding_standards>",
"cache_control": {"type": "ephemeral"},
}
],
messages=[{"role": "user", "content": "このコードをレビューしてください"}]
)
print(response.usage)
# cache_creation_input_tokens: 5000 # 初回のみキャッシュ作成
# cache_read_input_tokens: 5000 # 2 回目以降はここがカウント
ユースケース: RAG チャットボット(システムプロンプト 2,000 トークン + 検索ドキュメント 5,000 トークン + ユーザー質問 50 トークン × 月間 100,000 回)
キャッシュなし: 7,050 × 100,000 = 705,000,000 トークン → コスト $2,115/月
プレフィックスキャッシング使用(ヒット率 95%): 新規 35M トークン + キャッシュ読込 66.5M トークン → 約 $125/月(94% 削減)
Q1: キャッシュされたトークンは他のユーザーのリクエストに漏洩しませんか? A: プロバイダは API キー単位でキャッシュを分離しています。他のユーザーのキャッシュが混入することはありません。
Q2: プレフィックスキャッシングはどんな場合に効果がないですか? A: プレフィックスが毎回変わる場合はキャッシュミスになります。固定部分を先頭に、可変部分を後に置くプロンプト設計が重要です。
Q3: OpenAI の Prompt Caching と Anthropic の Prompt Caching の違いは? A: OpenAI は自動適用で制御不可、Anthropic は cache_control で明示的に制御可能です。割引率は OpenAI 50%、Anthropic 90%(キャッシュ読込は通常価格の 10%)です。