Amazon Bedrock実装①:Python3(boto3)で実装してみる

2023/11/04に公開

Bedrock勉強中

Bedrockの使い方の勉強メモ

事前準備

BedrockのModel Accessは設定済みとします。ここでは、Claudeを利用可能にしました。

構成

以下の構成でBedrockの動作検証しました。

Windows(Python)環境のセットアップ

Bedrockを使えるように環境をセットアップする

モジュールの準備

Pythonスクリプトは以下のバージョンを使用

PS C:\Users\user01> python --version
Python 3.10.11

pipバージョンを最新にしておく

python.exe -m pip install --upgrade pip

boto3をインストールする

pip install boto3

AWS CLIのプロファイル作成

今回は、バージニアリージョン(us-east-1)のBedrockを使うため、バージニアリージョン指定のプロファイルを作成する。

(AwsLLM) PS C:\Users\user01\repo\AWS-Bedrock> aws configure --profile useast1
AWS Access Key ID [None]: AKIAYYVS2BMXKEKWQPNL
AWS Secret Access Key [None]: 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
Default region name [None]: us-east-1
Default output format [None]:

仮想環境の作成

python -m venv C:/Users/user01/.venv/AwsLLM

仮想環境の有効化

PS C:\Users\user01> .\.venv\AwsLLM\Scripts\Activate.ps1
(AwsLLM) PS C:\Users\user01> 

Bedrockに必要なモジュールをインストール

pip install --no-build-isolation --force-reinstall `
    "boto3>=1.28.57" `
    "awscli>=1.29.57" `
    "botocore>=1.31.57" `
    "langchain==0.0.320"

Pythonスクリプトの準備

Bedrockを実行し結果を出力するPython3スクリプト

test.py
import boto3
import json

# Boto3 セッションの作成
session = boto3.Session(profile_name='useast1')

# Bedrock クライアントの作成
bedrock_client = session.client(service_name='bedrock')
bedrock_runtime_client = session.client(service_name='bedrock-runtime')

# 利用可能な基盤モデル一覧の表示
foundation_models = bedrock_client.list_foundation_models()
print("Available foundation models:")
for model in foundation_models.get("modelSummaries", []):
    print(f"Model ID: {model['modelId']}, Model Name: {model['modelName']}")

# モデルの同期的呼び出し(Anthropic Claude-v2 の場合)
prompt = "Human:VPCをデプロイするCDK v2 TypeScriptを書いて?\nAssistant:"

body = json.dumps({
    "prompt": prompt,
    "max_tokens_to_sample": 300,
    "temperature": 0.1,
    "top_k": 1,
    "stop_sequences": ["\n\nHuman"]
})

model_id = "anthropic.claude-v2"
accept = "application/json"
content_type = "application/json"

response = bedrock_runtime_client.invoke_model(
    body=body,
    modelId=model_id,
    accept=accept,
    contentType=content_type
)

response_body = json.loads(response.get('body').read())
print("Generated completion:")
print(response_body.get('completion'))

動作検証

Pythonスクリプトの実行結果

(AwsLLM) PS C:\Users\user01\repo\AWS-Bedrock> python test.py
Generated completion:
 はい、VPCをデプロイするCDK v2のTypeScriptコードを書くことができます。

簡単な例は以下のようになります。

"""typescript
import { Vpc, SubnetType } from 'aws-cdk-lib/aws-ec2';
import { Construct } from 'constructs';

export class MyStack extends Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    const vpc = new Vpc(this, 'MyVpc', {
      cidr: '10.0.0.0/16',
      subnetConfiguration: [
        {
          name: 'public',
          subnetType: SubnetType.PUBLIC,
          cidrMask: 24
        },
        {
          name: 'private',
          subnetType: SubnetType.PRIVATE,
          cidrMask: 24
        }
      ]
    });
  }
}
"""

これはVPCとpublic、privateの2つのサブネットを作成します。

CIDRブロックやサブネットの数などを変更することで、必要な構成のVPCを定義できます。
(AwsLLM) PS C:\Users\user01\repo\AWS-Bedrock>

今回はここまで、次はこれをDockerで実装してみる。

===

Discussion