如何升级 AWS Lambda 中的 boto3 和 botocore 以访问更新的 AI 模型?
2 分钟阅读
0
我想在 AWS Lambda 中安装最新版本的 boto3 和 botocore,以便在 Amazon Bedrock 中访问更新的 AI 模型。
简短描述
如果您使用 Lambda 函数的 Python 版本来调用 Amazon Bedrock 模型,则可能会收到以下错误: Error: "errorMessage": "Unknown service: 'bedrock'。要解决此问题,您必须将 boto3 和 botocore 库升级到 Lambda 中的最新版本。
解决方法
先决条件
在开始之前,请确保您可以访问 Amazon Bedrock 基础模型。
**注意:**当您使用 Amazon Bedrock 基础模型时,您需要遵守卖方的定价条款。
创建 Lambda 层
以下 AWS 命令行界面 (AWS CLI) 命令适用于 Linux、Unix 和 macOS 操作系统。
**注意:**如果在运行 AWS CLI 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
-
创建临时文件夹:
LIB_DIR=boto3-mylayer/python mkdir -p $LIB_DIR
**注意:**将 boto3-mylayer 替换为您的临时文件夹名称。
-
将 boto3 库安装到 **LIB_DIR:
**pip3 install boto3==1.34.44 -t $LIB_DIR pip3 install botocore==1.34.44 -t $LIB_DIR
-
将所有依赖项压缩到 /tmp/boto3-mylayer.zip:
cd boto3-mylayer zip -r /tmp/boto3-mylayer.zip .
**注意:**将 boto3-mylayer 替换为您的临时文件夹名称。
-
要发布该层,请运行 publish-layer-version 命令:
aws lambda publish-layer-version --layer-name boto3-mylayer --zip-file fileb:///tmp/boto3-mylayer.zip
**注意:**将 layer-name 替换为您的 Lambda 层名称,将 boto3-mylayer 替换为您的临时文件夹名称。
-
发布该层时,您将收到该层的 ARN。将 ARN 复制到文本文件中,以便稍后在此过程中使用。
创建 Lambda 函数
- 创建 Lambda 函数。
- 要将您创建的层附加到 Lambda 函数,请运行 update-function-configuration 命令:
**注意:**将 layer_ARN 替换为您收到的层 ARN。aws lambda update-function-configuration --function-name MY_FUNCTION --layer_ARN
- 要测试您的更新,请运行以下代码来调用 Anthropic Claude 2.1:
**注意:**将 region_name 和 endpoint_url 替换为您的 Amazon Bedrock 的 AWS 区域信息。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)}
AWS 官方已更新 7 个月前
没有评论
相关内容
- AWS 官方已更新 10 个月前
- AWS 官方已更新 8 个月前
- AWS 官方已更新 7 个月前
- AWS 官方已更新 8 个月前