From c6327f5768998211e16150867b99ded0bc6cbb10 Mon Sep 17 00:00:00 2001 From: Maki Date: Mon, 6 May 2024 00:01:51 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20Docker=E3=81=A8Python=E3=82=B9?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=81=AE=E6=A9=9F=E8=83=BD?= =?UTF-8?q?=E6=8B=A1=E5=BC=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Dockerfileにboto3, art, termcolorパッケージのインストールを追加 - docker-compose.ymlでAWSのデフォルトリージョンをap-northeast-1からus-east-2に変更 - 新しいPythonスクリプトexample/01_list_bedrock_models.pyを追加し、Bedrockクライアントを通じてファウンデーションモデルの一覧を取得して出力 - example/02_bedrock_text_generation.pyを追加し、指定されたBedrockモデルにテキスト生成リクエストを送信する機能を実装 詳細な説明: - **Dockerfileの変更**: - AWS CLIのインストール後に、boto3、art、termcolorパッケージのインストール行を追加。これにより、これらのライブラリを用いた開発が容易になる。 - **docker-compose.ymlの変更**: - AWSのデフォルトリージョン設定を「ap-northeast-1」から「us-east-2」に変更。地域に依存する設定の柔軟性が向上。 - **新規Pythonスクリプトの追加**: - `example/01_list_bedrock_models.py`:AWSのBedrockサービスを使用してファウンデーションモデルの一覧を取得し、プリントするスクリプト。開発やデバッグ時のモデル情報取得を効率化。 - `example/02_bedrock_text_generation.py`:特定のBedrockモデルに対してテキスト生成リクエストを送信し、結果を表示するスクリプト。テキスト --- Dockerfile | 2 + docker-compose.yml | 2 +- example/01_list_bedrock_models.py | 48 ++++++++++++++++++++++++ example/02_bedrock_text_generation.py | 54 +++++++++++++++++++++++++++ 4 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 example/01_list_bedrock_models.py create mode 100644 example/02_bedrock_text_generation.py diff --git a/Dockerfile b/Dockerfile index 2d0bfd3..96e80eb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,4 +10,6 @@ RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2 RUN unzip awscliv2.zip RUN sudo ./aws/install +RUN pip install --upgrade boto3 art termcolor + WORKDIR /app \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 74add0f..6a74095 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,6 @@ services: env_file: - .env environment: - AWS_DEFAULT_REGION: ap-northeast-1 + AWS_DEFAULT_REGION: us-east-2 AWS_DEFAULT_OUTPUT: json tty: true \ No newline at end of file diff --git a/example/01_list_bedrock_models.py b/example/01_list_bedrock_models.py new file mode 100644 index 0000000..498f1db --- /dev/null +++ b/example/01_list_bedrock_models.py @@ -0,0 +1,48 @@ +import boto3 +import json +import pprint +from termcolor import colored +from art import * +import os + +def main(): + # スクリプト名を取得して出力 + script_name = os.path.basename(__file__) + tprint(script_name) + + # Bedrockクライアントの作成 + region_name = "us-east-1" # 指定可能なリージョンはバージニア北部(us-east-1)またはオレゴン(us-west-2) + bedrock = create_bedrock_client(region_name) + + # ファウンデーションモデルの一覧を取得して出力 + foundation_models = get_foundation_models(bedrock) + print_foundation_models(foundation_models) + +def create_bedrock_client(region_name): + """ + Bedrockクライアントを作成する関数 + + :param region_name: リージョン名 + :return: Bedrockクライアント + """ + return boto3.client("bedrock", region_name=region_name) + +def get_foundation_models(bedrock): + """ + ファウンデーションモデルの一覧を取得する関数 + + :param bedrock: Bedrockクライアント + :return: ファウンデーションモデルの一覧 + """ + return bedrock.list_foundation_models()["modelSummaries"] + +def print_foundation_models(foundation_models): + """ + ファウンデーションモデルの一覧を出力する関数 + + :param foundation_models: ファウンデーションモデルの一覧 + """ + pprint.pprint(foundation_models) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/example/02_bedrock_text_generation.py b/example/02_bedrock_text_generation.py new file mode 100644 index 0000000..dd7edbf --- /dev/null +++ b/example/02_bedrock_text_generation.py @@ -0,0 +1,54 @@ +import boto3 +import json + +# Bedrockクライアントを初期化する関数 +def initialize_bedrock_client(region="us-west-2"): + """ + 指定されたリージョンでBedrockクライアントを初期化します。 + 指定可能なリージョンはバージニア北部(us-east-1)またはオレゴン(us-west-2)です。 + デフォルトリージョンで良い場合はリージョン指定省略可能です。 + """ + return boto3.client('bedrock-runtime', region_name=region) + +# Bedrockモデルにリクエストを送信する関数 +def send_request_to_bedrock(client, model_id, message, max_tokens=1000): + """ + 指定されたBedrockモデルにリクエストを送信し、応答を返します。 + """ + body = json.dumps( + { + "anthropic_version": "bedrock-2023-05-31", + "max_tokens": max_tokens, + "messages": [ + { + "role": "user", + "content": message + } + ] + } + ) + accept = 'application/json' + content_type = 'application/json' + response = client.invoke_model(body=body, modelId=model_id, accept=accept, contentType=content_type) + response_body = json.loads(response.get('body').read()) + return response_body["content"][0]["text"] + +# メインの処理 +def main(): + # Bedrockクライアントを初期化 + bedrock_client = initialize_bedrock_client() + + # 使用するモデルIDを指定 + model_id = 'anthropic.claude-3-haiku-20240307-v1:0' + + # モデルに送信するメッセージ + message = "味噌汁の作り方を説明してください" + + # Bedrockモデルにリクエストを送信し、応答を取得 + answer = send_request_to_bedrock(bedrock_client, model_id, message) + + # 応答を表示 + print(answer) + +if __name__ == "__main__": + main() \ No newline at end of file From cba0d15f27ca1efbf1b6e045ff78d961ac9bcfe3 Mon Sep 17 00:00:00 2001 From: Maki Date: Mon, 6 May 2024 00:19:32 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[docs]=20=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E3=81=AB=E3=82=B5=E3=83=B3=E3=83=97?= =?UTF-8?q?=E3=83=AB=E3=82=B9=E3=82=AF=E3=83=AA=E3=83=97=E3=83=88=E3=81=AE?= =?UTF-8?q?=E3=82=BB=E3=82=AF=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=A8=E6=96=B0?= =?UTF-8?q?=E3=81=97=E3=81=84README=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit README.mdとexample/README.mdの両方に変更が加えられました。主な変更点は以下の通りです: - README.mdに「サンプルスクリプト」のセクションが新たに追加されました。これには、AWS Bedrockの使用例を示すサンプルスクリプトへの説明とリンクが含まれています。 - exampleディレクトリに新しいREADME.mdが作成され、その中にAWS Bedrockを使用したサンプルスクリプトの詳細な説明が記載されています。この新しいファイルには、具体的なスクリプトの使用例とそれらのステップバイステップの説明が含まれています。 --- README.md | 5 +++++ example/README.md | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 example/README.md diff --git a/README.md b/README.md index cddd895..9cc793c 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,11 @@ upload: ./.env_sample to s3://test-20210711/.env_sample おめでとうございます!Docker コンテナ内で AWS CLI v2 を設定して使用することに成功しました。 + +## 📚 サンプルスクリプト + +AWS Bedrock の使用例を示すサンプルスクリプトが `example` ディレクトリに含まれています。詳細については、[example/README.md](example/README.md) を参照してください。 + ## 🛠️ プロジェクト構造 プロジェクトの構造は次のようになっています。 diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..6f8707e --- /dev/null +++ b/example/README.md @@ -0,0 +1,23 @@ +# Examples + +このディレクトリには、MOA プロジェクトの使用例を示すサンプルスクリプトが含まれています。 + +## 01_list_bedrock_models.py + +このスクリプトは、AWS Bedrock で利用可能なファウンデーションモデルの一覧を取得して表示します。主な手順は以下の通りです。 + +1. Bedrock クライアントを作成 +2. `list_foundation_models()` メソッドを使用してファウンデーションモデルの一覧を取得 +3. 取得したファウンデーションモデルの一覧を表示 + +## 02_bedrock_text_generation.py + +このスクリプトは、AWS Bedrock のモデルを使用してテキスト生成を行う方法を示しています。主な手順は以下の通りです。 + +1. Bedrock クライアントを初期化 +2. 使用するモデル ID を指定 +3. モデルに送信するメッセージを設定 +4. `invoke_model()` メソッドを使用してモデルにリクエストを送信し、応答を取得 +5. 取得した応答を表示 + +これらのスクリプトを参考に、AWS Bedrock の機能を活用したアプリケーションを開発できます。 \ No newline at end of file