Zenn

Anthropic API のトークン最適化によるコスト削減

に公開
30

tl;dr

  • Anthropic API の Prompt Caching にふたつアプデがあるよ
  • Prompt Caching の読み込みトークンが入力トークンの対象外になって、コスト削減とレートリミットが改善されたよ
  • Prompt Caching の書き方で cache_control: {type: ephemeral} の指定が少なくて済むようになったよ
  • テキストの特定範囲を編集できる text_editor ツールが公開されたよ

Prompt Caching のアプデ

https://www.anthropic.com/news/token-saving-updates

Anthropic API では 2024 年の 8 月から Prompt Caching が導入されています。Cline など大量のトークンを消費する用途にめちゃくちゃ便利な機能です。この Prompt Caching に二点アップデートが加わり、合わせてtext_editorツールが公開されたというのが今回の内容です。

https://www.anthropic.com/news/prompt-caching

Prompt Caching について詳しく知りたいという方はこちらの記事をご覧ください。

Prompt Caching を端的にいうと、よく使うコンテクストを再利用することでコスト削減をする機能です。リクエストの度に同じ情報を送信しなくて良いので、参照させたいドキュメントが長い、Few-shot examples をたくさん与えたいなど、コンテクストが大きくなる時はコスト削減だけでなく、レイテンシーも短くなるので開発者からするとかなり便利なものです。

今回の Prompt Caching についてのアプデはふたつ。

まずひとつめ。Prompt Caching の読み込みトークンが入力トークンの対象外となり、その分のコストが削減され、合わせてその分のレートリミット枠が抑えられるようになりました。

記事内の画像のこのオレンジの部分ですね。何回も大量のトークンを送る場合、たとえば Cline でチャットのやり取りの回数が多い場合にかなり役に立ちそうです。ちなみに、Cline だとデフォルトで Prompt Caching が有効になっているので、特に設定は不要です。

この機能が Claude 3.7 Sonnet だけの機能か不安だったのでレートリミットページを確認。下記の記述があるのでおそらく Claude 3.7 Sonnet でしか現状使えないと思われます。

ふたつめ。Prompt Caching でcache_control: {type: ephemeral}の指定が少なくて済むようになりました。下記の記事内の画像を見ると一目瞭然かと思います。便利。

Prompt Caching についてのアプデはこのくらいで、あとは Tool Use の話と text_editor ツールの話があります。

Tool Use のトークン最適化と text_editor ツール

前者は公式ドキュメントにひとつ記事があるのでそちらを参照。

https://docs.anthropic.com/en/docs/build-with-claude/tool-use/token-efficient-tool-use

要は、Tool Use 利用時にモデルとしてclaude-3-7-sonnet-20250219を指定、リクエストヘッダーにtoken-efficient-tools-2025-02-19を追加することで、出力トークン数で平均 14%、最大 70% 削減、レイテンシの改善ができるという代物。SDK とともにベータヘッダーが必要なので評価の上で使うようにと注意書きがあります。

Python だとこんな感じ。

import anthropic

client = anthropic.Anthropic()

response = client.beta.messages.create(
    max_tokens=1024,
    model="claude-3-7-sonnet-20250219",
    tools=[{
      "name": "get_weather",
      "description": "Get the current weather in a given location",
      "input_schema": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "The city and state, e.g. San Francisco, CA"
          }
        },
        "required": [
          "location"
        ]
      }
    }],
    messages=[{
      "role": "user",
      "content": "Tell me the weather in San Francisco."
    }],
    betas=["token-efficient-tools-2025-02-19"]
)

print(response.usage)

後者の text_editor ツールは、テキストの特定の範囲に絞って編集のできるツールです。

https://docs.anthropic.com/en/docs/build-with-claude/tool-use/text-editor-tool

公式ドキュメントに専用のページがあります。Cursor などを使われたことのある方はイメージが湧きやすいかもしれません。ユースケースとして、デバッグやリファクタリング、ドキュメントの生成、テストの作成などが挙げられています。

Python の場合、はじめにこういった形で定義します。

import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-3-7-sonnet-20250219",
    max_tokens=1024,
    tools=[
        {
            "type": "text_editor_20250124",
            "name": "str_replace_editor"
        }
    ],
    messages=[
        {
            "role": "user",
            "content": "There's a syntax error in my primes.py file. Can you help me fix it?"
        }
    ]
)

テキストエディタツールコマンドとして view / str_replace / insert / create / undo_edit があり、これらと指示プロンプトをセットで使うイメージです。view でファイルを読み込んで、str_replace で文字列の置換、insert で特定の行にテキストを挿入、create で新規ファイルを作成、undo_edit で変更を元に戻すといったイメージです。

ここまで聞いて勘の良い方は気付いているかと思いますが、おそらく Claude Code の中身です。Claude Code 発表の数日前の日付になっていることから察することができますね。

まだ十分使いこなせておらず、エアプになりかねないのでこの辺りに留めておきます。

text_editorツールは Claude 3.7 Sonnet だけでなく、Claude 3.5 Sonnet でも使えます。


以上となります。お読みいただきありがとうございます。よかったらフォローしていただけると励みになります!

GitHubで編集を提案
30

Discussion

ログインするとコメントできます