

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 佈建輸送量的程式碼範例
<a name="prov-thru-code-examples"></a>

下列程式碼範例示範如何使用 和 AWS CLIPython SDK 建立佈建輸送量，以及如何管理和叫用它。您可以從基礎模型或您已自訂的模型建立佈建輸送量。開始之前，請執行下列先決條件：

**先決條件**

下列範例使用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 Resource Name (ARN)，方法如下：
     + 查詢資料表中的值。
     + 傳送 [ListFoundationModels](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListFoundationModels.html) 請求，並將`byInferenceType`值指定為 `PROVISIONED`，以查看支援佈建的模型清單。在 `modelId`或 `modelArn`欄位中尋找 值。
   + 如果您購買自訂模型的佈建輸送量，請尋找您以下列其中一種方式自訂模型的名稱或 Amazon Resource Name (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) 請求`body`的 ，以在 中尋找符合模型內文的格式[基礎模型的推論請求參數和回應欄位](model-parameters.md)。

選擇您偏好方法的索引標籤，然後遵循下列步驟：

------
#### [ 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`。預留一些時間讓建立完成。若要檢查其狀態，請執行下列命令`provisioned-model-id`，傳送 [GetProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_GetProvisionedModelThroughput.html) 請求，並提供佈建模型的名稱或 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. 預留一些時間讓建立完成。您可以使用下列程式碼片段來檢查其狀態。您可以提供佈建輸送量的名稱，或從 [CreateProvisionedModelThroughput](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_CreateProvisionedModelThroughput.html) 回應傳回的 ARN 做為 `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)
   ```

------