Amazon Bedrockのclaude-v2をboto3から実行してみた

2023/09/30に公開

はじめに

ついにAmazon BedrockがGAになりましたね!

https://aws.amazon.com/jp/blogs/aws/amazon-bedrock-is-now-generally-available-build-and-scale-generative-ai-applications-with-foundation-models/

料金表は以下のようになっています。
(他のChatGPTとかでもそうですが)Token単位の従量課金なので安心ですね。

https://aws.amazon.com/jp/bedrock/pricing/

コンソールから試したり、SDKで試した記事もちらほらと上がってきています!

https://zenn.dev/yasuna/articles/aa7fd893d4d313

https://dev.classmethod.jp/articles/python-boto3-amazon-bedrock-get-started/

というわけで、boto3からモデルを実行してみます。公式のサンプルではai21.j2-ultra-v1を、Classmethodさんの記事ではai21.j2-mid-v1を使っていました。そこで、今回はanthropic.claude-v2というモデルを実行してみます。

コンソールでの初期設定

まずは、モデルを使うために初期設定します。

コンソールから「Bedrock」などと検索して、バージニア北部リージョンを選択します。モデルの一覧ページで「Edit」ボタンを押下して利用可能にします。

claude-v2を利用するためには、
Anthropic隣にある「Request」ボタンからリクエストする必要があります。

リクエストフォームを適当に埋めます。
完了したら、1分も待たずに完了メールが飛んできました。

boto3からの呼び出し

boto3は現時点で最新の1.28.57以上が必要です。
boto3でclientは以下のように作成します。

import boto3
import json

bedrock_runtime = boto3.client(
    service_name='bedrock-runtime', 
    region_name='us-east-1'
)

claude-v2のmodelIdとプロンプトなどの変数は以下の通りです。

modelId = 'anthropic.claude-v2' 
accept = 'application/json'
contentType = 'application/json'

prompt = """
Human: こんにちわ。あなたが持っている背景情報について教えてください。
Assistant: 
"""

body = json.dumps({"prompt": prompt, "max_tokens_to_sample": 200})

この状態で、invoke_modelを実行するとモデルから結果が返ってきます。

response = bedrock_runtime.invoke_model(
    body=body, 
    modelId=modelId, 
    accept=accept, 
    contentType=contentType
)

response_body = json.loads(response.get('body').read())

結果は以下の通りです。

{'completion': ' はい、私はAnthropic社によって開発された人工知能チャットボットです。私には専門知識や個人的な経験はありません。会話を通じて学習できるように設計されています。',
 'stop_reason': 'stop_sequence'}

プロンプトの指定方法

claude-v2のプロンプトの例は次のようにする必要があります。
それ以外の例だとエラーになるので注意が必要です。

正しい例
prompt = """
Human: こんにちわ。あなたが持っている背景情報について教えてください。
Assistant: 
"""

body = json.dumps({"prompt": prompt, "max_tokens_to_sample": 200})

最初に、Classmethodの記事を参考に以下のようにしておりエラーが発生してしまいました。

間違った例
prompt = "こんにちわ。あなたが持っている背景情報について教えてください。"

body = json.dumps({"prompt": prompt, "max_tokens_to_sample": 200})

ただパッとみても「ん?」ってなるメッセージだったのでChatGPT4に教えてもらいました。


(中略)

このpromptを入れたら正常に動いたので、未知の内容でも解釈できるのすごいなって思いました。

おわりに

前から出るのが楽しみだったAmazon Bedrockを軽くですが触ってみました!
これを使ってAWS内で色々なことに使えるので便利ですね!

GitHubで編集を提案

Discussion