Claudeの新機能 -Prompt cachingを試してみた-

Claudeの新機能 -Prompt cachingを試してみた-

Anycloudのしんじょうです!

以前、エニテックでも紹介したClaudeに新たな機能が先日追加されました!

今回の記事では、新たに追加された機能について紹介していきます!

ClaudeにPrompt caching が登場

2024/8/15(木)にAnthropicからAnthropic APIでPrompt cachingが利用できるようになったという情報が公開されました。

Prompt cachingとは、開発者がAIモデルへのAPI呼び出しの間に大量のコンテキスト情報を保存し、再利用できるようにする技術です。

この技術によって、開発者はコストを最大90%削減し、長いプロンプトの待ち時間を最大85%削減しながら、より多くの背景知識や出力例を提供することが可能となります。

Prompt cachingの機能は、Claude 3 Opusのサポートは2024/8/15(木)現時点ではサポートされていませんが、Claude 3.5 SonnetやClaude 3 Haikuでは既にbeta版として利用可能です。

何が良いのか

Prompt cachingは、大量のプロンプトコンテキストを一度に送信し、その後のリクエストで繰り返しその情報を参照するような状況で効果を発揮します。

公式サイトには、具体例として↓の項目が挙げられていました。

  • 会話エージェント

    →長いプロンプトでの指示やアップロードされたドキュメントを伴う会話のコストと待ち時間を削減

  • コーディングアシスタント

    →プロンプトにコードベースの要約を記述することで、自動補完やコードベースに関するQ&Aを改善

  • 大規模なドキュメントの処理

    →長文の資料や画像をプロンプトに含めても、応答の遅延を増やすことなく処理が可能

  • 詳細な指示セット

    →Claudeの応答を微調整するために、指示や手順、例の広範なリストを共有。開発者はプロンプトにいくつかの例を含めることはよくありますが、Prompt cachingを使用すると、数十個の多様な高品質の応答例を含めることで、さらに優れたパフォーマンスを実現

  • エージェント検索とツールの使用

    →通常、新しいAPI呼び出しが必要となる各ステップに対して、複数回のツール呼び出しや反復的な変更を伴うシナリオの性能を向上

  • 書籍、論文、ドキュメント、ポッドキャストのトランスクリプト、およびその他の長文コンテンツと対話

    →ドキュメント全体をプロンプトに埋め込み、ユーザーに質問させることで、あらゆるナレッジベースを活性化

Prompt cachingの使用例

キャッシュなしのレイテンシ

キャッシュありのレイテンシ

コスト削減

本との会話
(100,000トークンのプロンプト)

11.5s

2.4s(-79%)

-90%

多ショットプロンプト
(10,000トークンのプロンプト)

1.6s

1.1s(-31%)

-86%

マルチターン会話
(長いシステムプロンプトを伴う10ターン会話)

~10s

~2.5s(-75%)

-53%

※レイテンシは最初のトークンまでの時間を表す

キャッシュされたプロンプトの価格設定

キャッシュされたプロンプトの料金は、キャッシュする入力トークンの数と、そのコンテンツの使用頻度に基づいて価格が設定されています。

キャッシュへの書き込みは、各モデルの基本入力トークン価格の25%高くなりますが、キャッシュされたコンテンツの読み込みは大幅に安くなり、基本入力トークンの価格のわずか10%のコストで利用が可能です。

prompt-cost

Prompt cachingを試してみた

Prompt cachingを試すにあたって、まずはAnthropic Consoleに登録しAPIキーを作成します。

お試しとして、初回は5$分のクレジットがプレゼントされます(2024/8/15日現在)。

ただし、この無料分のクレジットの有効期限は発行してから14日間です。

今回は公式の例を参考にPrompt cachingを利用するために↓のように実装しました。

anthropic_example.py
import time

import anthropic

client = anthropic.Anthropic(api_key="作成したAPIキーを入力")

def read_text():
    with open('test.txt', 'r', encoding='utf-8') as file:
        return file.read()

def make_cached_api_call(report_query):
  start_time = time.time()
  text = read_text()
  response = client.messages.create(
        model="claude-3-5-sonnet-20240620",
        max_tokens=2000,
        temperature=0,       
        system=[
           {
              "type": "text",
              "text": f"年次報告書です:{text}",
              "cache_control": {"type": "ephemeral"}
           }
        ],
       messages=[
          {
             "role": "user",
             "content": report_query,
          }
       ],
        extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}
  )
    
  end_time = time.time()  
  return response, end_time - start_time

report_query = "この年次報告書から事業のハイライトを抽出してください"

response, elapsed_time = make_cached_api_call(report_query)

print(f"実行 1:")
print(f"質問内容: {report_query}")
print(f"レイテンシ: {elapsed_time:.2f} 秒")
print(f"レスポンス:\n{response.content[0].text}")
print(f"response.usage {response.usage}:")

参考:https://github.com/anthropics/anthropic-cookbook/blob/main/misc/prompt_caching.ipynb

コードの一部を解説

今回実装したコードの一部を抜粋して説明します。

該当するコードの部分は、make_cached_api_call の関数内のresponse の部分です。

anthropic_example.py
response = client.messages.create(
        model="claude-3-5-sonnet-20240620",
        max_tokens=2000,
        temperature=0,       
        system=[
           {
              "type": "text",
              "text": f"年次報告書です:{text}",
              "cache_control": {"type": "ephemeral"}
           }
        ],
       messages=[
          {
             "role": "user",
             "content": report_query,
          }
       ],
        extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}
  )
  • max_tokens=2000

→AIが生成する応答の最大のトークン数(≒文字数)を指定。短い応答を要求するときは少なめに設定。

  • temperature=0

→応答のランダム性を制御。値が低いと決まった応答を生成しやすく、1.0以上になると創造的で多様な応答を生成。

  • system

→AIが応答を生成するための背景情報や指示を設定。事前の知識や指示を与えることで、応答の精度や方向性の制御が可能。

  • "cache_control": {"type": "ephemeral"}

→プロンプトをキャッシュするかを制御(キャッシュの有効期間は5分)。

"ephemeral"=キャッシュが短時間保持

"persistent"=キャッシュを長時間保持

  • extra_headers={"anthropic-beta": "prompt-caching-2024-07-31"}

→プロンプト キャッシュを有効にするために指定

※今回使用したclaude-3-5-sonnet-20240620 のモデルでは、プロンプトキャッシュを利用するにはプロンプトの長さを1024トークン以上にする必要があります。

Promptを準備

前述した理由により、今回はChat GPTにテスト用のプロンプトである仮の年次報告書を作成してもらいました。

↓の部分で呼び出しているtest.txtファイルの内容です。

anthropic_example.py
def read_text():
    with open('test.txt', 'r', encoding='utf-8') as file:
        return file.read()

test.txtファイルの内容は↓となっています。

test.txt
株式会社サンプルテック 2023年度年次報告書
はじめに
2023年、株式会社サンプルテックは市場の急速な変化に対応し、技術革新を推進することで、成長を続けてきました。主力製品のアップデートや新規事業の立ち上げを通じて、さらなる市場シェアの拡大を目指しました。本報告書では、2023年度の事業成果、財務状況、主要な市場動向、今後の展望について詳述いたします。

事業成果の概要
当社は2023年度において、全体的な売上高を前年比12%増加させることに成功しました。この成長は、主に以下の要因によるものです。

1. 主力製品の強化
当社の主力製品である「サンプルプロセッサ」の最新バージョンをリリースし、性能の向上とユーザビリティの改善を実現しました。このアップデートにより、既存顧客の満足度が向上し、新規顧客の獲得にも寄与しました。

2. 新規事業の展開
2023年には、新たなサービス「サンプルクラウド」の提供を開始しました。このサービスは、クラウドベースのデータ管理と分析ツールを提供するものであり、企業のデータ活用を支援するものです。サービス開始から6か月で、すでに500社以上の企業に導入されています。

3. 海外市場の拡大
当社は、アジア市場への進出を強化し、中国、韓国、インドなどの新興市場での売上を前年に比べて30%増加させることに成功しました。特に、中国市場でのオンラインプラットフォームの販売チャネルが拡大し、大きな成果を上げています。

財務状況の概観
2023年度の売上高は、前年比12%増の300億円に達しました。一方で、事業拡大に伴う初期投資やマーケティングコストの増加により、純利益は前年比2%減の30億円となりました。

1. 売上高の内訳
売上高の内訳は、主力製品が200億円、新規事業が70億円、海外市場が30億円となっています。特に、新規事業が全体の売上に占める割合が前年の10%から20%に増加し、今後の成長エンジンとして期待されています。

2. コスト構造
2023年度のコスト構造は、研究開発費が売上の15%、マーケティング費が売上の10%、人件費が売上の25%を占めています。研究開発費の増加は、技術革新を推進するための投資として重要な意味を持ちます。

3. 財務リスク
2023年度末のキャッシュフローは、営業活動によるキャッシュフローが50億円、投資活動によるキャッシュフローが▲20億円、財務活動によるキャッシュフローが▲10億円でした。健全なキャッシュフローを維持しているものの、将来の投資活動に対する慎重な計画が求められます。

市場動向と競合分析
2023年度は、技術革新とデジタルトランスフォーメーション(DX)が市場の主要なトレンドとして浮上しました。当社の競合他社である「テックビジョン」や「インフォデータ」も同様の製品を展開しており、競争が激化しています。

1. テックビジョン社との比較
テックビジョン社は、特にAI分野での技術力が高く、当社と競合しています。テックビジョン社のAIエンジンは市場で高く評価されており、当社としてもこの分野での技術開発を一層強化する必要があります。

2. インフォデータ社との比較
インフォデータ社は、クラウドサービスの分野で強みを持ち、当社の新規事業である「サンプルクラウド」と競合しています。インフォデータ社は既に多数の大手企業との契約を持っており、市場シェアで当社を上回っています。

今後の展望と戦略
当社は2024年度に向けて、次の施策を中心に成長を図ります。

1. 研究開発の強化
AIとデータ分析技術の分野での研究開発をさらに強化し、競合他社との差別化を図ります。特に、自社製品におけるAI技術の応用範囲を拡大し、付加価値の高いソリューションを提供します。

2. 海外市場のさらなる開拓
アジア市場での成功を足掛かりに、欧米市場への本格的な進出を目指します。欧米市場向けの専用製品の開発や、現地パートナーとの提携を強化する計画です。

3. 持続可能な成長のための投資
事業の持続可能な成長を確保するため、再生可能エネルギーやサステナビリティ関連のプロジェクトへの投資を進めます。これにより、環境負荷の低減と企業イメージの向上を図ります。

リスク要因
今後の成長に影響を与える可能性のあるリスク要因として、以下が挙げられます。

1. 技術的リスク
AIやクラウド技術の急速な進化に伴い、技術的に後れを取るリスクがあります。これに対処するため、常に最先端技術に注目し、柔軟に対応することが必要です。

2. 市場競争の激化
競合他社との競争が激化する中で、価格競争や市場シェアの奪い合いが予想されます。これに対し、差別化された製品とサービスを提供することで優位性を保つことが求められます。

3. 規制リスク
国内外の規制環境が変化する可能性があり、特にデータプライバシーやセキュリティに関する新しい規制が導入される場合、対応が必要となります。

終わりに
2023年度は、多くの挑戦と成果があった年でした。当社は、技術革新と市場の変化に対応し、成長を続けています。今後も、持続可能な成長を目指し、さらなる挑戦を続けてまいります。

※公式には、実際のプロンプトの例がプロンプトライブラリにいくつか用意されています。

実行結果

実行した結果が↓です。

実行 1:
質問内容: この年次報告書から事業のハイライトを抽出してください
レイテンシ: 9.21 秒
レスポンス:
株式会社サンプルテックの2023年度年次報告書から、以下の事業ハイライトを抽出しました:

1. 売上高が前年比12%増加し、300億円に達した。

2. 主力製品「サンプルプロセッサ」の最新バージョンをリリースし、性能とユーザビリティを向上させた。

3. 新規事業「サンプルクラウド」を立ち上げ、6か月で500社以上の企業に導入された。

4. アジア市場(中国、韓国、インドなど)での売上が前年比30%増加した。

5. 新規事業の売上が全体に占める割合が前年の10%から20%に増加した。

6. 研究開発費を売上の15%に投資し、技術革新を推進している。

7. AIとデータ分析技術の分野での研究開発を強化する計画を立てている。

8. 欧米市場への本格的な進出を目指している。

9. 持続可能な成長のため、再生可能エネルギーやサステナビリティ関連のプロジェクトへの投資を計画している。

これらのハイライトは、会社の成長、新製品・サービスの展開、市場拡大、そして将来の戦略的方向性を示しています。
response.usage Usage(input_tokens=27, output_tokens=403, cache_creation_input_tokens=1919, cache_read_input_tokens=0):
実行 2:
質問内容: この年次報告書から事業のハイライトを抽出してください
レイテンシ: 7.05 秒
レスポンス:
株式会社サンプルテックの2023年度年次報告書から、以下の事業ハイライトを抽出しました:

1. 売上高が前年比12%増加し、300億円に達した。

2. 主力製品「サンプルプロセッサ」の最新バージョンをリリースし、性能とユーザビリティを向上させた。

3. 新規事業「サンプルクラウド」を立ち上げ、6か月で500社以上の企業に導入された。

4. アジア市場(中国、韓国、インドなど)での売上が前年比30%増加した。

5. 新規事業の売上が全体に占める割合が前年の10%から20%に増加した。

6. 研究開発費を売上の15%に投資し、技術革新を推進している。

7. AIとデータ分析技術の分野での研究開発を強化する計画を立てている。

8. 欧米市場への本格的な進出を目指している。

9. 持続可能な成長のため、再生可能エネルギーやサステナビリティ関連のプロジェクトへの投資を計画している。

これらのハイライトは、会社の成長、新製品・サービスの展開、市場拡大、そして将来の戦略的方向性を示しています。
response.usage Usage(input_tokens=27, output_tokens=403, cache_creation_input_tokens=0, cache_read_input_tokens=1919):
  • cache_creation_input_tokens

→新しいエントリを作成するときにキャッシュに書き込まれるトークン数

  • cache_read_input_tokens

→現在のリクエストのキャッシュから取得されたトークン数

  • input_tokens

→API 呼び出しの際に送信されたプロンプト(入力)のトークン数

  • output_tokens

→API が生成した応答のトークン数

上記の結果を表にまとめると、↓となります。

実行回数

レイテンシ

cache-creation-input-tokens

cache-read-input-tokens

input-tokens

output-tokens

実行1回目

9.21 秒

1919

0

27

403

実行2回目

7.05 秒

0

1919

27

403

この結果から、キャッシュされたことにより、レイテンシの時間が短くなっているのと、2回目の呼び出しはキャッシュされた値を呼び出していることが分かります。

これによって、2回目以降の呼び出しはキャッシュされた値から呼び出されるため、プロンプトの利用料を抑えることができる上に、レスポンスまでの時間を短縮することが可能です。

開発者にもユーザーにとっても有難いですね。

まとめ

今回はPrompt cachingがAnthropic APIで利用可能となったことについて紹介しました。

Prompt cachingを使うことによって、プロンプトの料金を抑えることができるのに加え、レイテンシも短くなることで、APIを使用しているプロダクトのパフォーマンスが向上します。

これは開発者にとっても、ユーザーにとっても有難い機能と言えるでしょう。

Anthropicのこれからの動向に注目です。

Anycloudではプロダクト開発の支援を行っています

プロダクト開発をお考えの方はぜひAnycloudにご相談ください。

まずは相談する

記事を書いた人

しんじょう

エンジニア

しんじょう

株式会社Anycloudでエンジニアをしています