Claudeの「Prompt Caching」でLLMのコスト削減を図る
1. はじめに
AnthropicのClaudeにPrompt Caching(β版)が実装されました。Prompt Cachingは再利用可能なプロンプトのコストを劇的に削減し、処理速度を向上させる機能です。
Prompt Cachingにより、特に長文のプロンプトを繰り返し使用するような状況において、経済的かつ効率的なLLMの利用が可能になります。例えば、会話型エージェントや大規模ドキュメントの処理といった用途で、非常に効果を発揮します。
2. 結論
まず結論になりますが、Anthropic公式によると、Claudeの利用コストが 最大90%削減 されると発表されています。
Anthropic公式の日本語訳
3. 背景
LLMの利用には、これまで以下のような課題がありました。
- プロンプトを繰り返すことによるコストの増加 : 毎回同じプロンプトを送信する場合でも、全ての文章を再入力する必要があり、コストがかかる
- 処理時間の長さ : 長文プロンプトを入力した際、最初の出力が生成されるまでに時間がかかる
Prompt Cachingは、これらの課題を解決するために設計された機能です。
4. Prompt Cachingの機能
Prompt Cachingとは、1回目に送信したプロンプトをキャッシュ(保存)し、2回目以降に同じプロンプトを利用する際に、低コストで処理できるようにする機能です。この機能の特徴は、以下の通りです。
- コスト削減 : 再利用するプロンプトについて、通常の料金から最大90%ダウン
- 速度向上 : 長文プロンプトの処理時間が約80%短縮
- 適用範囲 : 長文プロンプトの指示や複雑な会話履歴を伴う処理に最適
例えば、「あなたは文学作品を分析するAIアシスタントです。テーマ、登場人物、そして文体に関する洞察に満ちた解説を提供することが目的です。」(*1)というプロンプトを設定した場合、このプロンプトを再利用すると約90%のコスト削減が可能
(*1)Anthropic公式からの引用になりますが、実際には1,024Token以上の場合にPrompt Cachingが有効となります。
5. 制約
Prompt Cachingには、以下の制約があります。
- 有効期限 : 5分間のみ
- 最低トークン数(以下を下回る場合は、Prompt Cachingが適用されない):
- Claude 3.5 Sonnet : 最低1024Token
- Claude 3.5 Haiku : 最低2048Token
- 追加コスト : キャッシュの設定時には、25%のプラス料金が発生する
- キャッシュ数の制限 : 同時にキャッシュできるプロンプトは最大4つ
- 出力コストは削減不可 : 出力Tokenのコストには影響しない(入力Tokenのみコスト削減可能)
6. ユースケース
Prompt Cachingは、以下のような場面で特に有効です。
- 会話型エージェント : 長文の設定を伴う指示や会話が必要な生成AIエージェントを構築する場合
- プログラミング支援 : GitHub CopilotやCursorなど、コードレビューやQ&Aを行う場面
- 大規模ドキュメント処理 : 論文や書籍、長文のテキストに対して質問や分析を行う場合
- 複雑な指示 : より詳細なプロンプトを設定する場合や、Few-shotプロンプティング(例示を用いて回答精度を向上させる技術)を行う場合
7. ベストプラクティス
Prompt Cachingの利用には、以下が効果的です。
- キャッシュ対象の文章はプロンプトの冒頭に配置 : 冒頭に配置することにより、最大限のパフォーマンスを引き出せる
- 適切な利用シーンを見極める : 入力内容が短い場合や頻繁に利用しない場合は、Prompt Cachingの恩恵を受けられない
8. 実装イメージ
import anthropic
client = anthropic.Anthropic()
response = client.beta.prompt_caching.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1024,
system=[
{
"type": "text",
"text": "You are an AI assistant tasked with analyzing literary works. Your goal is to provide insightful commentary on themes, characters, and writing style.\n",
},
{
"type": "text",
"text": "<the entire contents of 'Pride and Prejudice'>",
"cache_control": {"type": "ephemeral"}
}
],
messages=[{"role": "user", "content": "Analyze the major themes in 'Pride and Prejudice'."}],
)
print(response)
上記のコードは、Anthropic公式からの引用となります。
system
プロンプトの先頭からcache_control
までのプロンプトがPrompt Cachingの対象となります。
9. コスト削減の試算
仮に、1回の会話で2,000Tokenが入力されるケースを試算してみます。
Prompt Cachingの料金体系である「キャッシュ書き込み:1.25倍、キャッシュ読み取り:0.1倍」に基づき、課金対象となるToken数を求めて5回の会話でコストを比較します。
(下記ですが、実際には2回目以降の会話においても、キャッシュの書き込みが発生する場合があります。)
Prompt Caching有り時の課金対象Token数
会話回数 | キャッシュ書き込み Token数 |
キャッシュ読み取り Token数 |
---|---|---|
1回目 | 2,500 (2,000×1.25) |
0 |
2回目 | 0 | 200 (2,000×0.1) |
3回目 | 0 | 200 |
4回目 | 0 | 200 |
5回目 | 0 | 200 |
Prompt Caching有無のコスト比較
会話回数 | Prompt Caching無し Token数の累計(A) |
Prompt Caching有り Token数の累計(B) |
コスト比率 (B÷A) |
---|---|---|---|
1回目 | 2,000 | 2,500 | 125.0% |
2回目 | 4,000 | 2,700 | 67.5% |
3回目 | 6,000 | 2,900 | 48.3% |
4回目 | 8,000 | 3,100 | 38.7% |
5回目 | 10,000 | 3,200 | 32.0% |
会話を続けるにつれて、コスト削減の効果が大きくなることが分かります。
10. おわりに
Prompt Cachingは、LLMを活用したプロジェクトで大きな効果を発揮する技術です。特に長文プロンプトを頻繁に利用するシーンでは、コストの削減と処理効率の向上が期待できます。Contextual Retrievalの実装においても有効な手段と考えられます。
Discussion