サーバーワークスの村上です。
2024年3月4日にAnthropic社のClaude 3が発表されました。
どうやらAmazon Bedrockでも使えるとのことでしたので早速試してみました。
2024年4月17日追記:Claude 3 ファミリーがすべて使用可能になりました
以下のブログで同様の内容を整理していますので、良ければご覧ください!
利用可能なリージョン
現在のところ、バージニア北部とオレゴンで利用可能です。
Claude 3ファミリーのモデルの種類
3種類あります。ただし、現在Amazon Bedrock で利用できるのはClaude 3 Sonnetのみです(Claude 3 Opus と Claude 3 Haiku も近々公開される予定とのこと)。
モデル | 特徴 |
---|---|
Claude 3 Haiku | 高速・低コスト |
Claude 3 Sonnet | Claude 2 および Claude 2.1 よりも2倍高速 Claude 2 および Claude 2.1 と同じレベルのインテリジェンス |
Claude 3 Opus | Claude 2 および Claude 2.1 と同様の速度 Claude 2 および Claude 2.1 よりもはるかに高いレベルのインテリジェンス |
※表現はAnthropic社のリリースおよびAWSブログより抜粋
料金
Claude 2.0/2.1よりもClaude 3 Sonnetの方が低コストで使えます。
Anthropoc models | 1,000入力トークンあたりの料金 | 1,000出力トークンあたりの料金 |
---|---|---|
Claude Instant | $0.00080 | $0.00240 |
Claude 2.0/2.1 | $0.00800 | $0.02400 |
Claude 3 Sonnet | $0.00300 | $0.01500 |
※バージニア北部・オレゴンリージョンの料金
現状、一番コストが低いのはClaude Instantですが、Claude 3 Haikuが登場したらこちらが最も安価に使えるモデルになるかもしれませんね(推測です)。
他のモデルとの比較
以下はAnthropic社のリリースより転載した、他のモデルとの比較です。
注目すべきはClaude 3 Opusの精度でしょう。他のモデルを上回っています。
(個人的な所感)ベンチマークはあくまで参考程度に
上記の他モデルとの比較データを見て、「Amazon Bedrock でも他のモデルに負けないくらいのモデルが使えるんだ!」くらいに捉えていただくのが良いと考えています。
そう考える理由の1つとして、Anthropic社のリリースの注釈の記載があります。
In addition, we’d like to note that engineers have worked to optimize prompts and few-shot samples for evaluations and reported higher scores for a newer GPT-4T model. Source.
(翻訳)
エンジニアが評価用のプロンプトと数ショットのサンプルの最適化に努め、より新しいGPT-4Tモデルでより高いスコアを報告したことにも注目したい
出典には、Few-shot(少数の例をプロンプトに含ませる手法)やCoT(Chain-of-thought。モデルにステップバイステップで考えさせて精度を向上させる手法)などを組み合わせて使用することで、より高い精度が出たことを示すMicrosoftの調査が紹介されています。
要はプロンプトを工夫することでスコアが変わったということです。
ただでさえ毎日のようにアップデートがある機械学習界隈ですし、さらにユーザーによって扱うデータも入力するプロンプトも異なります。
なのでベンチマークの数値だけで何かを判断するのではなく、あくまで参考程度とし、むしろLLMを上手に使うためのFew-shotやCoTなどの知識を取り入れることが重要だなと改めて思いました。
試してみた
まずはモデルアクセスを有効化
まずはモデルアクセスを有効化しましょう。リクエストするとすぐに使える状態になります。
画像処理機能もある
画像とテキストを入力することが可能です。
試しに弊社の大石社長の切腹プレゼンのスライドを使ってみましたが、きちんと理解してくれました。すごく心配もしてくれました。
扱える画像の形式とサイズ
最大画像サイズは3.75MBです。画像の最大の高さと幅は 8000 ピクセルです。
以下の形式に対応しています。
- image/jpeg
- image/png
- image/webp
- image/gif
boto3から使う
使用したコード
import json import logging import base64 import boto3 from botocore.exceptions import ClientError logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) def run_multi_modal_prompt(bedrock_runtime, model_id, messages, max_tokens): body = json.dumps( { "anthropic_version": "bedrock-2023-05-31", "max_tokens": max_tokens, "messages": messages } ) response = bedrock_runtime.invoke_model( body=body, modelId=model_id) response_body = json.loads(response.get('body').read()) return response_body def main(): try: bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-west-2') model_id = 'anthropic.claude-3-sonnet-20240229-v1:0' max_tokens = 1000 input_image = "./harakiri.jpg" input_text = "なんて書いてある?日本語で教えて" # Read reference image from file and encode as base64 strings. with open(input_image, "rb") as image_file: content_image = base64.b64encode(image_file.read()).decode('utf8') message = { "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": content_image } }, { "type": "text", "text": input_text } ] } messages = [message] response = run_multi_modal_prompt( bedrock_runtime, model_id, messages, max_tokens) # Unicodeエスケープされた文字列を日本語に変換 print(json.dumps(response, indent=4).encode('latin1').decode('unicode_escape')) except ClientError as err: message = err.response["Error"]["Message"] logger.error("A client error occurred: %s", message) print("A client error occured: " + format(message)) if __name__ == "__main__": main()
※コードは公式ドキュメントを参考にしました。
実行結果
$ python3 invoke_sample.py INFO:botocore.credentials:Found credentials in shared credentials file: ~/.aws/credentials { "id": "msg_016PAAgumWW3Qd4N7D78raFJ", "type": "message", "role": "assistant", "content": [ { "type": "text", "text": "この画像には、"今日のセッションで皆さまに何も得るものが無ければ 切腹します" と書かれています。これは非常に過激な表現で、適切ではありません。脅迫的な言葉は避けるべきです。プレゼンテーションや講義では、参加者を励まし、建設的な雰囲気を作ることが大切です。皮肉やユーモアを交えるのは構いませんが、威嚇したり不安を与えるような表現は控えめにした方がよいでしょう。" } ], "model": "claude-3-sonnet-28k-20240229", "stop_reason": "end_turn", "stop_sequence": null, "usage": { "input_tokens": 253, "output_tokens": 168 } }
補足
Knowledge baseではまだ使えなさそうでした。
以上となります。
今後のClaude 3 HaikuとClaude 3 Opusの登場にも期待大ですね。