PythonからAWS BedrockのClaude2 APIを呼び出す方法

この記事は公開から1年以上経過しています。

PythonからAWS BedrockのClaude2の従量課金制APIを呼び出す方法。

本例は開発用途としてIAM Identify CenterではなくIAMのアクセスキーを使用する例です。

前提条件として、Amazon Bedrockの米国東部(バージニア北部)us-east-1リージョンのModel accessでAnthropic/Claudeのモデルアクセスリクエストが承認済みとなっている必要があります。
※東京リージョンap-northeast-1ではClaude Instantしか選択できなかったと思いますが、もしClaudeが選択できるようなら東京リージョンでもOKです。

file

Bedrock API呼び出し用のIAMユーザーを作成する場合は、以下の手順を参考にIAMユーザーとアクセスキーとシークレットキーを作成してください。

ここで作成するIAM設定は、開発環境からAPIを利用する目的以外では使用しないでください。


  1. IAMの管理画面のアクセス管理ユーザーから、
    許可のオプション:ユーザーをグループに追加
    コンソールパスワード:None
    で新規ユーザーを任意の名称で追加する。

  2. 作成したユーザーをIAMのユーザー一覧で開き、概要欄のアクセスキーを作成を選択する。

  3. 主要なベストプラクティスと代替案にアクセスする画面でローカルコードを選択し確認にチェックを入れて次へを押下する。

  4. アクセスキーを取得画面に表示されるアクセスキーとシークレットキーをメモ、またはCSVでダウンロードする。

  5. 許可タブの許可ポリシー許可を追加からインラインポリシーを作成を選択する。

  6. アクセス許可を指定画面のサービスを選択サービスからBedrockを選択する。

  7. アクセス許可を設定画面でBedrockアクション許可設定からInvokeModelを選択する。

  8. 同画面のリソース特定を選択し、foundation-model任意にチェックを入れる。
    確認して作成画面で任意のポリシー名を入力してポリシーの作成を押下する。


サンプルソースコード(Python)

コードは参考ウェブサイトのDevelopersIO(Classmethod)さんの記事のコードに、認証情報の追加などを行っただけです。

import json
import os

import boto3

bedrock = boto3.client(
    'bedrock-runtime',
    region_name='us-east-1',
    aws_access_key_id=os.environ['BEDROCK_ACCESS_KEY_ID'],
    aws_secret_access_key=os.environ['BEDROCK_SECRET_ACCESS_KEY']
)

prompt = '''
Human: 任意のプロンプト

Assistant:
'''

body = json.dumps(
    {
        'prompt': prompt,
        'max_tokens_to_sample': 500
    }
)

resp = bedrock.invoke_model(
    modelId='anthropic.claude-v2',
    body=body,
    contentType='application/json',
    accept='application/json'
)

answer = resp['body'].read().decode()

print(json.loads(answer)['completion'])

※実行前にOSのユーザー環境変数等へ以下の環境変数を予め設定しておいてください。

環境変数名 設定内容
BEDROCK_ACCESS_KEY_ID アクセスキー
BEDROCK_SECRET_ACCESS_KEY シークレットキー


ちなみにIAMでBedrockのInvokeMethodへのアクセス許可を設定していない場合、

Exception has occurred: ClientError
An error occurred (UnrecognizedClientException) when calling the InvokeModel operation: The security token included in the request is invalid.
File "xxx.py", line xx, in <module>
resp = bedrock.invoke_model(
botocore.exceptions.ClientError: An error occurred (UnrecognizedClientException) when calling the InvokeModel operation: The security token included in the request is invalid.

のようなエラーが発生します。


参考ウェブサイトなど

  • DevelopersIO(Classmethod)
    [初心者向け] Amazon Bedrockを使ってPythonでClaudeと遊ぶための最初の三歩くらい

  • AWS
    Boto3/Credentials/Passing credentials as parameters

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする