2
0

とりあえずプログラムからAWS Bedrockに質問して回答もらうまで試してみたいって方へ ~100本ノックしてみたい中堅エンジニア 【AWS】~ 8/100

Posted at

はじめに

今年のAWSサミットでもAI系のセッションが非常に多かった印象がありますが、その中でもよく話題に上がるBedrockをとりあえず試してみたいって人に向けての記事になります。

※今回はBedrockの詳細なサービス説明や、生成AIの知識系は話しません(というか、私自身理解できていない)のでご了承ください:bow:

今回出てくるもの

  • AWS Bedrock:大手AI企業の高性能な基盤モデル(FM)を利用できるフルマネージドサービス
  • Claude:Anthropic社が開発した生成AIモデル
  • Laravel:PHPのFW

やってみる

では、さっそくですが試してみます!

Claudeを有効化

生成AIモデルは有効化しないと利用できないため、AWSコンソールから有効化していきます

左メニューのベースモデルをクリックします
1.png

ベースモデル一覧でClaudeを見ると、リクエストをする必要がある旨のメッセージが表示されるので、モデルアクセスをクリックします
2.png

モデルアクセスをリクエストをクリックします
3.png

Claudeにチェックを付けて、Nextをクリックします
4.png

リクエストに必要な情報を入力します。
会社名やウェブサイトのURL、利用用途などを入力して、Nextをクリックします
5.png

確認画面が出るので問題なければ、Submitをクリックするとリクエストが実行されます
6.png

数分待つと、アクセスが付与されましたと表示されるはずです。
これで、利用準備は完了です :smile:
8.png

ローカルからアクセスするためのIAMユーザを作成する

今回はローカル環境からアクセスするので、アクセスキーを発行して利用します

ユーザの作成をクリックします
14.png

任意のユーザ名を入力し、次へをクリックします
15.png

次に権限をアタッチするのですが、今回はインラインポリシーにするのでここでは何もせず、次へをクリックします。
ユーザ作成時にインラインポリシー作れなくて不便... :cry:
16.png

確認画面が出るので、ユーザの作成をクリックすればIAMユーザの作成が完了です。
17.png

次に、インラインポリシーを作成してBedrockへの権限を付与していきます。
許可を追加からインラインポリシーを作成をクリックします。
18.png

以下のjsonを記載します。
※claudeのver2.1モデルを実行する権限を付与しています

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic.claude-v2:1"
        }
    ]
}

19.png

アクセスキーに関しては永続的な認証情報なので、特に権限の追加に注意が必要です。
特別な事情がない限り、AWSの最小権限の原則に則って必要な権限だけ付与しましょう!

任意のポリシー名を入力して、ポリシーの作成をクリックしてインラインポリシーの作成は完了です :smile:
20.png

アクセスキーを発行します

IAMユーザを作成したので、アクセスキーを発行します。
アクセスキーを作成をクリックします

21.png

ユースケースとしてローカルコードを選択して、次へをクリックします

表示にもあるようにローカルからのアクセスには、Identity Centerによる認証が推奨されています。
Identity Centerによる認証をする場合は、こちらのやり方で出来るようです

22.png

アクセスキーを作成をクリックすると、アクセスキーが払い出されます
23.png

払い出されたアクセスキーをメモ or CSVファイルをダウンロードして、完了をクリックします。
24.png

この画面でしかシークレットアクセスキーを確認できないので、取得を忘れないようにしましょう

LaravelでBedrockにリクエストしてみる

さぁ、最後にローカルから実行してみましょう。
aws/aws-sdk-phpをcomposer installした状態で以下のコードを実行します。
※Laravelの環境構築については割愛します

use Aws\BedrockRuntime\BedrockRuntimeClient;

// NOTE:https://docs.aws.amazon.com/ja_jp/code-library/latest/ug/php_3_bedrock-runtime_code_examples.html
// NOTE:https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/model-parameters-anthropic-claude-text-completion.html
try {
    $bedrockRuntimeClient = new BedrockRuntimeClient([
        'version' => '2023-09-30',
        'region' => 'ap-northeast-1',
        'credentials' => [
            'key' => 'xxx', // 取得したアクセスキー
            'secret' => 'xxx', // 取得したシークレットアクセスキー
        ],
    ]);

    $input = 'AWS Bedrockさん こんにちは。お元気ですか?あなたはどんなサービスなのか詳しく教えてください。'; // ここを任意の内容にしてください
    $prompt = "\n\nHuman: {$input}\n\nAssistant:";
    $result = $bedrockRuntimeClient->invokeModel([
        'contentType' => 'application/json',
        'body' => json_encode([
            'prompt' => $prompt,
            'max_tokens_to_sample' => 1000,
            'stop_sequences' => ["\n\nHuman:"],
            //'temperature' => 0.1,
            //'top_p': float,
            //'top_k': float,
        ]),
        'modelId' => 'anthropic.claude-v2:1',
    ]);
    $response_body = json_decode($result['body']);
    $completion = $response_body->completion;

    return Response::json(['result' => $completion], 200);
} catch (Exception $e) {
    var_dump("Error: ({$e->getCode()}) - {$e->getMessage()}\n");;
}

すると、こんな感じで返ってきました。うまく行ったようです :smile:

{
    "result": " はい、こんにちは。AWS Bedrockと申します。\n\n私はAmazon Web Servicesが提供するサービスの1つで、ベースとなるインフラストラクチャの管理と運用を支援するサービスです。\n\n具体的には以下のような機能を提供しています。\n\n- AWSアカウントの作成と管理\n- アイデンティティやアクセス管理の設定\n- セキュリティ対策の基盤構築\n- コスト管理と利用状況の分析\n- リソースのプロビジョニングと設定の自動化\n\nつまりAWSの基盤となる部分をしっかり整備することで、上位のアプリケーションやワークロードをスムーズに構築・運用できる環境を提供するサービスです。\n\n複雑なインフラの管理から開発者を解放し、アプリそのものの開発に注力できるよう支援します。規模の拡大に合わせてインフラも柔軟に拡張できるのが特徴です。\n\n以上、簡単ではありますがAWS Bedrockの説明でした。ご不明な点があれば遠慮なく質問してください。"
}

おわりに

今回はBedrockを使ってLaravelからClaudeに対して質問を投げてみました。
LaravelからBedrockにリクエストしたい人たちに少しだけ役立てば幸いです:smile:

2
0
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
2
0