PR

【Pythonで生成AI入門】第1.5回 Amazon Bedrockで生成AIにチャレンジ!

AWS

この記事を読むのに必要な時間は 約9分 です。

こんにちは、しんじです。
前回(Pythonで生成AIにチャレンジ!第1回)ではOpenAI API を使って、Pythonで自作の進捗確認ボットを動かしてみました。

今回はAWSの Amazon Bedrock を利用して、同じようなボットを作ってみます!

  • 仕事ではAWSを使っています!
  • Amazonって通販サイト!?
  • 私は Bedrocker です!!!

という方は、是非ご覧ください!


⚡️ Amazon Bedrock を使う準備

1. AWS認証情報を設定する

AWS CLIを使い,シングルサインオン (SSO) でログインします。
ログインに必要なコマンド&情報は、IAM Identity Center を使用している場合はアクセスポータルから確認できます。

アクセスポータルからターミナル用のアクセスキーを設定する方法①
アクセスポータルからターミナル用のアクセスキーを設定する方法②

アクセスポータルの案内(推奨)を参考に、SSO認証に必要な情報を入力します。
(URL, Region, Profile名等)
Profile name は後で設定するときに使用するので、分かりやすい名称で設定しておくと良さそうです。

$ aws configure sso
SSO session name (Recommended): llm
SSO start URL [None]: https://d-123456aa90.awsapps.com/start/#
SSO region [None]: ap-northeast-1
SSO registration scopes [sso:account:access]:
〜ブラウザを起動して AWS SSO でログイン認証します〜
〜認証完了後に利用するアカウント等を選択します〜
Default client Region [None]: ap-northeast-1
CLI default output format (json if not specified) [None]: json
Profile name [AdministratorAccess-123456789012]: llm

途中でブラウザが開いて認証が完了した後、プロファイルをデフォルト設定します。

export AWS_DEFAULT_PROFILE=llm

この設定をしておくと、 aws cli コマンドを使用するときに --profile profile-name を入力せずに操作することができるようになります。

2. Amazon Bedrock でモデルアクセスを有効化

Amazon Bedrock は様々な生成AIモデルをAWSから利用することができるサービスです。
例えば、ほとんどコードを変更することなく、複数のモデルを切り替えて利用することもできます。

今回は Anthropic 社が提供する Claude を利用するので、以下の手順で、モデルアクセスを有効化します。
Claude は OpenAI のモデルと同等以上の性能でテキスト生成でき、特にコーディングにおいては高い性能を発揮しています。詳しくは Claude公式ドキュメントへ

  • Amazon Bedrock コンソール の “Bedrock configurations” から「モデルアクセス」を選択
  • Claude 3.5 Haiku を有効化
    ※ 2025年4月時点での最新モデル Claude 3.7 Sonnetを有効化して試すのもオススメです
  • 有効化するとき、ユースケースの申請(会社名や用途等)が必要になります
    日本語でも良さそうですが、英語で記入するのが良さそうです

3. 環境準備

AWSを利用する準備ができましたので、サンプルコードを試すための仮想環境を作ります。
モジュールをインストールするための requirements.txt は以下のように記載して保存しておきます。

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

requirements.txt はこちら↓

boto3>=1.34.0
gradio>=4.0.0

🔖 実装コード

ターミナル版

ターミナル上で動く「進捗確認ボット」を作成します!
ファイル名を progress_bot.py として、以下のコードをコピペします。

import json
import boto3


def main():
    """進捗確認ボットのメイン関数"""
    print(
        """
    ╔══════════════════════════════════════╗
    ║         🤖 生成AIサンプル 🤖         ║
    ╠══════════════════════════════════════╣
    ║    進捗確認ボットを開始します。      ║
    ║                                      ║
    ║    このボットは、タスクの件名を      ║
    ║    入力するとAIが進捗確認の          ║
    ║    コメントを生成してくれます。      ║
    ║                                      ║
    ╚══════════════════════════════════════╝
    """
    )

    # Bedrockクライアントの初期化
    bedrock = boto3.client("bedrock-runtime", region_name="us-west-2")

    while True:
        task = input("タスクの件名(空白で終了):")
        if task.strip() == "":
            break

        prompt = f"件名「{task}」の進捗確認コメントを答えるAIアシスタントとして話してください。"

        # Bedrock APIリクエストの作成
        request_body = {
            "anthropic_version": "bedrock-2023-05-31",
            "max_tokens": 1000,
            "messages": [{"role": "user", "content": prompt}],
        }

        # Bedrock APIを呼び出し
        response = bedrock.invoke_model(
            modelId="anthropic.claude-3-5-haiku-20241022-v1:0",
            body=json.dumps(request_body),
        )

        # レスポンスの解析
        response_body = json.loads(response.get("body").read())
        reply = response_body["content"][0]["text"]
        print(f"AI: {reply}\n")


if __name__ == "__main__":
    main()

準備ができたら、以下のコマンドで実行します。

python progress_bot.py

ターミナル上でプロンプトを入力することで、以下の動作を試せます。

  • タスクの件名を入力すると
  • Amazon Bedrockの Claude 3.5 Haiku を使って、進捗確認コメントを生成
  • すぐに実用できそうなコメントを返してくれます!

Webアプリ版

次は、Gradioを使った簡易Webアプリ版です。
フィアル名を progress_bot_web.py として、以下のコードをコピペします。

import json
import boto3
import gradio as gr


def ask_progress(task: str) -> str:
    """タスクの進捗確認コメントを生成する関数

    Args:
        task (str): 進捗確認を行うタスクの件名

    Returns:
        str: 生成された進捗確認コメント
    """
    prompt = (
        f"件名「{task}」の進捗確認コメントを答えるAIアシスタントとして話してください。"
    )

    # Bedrockクライアントの初期化
    bedrock = boto3.client(
        "bedrock-runtime",
        region_name="us-west-2",
    )

    # Bedrock APIリクエストの作成
    request_body = {
        "anthropic_version": "bedrock-2023-05-31",
        "max_tokens": 1000,
        "messages": [{"role": "user", "content": prompt}],
    }

    # Bedrock APIを呼び出し
    response = bedrock.invoke_model(
        modelId="anthropic.claude-3-5-haiku-20241022-v1:0",
        body=json.dumps(request_body),
    )

    # レスポンスの解析
    response_body = json.loads(response.get("body").read())
    return response_body["content"][0]["text"]


def main() -> None:
    """Gradioを使用して進捗確認ボットのWebインターフェースを起動する"""
    # Gradioでインターフェース作成
    demo = gr.Interface(
        fn=ask_progress,
        inputs="text",
        outputs="text",
        title="進捗確認ボット",
    )

    demo.launch()


if __name__ == "__main__":
    main()

準備ができたら、以下のコマンドで実行します。

python progress_bot_web.py

実行すると、ブラウザでアプリが起動します。もし自動でブラウザが起動しない場合は、 localhost:7860 にアクセスしてみましょう。

このアプリでは、テキスト入力だけで進捗コメントを作成してくれます。
左側の task に進捗確認でやるべきタスクを入力すると、 右側の output に進捗確認のコメントを作成してくれます。

お試し用Webアプリ

✨ まとめ

今回は AWS が提供する Amazon Bedrock を使ったシンプルなテキスト生成ユースケースを試してみました。
Amazon Bedrock を使うことで、

  • AWS様々なモデルを、ほとんどコードを変更せずに利用可能
  • 必要なモデルを必要な分だけ従量課金制で利用可能

という感じで、生成AIをサクッと活用可能です。
AWS には Bedrock 以外にも様々なサービスがありますので、例えば議事録作成システムやコールセンターのサポートシステム等に生成AIを組み込むことが比較的簡単にできます。
また、AWS 自体がセキュリティ承認が済んでいる場合、多くの承認手続きが不要になるような会社もあるかもしれません。

ということで、生成AIを身近に感じてもらえたら幸いです。

では次回こそは:「日報サポートツール」に挑戦します…!!(ほんとうか??w

お楽しみに!


コメント

タイトルとURLをコピーしました