Comment puis-je mettre à niveau boto3 et botocore dans AWS Lambda pour accéder aux nouveaux modèles d'IA ?

Lecture de 3 minute(s)
0

Je souhaite installer la dernière version de boto3 et botocore dans AWS Lambda pour accéder aux nouveaux modèles d'IA dans Amazon Bedrock.

Brève description

Si vous utilisez une fonction Lambda avec Python pour invoquer un modèle Amazon Bedrock, l'erreur suivante peut s'afficher : Erreur : « Message d'erreur » : « Service inconnu : 'bedrock'. Pour résoudre ce problème, vous devez mettre à niveau les bibliothèques boto3 et botocore vers les versions les plus récentes de Lambda.

Résolution

Prérequis

Avant de commencer, assurez-vous de pouvoir accéder aux modèles de fondation Amazon Bedrock.

Remarque : Lorsque vous utilisez les modèles de fondation Amazon Bedrock, vous êtes soumis aux ](https://aws.amazon.com/bedrock/pricing/)conditions tarifaires du vendeur[.

Créer une couche Lambda

Les commandes de l'interface de ligne de commande AWS (AWS CLI) suivantes fonctionnent pour les systèmes d'exploitation Linux, Unix et macOS.

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

  1. Créer un dossier temporaire :

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

    Remarque : Remplacez boto3-mylayer par le nom de votre dossier temporaire.

  2. Installer la bibliothèque boto3 dans **LIB \ _DIR :
    **

    pip3 install boto3==1.34.44 -t $LIB_DIR
    pip3 install botocore==1.34.44 -t $LIB_DIR
  3. Compressez toutes les dépendances dans /tmp/boto3-mylayer.zip :

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

    Remarque : Remplacez boto3-mylayer par le nom de votre dossier temporaire.

  4. Pour publier la couche, exécutez la commande publish-layer-version :

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

    Remarque : Remplacez layer-name par le nom de votre couche Lambda et boto3-mylayer par le nom de votre dossier temporaire.

  5. Lorsque vous publiez la couche, vous recevez l’ARN respectif. Copiez l'ARN dans un fichier texte afin de pouvoir l'utiliser ultérieurement dans cette procédure.

Créer une fonction Lambda

  1. Créez une fonction Lambda.
  2. Pour attacher la couche que vous avez créée à la fonction Lambda, exécutez la commande update-function-configuration :
    aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN
    Remarque : Remplacez layer_ARN par l'ARN de couche que vous avez reçu.
  3. Pour tester votre mise à jour, exécutez le code suivant pour invoquer 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)}
    Remarque : Remplacez region_name et endpoint_url par les informations relatives à la région AWS pour votre Amazon Bedrock.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 6 mois