

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 预调配吞吐量的代码示例
<a name="prov-thru-code-examples"></a>

以下代码示例演示如何使用和 Python SDK 创建预配置吞吐量以及如何管理和调用预配置吞吐量。AWS CLI您可以根据基础模型或已自定义的模型创建预配置吞吐量。在开始之前，请满足以下先决条件：

**先决条件**

以下示例使用Amazon Nova Lite模型，其模型 ID 为`amazon.nova-lite-v1:0:24k`。如果您还没有，请Amazon Nova Lite按照中的步骤申请访问权限[使用 SDK 和 CLI 管理模型访问权限](model-access.md#model-access-modify)。

如果您想为不同的基础模型或自定义模型购买预配置吞吐量，则必须执行以下操作：

1. 通过执行以下任一操作来查找模型的 ID（对于基础模型）、名称（对于自定义模型）或 ARN（任一模型）：
   + 如果您要为基础模型购买预配置吞吐量，请通过以下方式之一找到支持预配置的模型的 ID 或 Amazon 资源名称 (ARN)：
     + 在表中查找值。
     + 发送[ListFoundationModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListFoundationModels.html)请求并指定`byInferenceType`值`PROVISIONED`以查看支持配置的模型列表。在`modelId`或`modelArn`字段中查找值。
   + 如果您要为自定义模型购买预置吞吐量，请通过以下方式之一找到您自定义的模型的名称或 Amazon 资源名称 (ARN)：
     + 在 Amazon Bedrock 控制台中，从左侧导航窗格中选择**自定义模型**。**在模型列表中找到您的自定义**模型**的名称，或者选择它并在**模型详细信息中找到模型 ARN**。**
     + 发送[ListCustomModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListCustomModels.html)请求并在响应中找到您的自定义模型的`modelName`或`modelArn`值。

1. 在以下示例中修改[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)请求的内容，使其与模型正文的格式相匹配[基础模型的推理请求参数和响应字段](model-parameters.md)。`body`

选择与您的首选方法对应的选项卡，然后按照以下步骤操作：

------
#### [ AWS CLI ]

1. 通过在[CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)终端中运行以下命令*MyPT*，发送创建名为的无承诺预配置吞吐量的请求：

   ```
   aws bedrock create-provisioned-model-throughput \
      --model-units 1 \
      --provisioned-model-name MyPT \
      --model-id amazon.nova-lite-v1:0:24k
   ```

1. 响应会返回一个 `provisioned-model-arn`。系统需要一些时间来完成创建，请耐心等待。要检查其状态，请发送[GetProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetProvisionedModelThroughput.html)请求并通过运行以下命令提供已置备模型的`provisioned-model-id`名称或 ARN：

   ```
   aws bedrock get-provisioned-model-throughput \
       --provisioned-model-id ${provisioned-model-arn}
   ```

1. 通过发送请求，使用您的预配置模型运行推理。[InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html)提供`CreateProvisionedModelThroughput`响应中返回的预配置模型的 ARN，作为。`model-id`输出将写入当前文件夹*output.txt*中名为的文件中。

   ```
   aws bedrock-runtime invoke-model \
       --model-id ${provisioned-model-arn} \
       --body '{
                   "messages": [{
                       "role": "user",
                       "content": [{
                           "text": "Hello"
                       }]
                   }],
                   "inferenceConfig": {
                       "temperature":0.7
                   }
               }' \
       --cli-binary-format raw-in-base64-out \
       output.txt
   ```

1. 使用以下命令发送删除预配置吞吐量的[DeleteProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_DeleteProvisionedModelThroughput.html)请求。您不必再为预调配吞吐量付费。

   ```
   aws bedrock delete-provisioned-model-throughput 
     --provisioned-model-id MyPT
   ```

------
#### [ Python (Boto) ]

以下代码片段将引导您完成创建预配置吞吐量、获取有关它的信息以及调用预配置吞吐量的过程。

1. 要创建名为的无承诺预置吞吐量，*MyPT*并将预配置吞吐量的 ARN 分配给名为的变量*provisioned\$1model\$1arn*，请发送以下请求：[CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)

   ```
   import boto3 
   
   provisioned_model_name = 'MyPT'
   
   bedrock = boto3.client(service_name='bedrock')
   response = bedrock.create_provisioned_model_throughput(
       modelUnits=1,
       provisionedModelName=provisioned_model_name, 
       modelId='amazon.nova-lite-v1:0:24k' 
   )
                           
   provisioned_model_arn = response['provisionedModelArn']
   ```

1. 系统需要一些时间来完成创建，请耐心等待。您可以使用以下代码段检查其状态。您可以提供预配置吞吐量的名称或响应中返回的 ARN [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html)作为。`provisionedModelId`

   ```
   bedrock.get_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

1. 使用以下命令并使用已配置模型的 ARN 作为，对更新后的预配置模型运行推理。`modelId`

   ```
   import json
   import logging
   import boto3
   
   from botocore.exceptions import ClientError
   
   
   class ImageError(Exception):
       "Custom exception for errors returned by the model"
   
       def __init__(self, message):
           self.message = message
   
   
   logger = logging.getLogger(__name__)
   logging.basicConfig(level=logging.INFO)
   
   
   def generate_text(model_id, body):
       """
       Generate text using your provisioned custom model.
       Args:
           model_id (str): The model ID to use.
           body (str) : The request body to use.
       Returns:
           response (json): The response from the model.
       """
   
       logger.info(
           "Generating text with your provisioned custom model %s", model_id)
   
       brt = boto3.client(service_name='bedrock-runtime')
   
       accept = "application/json"
       content_type = "application/json"
   
       response = brt.invoke_model(
           body=body, modelId=model_id, accept=accept, contentType=content_type
       )
       response_body = json.loads(response.get("body").read())
   
       finish_reason = response_body.get("error")
   
       if finish_reason is not None:
           raise ImageError(f"Text generation error. Error is {finish_reason}")
   
       logger.info(
           "Successfully generated text with provisioned custom model %s", model_id)
   
       return response_body
   
   
   def main():
       """
       Entrypoint for example.
       """
       try:
           logging.basicConfig(level=logging.INFO,
                               format="%(levelname)s: %(message)s")
   
           model_id = provisioned-model-arn
   
           body = json.dumps({
               "inputText": "what isAWS?"
           })
   
           response_body = generate_text(model_id, body)
           print(f"Input token count: {response_body['inputTextTokenCount']}")
   
           for result in response_body['results']:
               print(f"Token count: {result['tokenCount']}")
               print(f"Output text: {result['outputText']}")
               print(f"Completion reason: {result['completionReason']}")
   
       except ClientError as err:
           message = err.response["Error"]["Message"]
           logger.error("A client error occurred: %s", message)
           print("A client error occured: " +
                 format(message))
       except ImageError as err:
           logger.error(err.message)
           print(err.message)
   
       else:
           print(
               f"Finished generating text with your provisioned custom model {model_id}.")
   
   
   if __name__ == "__main__":
       main()
   ```

1. 使用以下代码段删除预调配吞吐量。您不必再为预调配吞吐量付费。

   ```
   bedrock.delete_provisioned_model_throughput(provisionedModelId=provisioned_model_name)
   ```

------