🙂

Claudeの「Prompt Caching」でLLMのコスト削減を図る

2024/12/01に公開

1. はじめに

AnthropicのClaudeにPrompt Caching(β版)が実装されました。Prompt Cachingは再利用可能なプロンプトのコストを劇的に削減し、処理速度を向上させる機能です。

Prompt Cachingにより、特に長文のプロンプトを繰り返し使用するような状況において、経済的かつ効率的なLLMの利用が可能になります。例えば、会話型エージェントや大規模ドキュメントの処理といった用途で、非常に効果を発揮します。
https://www.anthropic.com/news/prompt-caching

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の実装においても有効な手段と考えられます。

Accenture Japan (有志)

Discussion