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