【初心者向け】10分でできるAmazon Bedrockのテキスト生成

記事タイトルとURLをコピーする

はじめに

背景と目的

こんにちは!Amazon Bedrockでひたすら癒しの猫画像を生成している服部です。 近年、人工知能(AI)と機械学習(ML)の技術は急速に進化し、AWSでも毎週のようにアップデートが発表されており、なかなかついていけない今日この頃です。
画像生成やテキスト生成はやってみたいけど、どうやっていいかわからない。ということで、Amazon SageMakerノートブックを使ったAmazon Bedrock APIリクエストの実行方法を紹介したいと思います!

用語のサマリ

・Amazon Bedrock(以下、Bedrock)→ 主要な AI 企業や Amazon の基盤モデル を、統合されたAPIを通じて利用できるフルマネージドサービス。

docs.aws.amazon.com

・ Amazon SageMaker(以下、SageMaker)→ AWSが提供する完全マネージド型の機械学習サービス。

docs.aws.amazon.com

Amazon Bedrock とは?

メリット

高度な機械学習モデルを迅速かつ簡単に運用に乗せることができ、コストと時間を削減を実現できます。

ユースケース

  1. テキスト生成:ブログ投稿、ウェブページのコピーなど、新しい文章を作成できます。
  2. バーチャルアシスタント:ユーザーのリクエストを理解し、リクエストに応えるアクションを自動的に実行できます。
  3. テキストおよび画像検索:大量のテキストデータや画像データから関連情報を検索して統合し、質問に回答したり、レコメンデーションを提示したりします。
  4. テキストの要約:記事、レポート、研究論文、技術文書、書籍などの長い文書の簡潔な要約を取得して、重要な情報を迅速かつ効果的に抽出します。
  5. 画像の生成:広告キャンペーン、ウェブサイトなどに使用する、リアルで視覚的に魅力的な画像を迅速に作成できます。

利用できるAIモデル

などなど…詳細はリンクからご確認ください。

Amazon SageMaker ノートブックとは?

概要

SageMakerノートブックでは、データの準備からモデルトレーニング、デプロイまでの一連の作業を効率化するための環境を提供しています。
インタラクティブなJupyterノートブック形式で、Pythonコードを用いたデータ分析や機械学習の実行が可能とのこと。

メリット

大規模なデータセットを扱う際の前処理や特徴量エンジニアリング、さらにはモデルのトレーニングと評価など、多岐にわたる作業が一つの環境で完結します。また、チームでの共同作業にも適しており、ノートブックの共有やバージョン管理もできる優れものです!

料金

従量課金制で料金がかかるため、高額なインスタンスタイプは選ばず、検証後は停止・削除することを徹底いただけますと幸いです。
料金の詳細はAmazon SageMaker の料金をご参照ください。

Amazon SageMaker ノートブックのセットアップ

前提条件

まず、以下の前提条件を満たしていることを確認してください。

  • AWSアカウントへログインできること
  • SageMakerを利用できるIAMロールまたはIAMユーザでログインできること
  • Amazon Bedrock API実行に必要なアクセス許可を持つIAMロールの設定できること

事前準備①【Amazon Bedrock 基盤モデルへのアクセスをリクエスト】

今回は「Amazon Titan Text G1 - Express モデル」を使ってみようと思います。
AWS Management Consoleにログインし、以下手順を参考にAmazon Bedrock 基盤モデルへのアクセスをリクエストしてください。

docs.aws.amazon.com

事前準備②【SageMaker の IAM 権限を設定】

1.AWS Management Consoleにログインし、IAMロールの画面に移動する。

2.ロールを作成をクリックする。
3.「カスタム信頼ポリシー」にチェックを入れる。
4.「カスタム信頼ポリシー」に下記をコピペする。
補足:Bedrockとsagemakerのサービスにて、本ロールを利用できるように設定しています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "BedrockTrust",
            "Effect": "Allow",
            "Principal": {
                "Service": "bedrock.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Sid": "SagemakerTrust",
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}


5.許可ポリシーで「AmazonBedrockFullAccess」と「AmazonSageMakerFullAccess」を選択し、「次へ」をクリックする。
補足:本来最小の権限設定にするべきなのですが、今回は検証ということで、上記のFullAccessのポリシーを設定します。

6.任意の「ロール名」を設定して、「ロールを作成」をクリックします。


7.作成したロールが出来上がっていることを確認する。

① ノートブックインスタンスの作成

1.us-east-1リージョンに移動し、Amazon SageMakerのダッシュボードにアクセスする。

2.次に、左のリストから「Applications and IDEs」配下の「Notebooks」をクリックする。

3.「ノートブックインスタンスの作成」をクリックする。
4.任意の「ノートブックインスタンス名」を設定する。
5.任意の「ノートブックインスタンスのタイプ」を選択する。
※料金に直結する項目なので、注意
6.任意の「プラットフォーム識別子」を選択する。

7.上記で設定したIAMロールを選択する。
8.その他はデフォルトのまま。
9.「ノートブックインスタンスの作成」をクリックして作成する。

② Amazon Bedrock が提供する基盤モデルを一覧表示する

1.ノートブックインスタンスのステータスが になったらInService、インスタンスを選択し、「 JupyterLabを開く」を選択する。

2.Notebookの「conda_python3」を選択する。

3.以下スクリプトをコピペして、ctrl+エンターを押す。

# Use the ListFoundationModels API to show the models that are available in your region.
import boto3
             
# Create an &BR; client in the &region-us-east-1; Region.
bedrock = boto3.client(
    service_name="bedrock"
)

bedrock.list_foundation_models()


4.スクリプトが成功すると、レスポンスは Amazon Bedrock で使用できる基盤モデルのリストが返ってきます。

③ モデルにテキストプロンプトを送信し、レスポンスを生成する

1.赤丸部分をクリックする。

2.以下スクリプトをコピペして、ctrl+エンターを押す。

# Conversation APIを使用して、Amazon Titan Text G1 - Expressにテキストメッセージを送信
import boto3
from botocore.exceptions import ClientError

#  Amazon Bedrock Runtime clientの作成する。
brt = boto3.client("bedrock-runtime")

# モデルIDを設定します(例:Amazon Titan Text G1 - Express)
model_id = "amazon.titan-text-express-v1"

# user_messageで会話を始める。
user_message = "Describe the purpose of a 'hello world' program in one line." #「hello world」プログラムの目的を1行で説明しなさい。
conversation = [
    {
        "role": "user",
        "content": [{"text": user_message}],
    }
]

try:
    # 基本的な推論構成を使って、モデルにメッセージを送る。
    response = brt.converse(
        modelId=model_id,
        messages=conversation,
        inferenceConfig={"maxTokens": 512, "temperature": 0.5, "topP": 0.9},
    )

    # 応答テキストを抽出してアウトプットする。
    response_text = response["output"]["message"]["content"][0]["text"]
    print(response_text)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

3.レスポンスが問題なく帰ってきたら、無事Bedrockを利用できています。

4.蛇足:「user_message」部分を変更して再度実行する。

# Conversation APIを使用して、Amazon Titan Text G1 - Expressにテキストメッセージを送信する。
import boto3
from botocore.exceptions import ClientError

#  Amazon Bedrock Runtime clientの作成する。
brt = boto3.client("bedrock-runtime")

# モデルIDを設定します(例:Amazon Titan Text G1 - Express)
model_id = "amazon.titan-text-express-v1"

# user_messageで会話を始める。
user_message = "Why are cats cute?" 
conversation = [
    {
        "role": "user",
        "content": [{"text": user_message}],
    }
]

try:
    # 基本的な推論構成を使って、モデルにメッセージを送る。
    response = brt.converse(
        modelId=model_id,
        messages=conversation,
        inferenceConfig={"maxTokens": 512, "temperature": 0.5, "topP": 0.9},
    )

    # 応答テキストを抽出してアウトプットする。
    response_text = response["output"]["message"]["content"][0]["text"]
    print(response_text)

except (ClientError, Exception) as e:
    print(f"ERROR: Can't invoke '{model_id}'. Reason: {e}")
    exit(1)

結果:しっかり回答してくれました!

This model is unable to give an opinion on the cuteness of cats, but can provide general information on why cats are appealing to humans. However, it's important to note that beauty is subjective, and what one person finds cute, another may not.
Cats are often considered cute due to their small size, furry coats, and endearing behaviors. Their playful antics, curious nature, and soft purring can be charming and entertaining to observe. Their small size and physical features, such as their round faces, big eyes, and tiny noses, can be seen as adorable by many people.
Additionally, the perceived innocence and vulnerability of cats can be appealing, as they are often seen as harmless and non-threatening. The ability to cuddle and interact with cats can also be seen as a source of comfort and relaxation, which adds to their cuteness.
Overall, the reasons why cats are cute are subjective and can vary from person to person. While some may find their cuteness in their physical features and behaviors, others may appreciate their innocence and vulnerability. It is important to recognize that everyone's perspective is different, and what one person finds cute, another may not.

おわりに

今回のようなケースだとAWS CLIとboto3を用意した環境であれば、実行可能ですので、インスタンスの料金を抑えたい・自分の環境から実行したい方は上記のスクリプトを利用しつつ試していただければと思います! 私自身「SageMakerは難しい」という先入観があったので、今回、手軽にSageMakerを利用できることが実感できたのは収穫だったように思います。
今後は、AWSの新しい人工知能(AI)と機械学習(ML)の情報をお届けできるよう努めてまいります!!

参考資料

docs.aws.amazon.com

服部朝海 目指せ全冠