AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

新しい AI モデルにアクセスするために、AWS Lambda で boto3 と botocore をアップグレードする方法を教えてください。

所要時間2分
0

AWS Lambda で boto3 と botocore の最新バージョンをインストールし、Amazon Bedrock の新しい AI モデルにアクセスしたいです。

簡単な説明

Python で Lambda 関数を使用して Amazon Bedrock モデルを呼び出すと、次のエラーが表示されることがあります。 エラー: "errorMessage": 「'bedrock' は不明なサービスです。この問題を解決するには、boto3 ライブラリと botocore ライブラリを Lambda の最新バージョンにアップグレードする必要があります。

解決策

前提条件

始める前に、Amazon Bedrock 基盤モデルにアクセスできることを確認してください。

注: Amazon Bedrock 基盤モデルを使用する場合、販売者の価格条件が適用されます。

Lambda レイヤーを作成する

次の AWS コマンドラインインターフェイス (AWS CLI) コマンドは、Linux、Unix、macOS オペレーティングシステムで機能します。

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

  1. 一時フォルダを作成します。

    LIB_DIR=boto3-mylayer/python
    mkdir -p $LIB_DIR

    注: boto3-mylayer は、お使いの一時フォルダの名前に置き換えます。

  2. boto3 ライブラリを **LIB_DIR にインストールします。
    **

    pip3 install boto3==1.34.44 -t $LIB_DIR
    pip3 install botocore==1.34.44 -t $LIB_DIR
  3. すべての依存関係を /tmp/boto3-mylayer.zip に zip 化します。

    cd boto3-mylayer
    zip -r /tmp/boto3-mylayer.zip .

    注: boto3-mylayer は、お使いの一時フォルダの名前に置き換えます。

  4. レイヤーを公開するには、publish-layer-version コマンドを実行します。

    aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip

    注: **layer-name ** は実際の Lambda レイヤー名に置き換え、boto3-mylayer はお使いの一時フォルダ名に置き換えます。

  5. レイヤーを公開すると、レイヤーの ARN を取得できます。この手順の後半で使用するために、ARN をテキストファイルにコピーします。

Lambda 関数を作成する

  1. Lambda 関数を作成します
  2. 作成したレイヤーを Lambda 関数にアタッチするには、update-function-configuration コマンドを実行します。
    aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN
    注: layer_ARN は、取得したレイヤー ARN に置き換えます。
  3. アップデートをテストするには、次のコードを実行して Anthropic Claude 2.1 を呼び出します。
    import boto3
    import json
    import os
    def lambda_handler(event, context):
      print("Boto3 version:", boto3.__version__)
    
      bedrock = boto3.client(service_name='bedrock', region_name='us-east-1', endpoint_url='https://bedrock.us-east-1.amazonaws.com')
    
      bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name='us-east-1', endpoint_url='https://bedrock-runtime.us-east-1.amazonaws.com')
      models=bedrock.list_foundation_models()
      modelIds = [model['modelId'] for model in models['modelSummaries']]
      print("Models: ", modelIds)
    
      for required_field in ["model"]:
        if required_field not in event:
          return {'statusCode': 400, 'body': f'ERROR: MISSING REQUEST PARAMETER {required_field}'}
      #event = {"model":"anthropic.claude-v2:1", "prompt": "Why is the sky blue?", "max_tokens_to_sample": 4000, "temperature": 0.5, "top_k": 250, "top_p": 1, "stop_sequences": ["Command:"]}
      print(f"EVENT: {event}")
      bedrock_model = event.pop("model")
      print(f"BEDROCK_MODEL: {bedrock_model}")
      if bedrock_model not in modelIds:
        return {'statusCode': 400, 'body': f'ERROR: INVALID MODEL {bedrock_model} REQUESTED. SUPPORTED MODELS: {modelIds}'}
    
      if "claude" in bedrock_model:
        event["prompt"] = f'Human: {event["prompt"]}\n\nAssistant:'
    
      bedrock_str = json.dumps(event)
      print(f"BEDROCK_STR: {bedrock_str}")
      modelId = 'anthropic.claude-v2:1'
    
      bodyprompt = {"prompt":"\n\nHuman:who is the prime minister of India\n\nAssistant:","max_tokens_to_sample":42,"temperature":0.5,"top_k":250,"top_p":1,"anthropic_version":"bedrock-2023-05-31"}
      response = bedrock_runtime.invoke_model(body=bedrock_str, modelId=modelId, accept='application/json', contentType='application/json')
      #response = bedrock.invoke_model(body= json.dumps(bodyprompt), modelId=bedrock_model, accept='application/json', contentType='application/json')
      response_body = json.loads(response.get('body').read())
      print(response_body)
    
      return {'statusCode': 200, 'body': json.dumps(response_body)}
    注: region_nameendpoint_url は、Amazon Bedrock に使用している AWS リージョンの情報で置き換えます。
コメントはありません

関連するコンテンツ