Bedrock開発入門の刊行後サポートです。
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)