3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Bedrock開発入門 刊行後サポート】Anthropic Python API libraryのトークン数算出ができなくなりました

Posted at

Bedrock開発入門の刊行後サポートです。

出版社サイト

image.png


Anthropic Python API libraryが、2024/11/4公開のバージョン0.39.0にて、トークン算出メソッドがなくなりました。

もともと、Claude 2にしか対応しておらず、将来的にClaude 3に対応することを期待して紙面上含めていたのですが、対応することなく終わってしまいました。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Anthropic' object has no attribute 'count_tokens'

代替方法が提供されていますので、そちらを紹介します。

Token counting API

Claude開発元のAnthropicが「Token counting API」を提供しています。

2024/11/7時点でAmazon Bedrockでは未提供です。

AnthropicのAPIを使用するためには、APIキーが必要なのですが、APIキーの発行にはアカウント作成とクレジットの購入が必要です。(多分)
トークンカウントを試すために課金するのはもったいないと思いますので、ふーん 程度で御覧ください。

Anthropic Python API libraryを利用するのに必要な外部ライブラリ「anthropic」をインストールします。

pip install anthropic==0.39.0

以下のPythonコードを入力します。
api_keyはご自身のAPIキーに変更してください。

# Pyhton外部モジュールのインポート
from anthropic import Anthropic

# クライアントの生成
client = Anthropic(api_key="*****")

# API呼び出し
count = client.beta.messages.count_tokens(
    model="claude-3-5-sonnet-20241022",
    messages=[{"role": "user", "content": "Hello, world"}],
)

# トークン数を出力
print(count.input_tokens)
10

Bedrockの呼び出し結果から取得する

Bedrockの場合は呼び出し結果として使用トークンが取得できます。呼び出し前にトークン数を把握する方法はありません。

  • InvokeModel APIの場合

    import json
    import boto3
    
    client = boto3.client("bedrock-runtime", region_name="ap-northeast-1")
    
    body = json.dumps(
        {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 1000,
            "messages": [
                {
                    "role": "user",
                    "content": "Bedrockってどういう意味?",
                }
            ],
        }
    )
    
    response = client.invoke_model(
        modelId="anthropic.claude-3-5-sonnet-20240620-v1:0", body=body
    )
    
    response_body = json.loads(response.get("body").read())
    print(response_body["usage"])
    
    {'input_tokens': 18, 'output_tokens': 364}
    
  • Converse APIの場合

    import boto3
    
    client = boto3.client("bedrock-runtime", region_name="ap-northeast-1")
    
    message = {
        "role": "user", 
        "content": [
            {"text": "Bedrockってどういう意味?"}
        ]
    }
    
    response = client.converse(
        modelId="anthropic.claude-3-5-sonnet-20240620-v1:0",
        messages=[message],
        inferenceConfig={"maxTokens": 1000},
    )
    
    print(response["usage"])
    
    {'inputTokens': 18, 'outputTokens': 356, 'totalTokens': 374}
    

書籍を購入いただいた皆様にできるだけ最新情報を継続的にお伝えしていきたいと思います。(今から買っても遅くないので、ぜひご購入を!w)

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?