LoginSignup
1
1

はじめに

この記事ではGitHub CodespacesとAWS SDKを使って、Amazon BedrockのClaude 3.5 Sonnetを試す内容になっています。

主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)誤りなどがあれば書き直していく予定です。

今回は「Amazon Bedrock 生成AIアプリ開発入門」を参考にAWSのAIにハンズオンしていきたいと思います。※発売前に献本いただきました。

Amazon Bedrock 生成AIアプリ開発入門

なお、環境のセットアップについては以下を参考にしてください。
【GitHub】GitHub CodespacesでAWS CLIをセットアップする

実行環境

開発利用する環境はGitHub Codespacesですが、その上で様々なものを扱うのでバージョンを明記しておきます。

  • GitHub Codespaces
  • Python 3.10.13
  • pip 24.0 from /usr/local/python/3.10.13/lib/python3.10/site-packages/pip (python 3.10)

セットアップ

パッケージをインストール

まずは、Pythonのパッケージを整えていきます。以下のpipをCodespacesのターミナルで実行します。

Codespacesのリンク

pip install boto3==1.34.87

モデルを有効化する

次にデフォルトではモデルのアクセスが有効になっていないため、モデルアクセスを有効化します。

リージョンがus-east-1のAWSマネジメントコンソールからAmazon Bedrockを開きます。

Screenshot 2024-06-20 at 21.59.58.png

カッコイイ画面が開きましたら左側にある三本線、いわゆるハンバーガーメニューを開きましょう。

Screenshot 2024-06-20 at 22.01.02.png

メニューの中からModel Accessをクリックします。

Screenshot 2024-06-20 at 22.01.15.png

モデルの一覧が表示されますのでその中からClaude 3 SonnetAvailable to requestにカーソルを合わせてクリックします。Request model accessのリンクが表示されるのでクリックします。

Screenshot 2024-06-21 at 0.00.19.png

クリックするとSonnetにチェックが入ります。

Screenshot 2024-06-21 at 0.01.13.png

そのまま下にスクロールしてNextをクリックします。

Screenshot 2024-06-20 at 22.02.15.png

Submitをクリックします。

Screenshot 2024-06-20 at 22.02.24.png

これで有効化完了です。

実際に動かしてみる

aws sso login

認証方法は設定済みだけどもしばらく時間が経過してしまった場合は以下のコマンドを実行して再度、認証してください。認証済みの場合は実行しなくても良いです。

aws sso login

リージョンを指定して基盤モデルの情報を取得する

では、コードを書いて実際に動かしてみましょう。今回はboto3だけを使って、Amazon Bedrockの情報を取得します。以下のコードを書いて実行します。

foundation_model_list.py
# us-east-1の基盤モデルを取得するサンプルコード
import boto3

bedrock_client = boto3.client("bedrock",region_name="us-east-1")
bedrock_found_list = bedrock_client.list_foundation_models()
model_summaries = bedrock_found_list['modelSummaries']

for model_summary in model_summaries:
    print(model_summary['modelArn'])

pythonで実行します。

python foundation_model_list.py

実行結果

arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-tg1-large
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-image-generator-v1:0
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-image-generator-v1
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-premier-v1:0
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-g1-text-02
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-lite-v1:0:4k
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-lite-v1
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1:0:8k
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-text-express-v1
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1:2:8k
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v1
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0:8k
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-text-v2:0
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-image-v1:0
arn:aws:bedrock:us-east-1::foundation-model/amazon.titan-embed-image-v1
arn:aws:bedrock:us-east-1::foundation-model/stability.stable-diffusion-xl-v1:0
arn:aws:bedrock:us-east-1::foundation-model/stability.stable-diffusion-xl-v1
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-grande-instruct
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-jumbo-instruct
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-mid
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-mid-v1
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-ultra
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-ultra-v1:0:8k
arn:aws:bedrock:us-east-1::foundation-model/ai21.j2-ultra-v1
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-instant-v1:2:100k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-instant-v1
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2:0:18k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2:0:100k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2:1:18k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2:1:200k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2:1
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-v2
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0:28k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0:200k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0:48k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0:200k
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-haiku-20240307-v1:0
arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-text-v14:7:4k
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-text-v14
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-r-v1:0
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-r-plus-v1:0
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-light-text-v14:7:4k
arn:aws:bedrock:us-east-1::foundation-model/cohere.command-light-text-v14
arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-english-v3:0:512
arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-english-v3
arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-multilingual-v3:0:512
arn:aws:bedrock:us-east-1::foundation-model/cohere.embed-multilingual-v3
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-13b-chat-v1:0:4k
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-13b-chat-v1
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-70b-chat-v1:0:4k
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-70b-chat-v1
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-13b-v1:0:4k
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-13b-v1
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-70b-v1:0:4k
arn:aws:bedrock:us-east-1::foundation-model/meta.llama2-70b-v1
arn:aws:bedrock:us-east-1::foundation-model/meta.llama3-8b-instruct-v1:0
arn:aws:bedrock:us-east-1::foundation-model/meta.llama3-70b-instruct-v1:0
arn:aws:bedrock:us-east-1::foundation-model/mistral.mistral-7b-instruct-v0:2
arn:aws:bedrock:us-east-1::foundation-model/mistral.mixtral-8x7b-instruct-v0:1
arn:aws:bedrock:us-east-1::foundation-model/mistral.mistral-large-2402-v1:0
arn:aws:bedrock:us-east-1::foundation-model/mistral.mistral-small-2402-v1:0

Bedrockするためのコードを書く

リストが取得できたので上記の内容を使って、Amazon Bedrockにプロンプトを投げてみましょう。以下のコードを実行します。

main.py
import json
import boto3

bedrock_client = boto3.client("bedrock-runtime",region_name="us-east-1")

body = json.dumps(
    {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 1000,
        "system": "あなたの仕事はユーザーの質問に答えることです。",
        "messages": [
            {
                "role": "user",
                "content": "雲の上には何がありますか?"
            }
        ]
    }
)

bedrock_model_id = "anthropic.claude-3-5-sonnet-20240620-v1:0"

header_accept = "application/json"
content_type = "application/json"

res = bedrock_client.invoke_model(
    body=body,
    modelId=bedrock_model_id,
    accept=header_accept,
    contentType=content_type
)

if res.get("body"):
    res_body = json.loads(res.get("body").read())

    if res_body["content"]:
        answer = res_body["content"][0].get("text")
        print(answer)
else:
    pritn("レスポンスのボディがありません!")

pythonで実行します。

python main.py

実行結果

雲の上には主に以下のようなものがあります:

1. より高い層の大気 - 対流圏上部や成層圏など

2. 青空 - 晴れた日には雲の上も青く見えます

3. 太陽、月、星 - 雲の上からはより明るく見えます

4. 飛行機や人工衛星 - 多くの航空機は雲の上空を飛行します

5. より高い雲層 - 巻雲などの高層雲は低層雲の上にあることがあります 

6. オーロラ - 極地方では高高度で見られることがあります

7. 宇宙空間 - 大気圏を超えると宇宙につながります

雲の高さは様々で、地上からわずか数百メートルのものから10km以上の高さにあるものまであります。雲の上の世界は、私たちが地上から見るものとはかなり異なる光景を見せてくれます。

まとめ

今回はGitHub CodespacesとAWS SDKでClaude 3.5 Sonnetを実行してみました。
LangChainと比較すると行数は多くなるもののLangChainに知見がない人でもAWS SDKの知識があれば、生成AIを呼び出せるのでとても良いと思いました。今後の発展に期待です。

トラブルシューティング

以下、トラブシューティングです。詰まった時の参考にしてください。

認証エラー

以下のようなエラーが出てしまう場合はaws sso loginを実行しましょう。

Error raised by bedrock service: The SSO session associated with this profile has expired or is otherwise invalid. To refresh this SSO session run aws sso login with the corresponding profile.

おわり

1
1
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
1
1