見出し画像

ClaudeのPrompt Cachingとは?【AIVtuberに導入してみた結果】

AIVtuberシロハナちゃんの開発プロデュースをしているyukiです。

この記事では、ClaudeのPrompt Cachingの紹介とAIVtuberに導入してみた結果などをまとめています。

Prompt Cachingを使うことで、繰り返し使用するプロンプト(例えばシステムプロンプトなど)が大きくなった際に、リクエストのAPI料金の削減やレスポンス速度の改善などが期待できます

詳細情報や最新情報をキャッシュすることでAIにより多くの背景情報を理解させて話してもらうことがやりやすくなりました。

使い方や導入も比較的簡単なので、ぜひ本記事を参考にPrompt Cachingについて理解するのと、具体的な導入結果をもとに、どんなユースケースで活用できそうかの参考になったらと思います。

※この記事は2024/09/10時点のものなので今後変更があるかもしれないですのでご了承ください


Prompt Cachingとは?

Prompt CachingはAnthropic APIで使えるプロンプトをキャッシュすることができる機能です。
(Geminiでも似たような機能がありますが今回はClaudeで説明してます)

Prompt Cachingのメリット

Prompt Cachingのメリットは以下のメリットがあります。

  • キャッシュしたプロンプトのAPIリクエスト料金が大幅に削減

  • 大きなコンテキストの処理時間が削減

つまり、LLMが把握していない多くの背景情報が必要な際に有用であると言えると思います。

具体的に言うと、これまでは多くの背景情報(例えば独自のデータや学習期間外の最新情報など)をAIに理解させて答えてもらう際は、RAGやブラウジングなどを活用しない限り、システムプロンプト等に含める選択肢があります。

ただ、そうなるとリクエストのたびにその大量の情報が含まれたプロンプトを送信しないといけないのでAPI料金や処理時間が懸念点でした。

そこで、プロンプトをキャッシュすれば繰り返し使用する情報をセットしておけばAPI料金を抑えつつ、処理時間にも大きな影響を与えずに会話が可能になるというわけです。

Prompt Cachingの料金

Prompt Cachingを使用する際は以下のような料金体系となります。

  • キャッシュ書き込みトークン(最初のリクエスト)は基本的な入力トークンよりも25%高価になります。(しかし、1度キャッシュに書き込めばキャッシュが失われるまで繰り返し使用できるためトータルで見れば節約になる可能性が高いです)

  • キャッシュ読み取りトークンは基本入力トークンより90%安価になります。

Prompt Cachingの制約

メリットが大きいのは確かですが、現状だといくつか制約もあるため紹介します。
この制約によって用途は限られたり工夫が必要になります。

  • キャッシュの有効時間が5分(キャッシュが使用されると更新されます)
    →この制約のため、キャッシュを使用する頻度が低いとあまり効果を発揮できません。ただ、5分内にAPI利用でキャッシュを使用するたびに更新されるので高頻度で使用する際には有用です。
    →今後改善される可能性はあると見込んで(信じて)います。

  • 短いトークンはキャッシュできない
    →最低トークン:3.5 Sonnetと3 Opusは1024。3 haikuは2048が必要。
    こちらに関しては、短いトークンであればキャッシュする必要性も低いのでそこまで気にしなくてもいいかもしれません。


AIVtuberに導入してみた結果

https://youtube.com/live/YTcAkhQlMdc

実際にPrompt Cachingを導入して上記のAIVtuber配信をしてみました
配信内容としては「v0」というサービスの活用アイデアをブレストしようという企画になっています。

導入するためにしたこと

  • AIVtuberシステムのClaudeのAPI使う箇所でPrompt Caching使用するようにコード変更

  • キャッシュするプロンプトの記載(以下の内容を含めて10,000↑トークンのプロンプトをセットしました)。(普段は1000トークンくらいの情報セット)
    →v0の公式サイトにある記載
    →以前に投稿したv0に関するnote動画の内容
    →その他、v0に関する情報(私の知識から)
    →※会話履歴とかの記憶保持部分はキャッシュしませんでした

【サンプルコード】

import anthropic

client = anthropic.Anthropic()

response = client.beta.prompt_caching.messages.create(
    model="claude-3-5-sonnet-20240620",
    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のAPIリファレンスに記載されていたものです。
ソースは下記になるので参考にしてみてください。

実際のAPI料金やレスポンス速度

上記は実際に1時間30分ほどAIVtuber配信をした際の「使用トークン」と「API料金」になります。
※配信のリクエスト数や生成量などにも変わってくると思うので、あくまで参考程度にしてください。

使用トークン:1,074,606(※普段は400,00トークンくらい)
→キャッシュしているトークンも含まれますが、ものすごい量のトークンが消費されています。

API料金:1.13ドル(※普段は1.56ドル)
普段よりもトークン消費している&情報セット(10倍)してるのに安くなっているのは大変良いですね。

レスポンス速度:あまり変わらない
→しっかり計測したわけではないですが、普段と体感はさほど変わっていないと思います。レス速度も維持してくれるのは助かります。

・精度:あまり変わらない
→特に精度が落ちることはなかったかなと思います。しっかりとセットした情報をもとに回答をしてくれました。また、セットしたソースにない内容については適当言わずに"推測"という形で答えるシーンなども見られました。

APIレート制限で問題発生

これまで良いところが多かったわけですが、AIVtuber配信中に問題が発生しました。
1時間30分ほど配信を続けてた際にClaudeのAPIレート制限のエラーが起きて配信を継続できなくなったのです。

実際のエラーはこちら。
- エラーの種類: anthropic.RateLimitError
- エラーコード: 429
- エラーメッセージ:"リクエスト トークンの数が 1 日のレート制限を超えました"

そして配信後に原因を調査したところ、Claude 3.5 Sonnetの場合は1日あたりのトークン数が1,000,000が限度のようで、これに該当した説が濃厚です。

https://docs.anthropic.com/en/api/rate-limits#rate-limits

キャッシュされたトークンに関してAPI料金が安くはなるのですが、レート制限には関係するようなのです。

なのでキャッシュするトークン数や、リクエスト頻度はレート制限を考慮しないと途中で使えなくなる可能性があるということです。

ではどうするか考えた案は以下の通りです

  • Tierを上げる:クレジット購入が痛い

  • キャッシュするプロンプトをもう少し抑える:プロンプトを整理や要約するなどすればトークンを抑えられるはずです

  • haikuモデルを使う:haiku 3の場合だとSonnetなどの5倍の5,000,000トークンが制限になります。haiku 3.5でどうなるか分かりませんが可能性ありそうです。

私の場合は、とりあえず「キャッシュするプロンプトをもう少し抑える」かなと考えています。
正直ほとんどのAIVtuber配信(企画)で1,000,000トークンも背景情報で必要にならないと思うので。整理や要約などするで回避できそうです。

以上ことから、莫大な量の情報セットに関しては現状向いてなく、その場合はRAGなどを活用するのが良いかなと思います。
ただ、大体の用途ではPrompt Cachingで事足りると思いますので、気軽に多くの情報をセットして話してもらいたい際は活用することをお勧めします。


さいごに

今回はClaudeのAPIにある機能「Prompt Caching」について紹介と実際に導入してみた結果をまとめてみました。

やはり料金や生成速度を以前よりも気にせずに情報セットできるのはとても良いと思っています。
例えば、最新のアニメの情報をセットしてアニメトークも出来たり、特定のイベント感想を詳細にセットするなど、色々楽しめそうです!

もちろん制約や制限があるのですが工夫や今後の改善で活用の幅は広がるのかなと考えています。

今後もある程度の情報量が必要な配信企画の際などはこのPrompt Cachingを活用していきたいと思います。

最後に私がプロデュースしているAIVtuberシロハナちゃんの宣伝。
理想のAIヒロインを目指して、様々な企画を行うAIVtuber配信や、AIヒロイン研究所というコンセプトのもと、「テクノロジー×キャラクター」に関する動画等を発信しています!

本記事のような新しい技術やツールを随時導入・紹介などもしているので、ぜひ応援していただけると幸いです。

以上!それではまた👋

ご支援は活動費に使わせていただきます