

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

# 在 Amazon Personalize 中创建域推荐器
<a name="creating-domain-recommenders"></a>

您可以使用 Amazon Personalize 控制台创建推荐人， Amazon Command Line Interface (Amazon CLI) 或 Amazon SDKs。下面包括使用 Amazon Personalize 控制台创建推荐器的详细步骤，还包括了代码示例，用于演示如何创建仅包含必需字段的推荐器。
+ 有关如何在推荐中启用元数据的代码示例，请参阅[在建议中启用元数据](create-recommender-return-metadata.md)。
+  有关如何配置在训练支持推荐器的模型时使用的列的代码示例，请参阅[配置在创建 Amazon Personalize 域推荐器时使用的列](create-recommender-configure-columns.md)。
+ 有关如何为 `Top picks for your` 或 `Recommended for you` 应用场景配置浏览的代码示例，请参阅[为域推荐器配置浏览](create-recommender-configure-exploration.md)。

**Topics**
+ [创建推荐器（控制台）](#creating-recommenders-console)
+ [创建推荐器（Amazon CLI）](#create-recommender-cli)
+ [创建推荐器（Amazon SDKs）](#create-recommender-sdk)

## 创建推荐器（控制台）
<a name="creating-recommenders-console"></a>

**重要**  
高 `minRecommendationRequestsPerSecond` 会增加您的账单费用。我们建议从 1 开始设置 `minRecommendationRequestsPerSecond`（默认值）。使用 Amazon CloudWatch 指标跟踪您的使用情况，并在必要`minRecommendationRequestsPerSecond`时增加使用量。有关更多信息，请参阅 [每秒最低建议请求数和自动扩缩](creating-recommenders.md#min-rrps-auto-scaling)。

 使用 Amazon Personalize 控制台为您的每个使用案例创建推荐器，如下所示。如果您刚刚创建了域数据集组，且已经进入了**概述**页面，请跳至步骤 3。

**创建推荐器**

1. 在[https://console.aws.amazon.com/personalize/家](https://console.amazonaws.cn/personalize/home)中打开 Amazon Personalize 控制台并登录您的账户。

1.  在**数据集组**页面上，选择您的域数据集组。

1. 在**步骤 3** 中，选择**使用 <域名> 推荐器**，然后选择**创建推荐器**。

1. 在**选择使用案例**页面上，选择要创建推荐器的使用案例，并分别提供**推荐器名称**。Amazon Personalize 会为您选择的每个使用案例创建一个推荐器。可用的使用案例取决于您的域。有关选择使用案例的信息，请参阅[选择使用案例](domain-use-cases.md)。

1.  选择**下一步**。

1. 在**高级配置**页面上，根据您的业务需求配置每个推荐器：
   + 对于推荐器使用案例使用的每个数据集，您可以选择 Amazon Personalize 在训练支持推荐器的模型时考虑的列。默认情况下，Amazon Personalize 使用可在训练时采用的所有列。有关更多信息，请参阅 [配置在创建 Amazon Personalize 域推荐器时使用的列](create-recommender-configure-columns.md)。
   + 您可以修改**每秒最低建议请求数**，为推荐器指定新的最低请求容量。高 `minRecommendationRequestsPerSecond` 会增加您的账单费用。我们建议从 1 开始设置（默认值）。使用 Amazon CloudWatch 指标跟踪您的使用情况，并在必要`minRecommendationRequestsPerSecond`时增加使用量。有关更多信息，请参阅 [每秒最低建议请求数和自动扩缩](creating-recommenders.md#min-rrps-auto-scaling)。
   + 如果您希望能够在建议中包含物品数据集元数据，请选择**在建议结果中返回物品元数据**。如果启用，则可以在建议或个性化排名请求中指定物品数据集中的列。Amazon Personalize 会在建议响应中返回每个物品的这些数据。

      要启用元数据，必须拥有包含一列元数据的物品数据集。
   + 对于 `Top picks for your` 或 `Recommended for you` 使用案例，可以选择更改浏览配置。浏览包括测试不同的物品建议，以了解用户如何对交互数据很少的物品做出响应。使用以下字段来配置浏览：
     + 重点浏览不太相关的物品（浏览权重）- 配置要浏览的程度。指定 0 到 1 之间的十进制值。默认值为 0.3。值越接近 1，浏览次数就越多。浏览次数越多，建议包括的物品就越多，这些物品具有的物品交互数据更少或基于先前行为的相关性更低。如果值为零，则表示没有浏览，建议基于当前数据（相关性）。
     + 浏览物品使用期限截止时间 - 指定自物品交互数据集中所有物品最近一次交互以来的最大物品使用期限（以天为单位）。这会根据物品使用期限定义物品浏览的范围。Amazon Personalize 根据物品的创建时间戳或物品交互数据（如果缺少创建时间戳数据）来确定物品使用期限。有关 Amazon Personalize 如何确定物品使用期限的更多信息，请参阅[创建时间戳数据](items-datasets.md#creation-timestamp-data)。

       要增加 Amazon Personalize 在浏览期间考虑的物品数量，请输入更大的值。最小值为 1 天，默认值为 30 天。建议可能包括比您指定的物品使用期限截止时间更早的物品。这是因为这些物品与用户相关，而浏览并未识别出它们。
   + 对于**标签**，可以选择添加任何标签。有关标记 Amazon Personalize 资源的更多信息，请参阅[为 Amazon Personalize 资源添加标签](tagging-resources.md)。

1. 要为您的每个使用案例创建推荐器，请选择**创建推荐器**。

   您可以在**推荐器**页面上，监控每个推荐器的状态。当推荐器状态为“活动”时，您可以在应用程序中使用它来获取建议。

## 创建推荐器（Amazon CLI）
<a name="create-recommender-cli"></a>

 使用以下 Amazon CLI 代码为域名用例创建推荐器。针对您的每个域使用案例运行此代码。对于 `recipeArn`，为您的使用案例提供 Amazon 资源名称 (ARN)。可用的使用案例取决于您的域。有关用例及其列表， ARNs 请参阅[选择使用案例](domain-use-cases.md)。

```
aws personalize create-recommender \
--name recommender name \
--dataset-group-arn dataset group ARN \
--recipe-arn recipe ARN
```

## 创建推荐器（Amazon SDKs）
<a name="create-recommender-sdk"></a>

使用以下代码为域使用案例创建推荐器。为推荐器命名，并提供域数据集组的 Amazon 资源名称 (ARN)。对于 `recipeArn`，为您的使用案例提供 ARN。针对您的每个域使用案例运行此代码。可用的使用案例取决于您的域。有关用例、用例及其 ARNs要求的列表，请参阅[选择使用案例](domain-use-cases.md)。

------
#### [ SDK for Python (Boto3) ]

```
import boto3

personalize = boto3.client('personalize')

create_recommender_response = personalize.create_recommender(
  name = 'recommender name',
  recipeArn = 'recipe ARN',
  datasetGroupArn = 'dataset group ARN'     
)

recommender_arn = create_recommender_response['recommenderArn']

print('Recommender ARN:' + recommender_arn)
```

------
#### [ SDK for Java 2.x ]

```
    public static String createRecommender(PersonalizeClient personalizeClient,
            String name,
            String datasetGroupArn,
            String recipeArn) {

        long maxTime = 0;
        long waitInMilliseconds = 30 * 1000; // 30 seconds
        String recommenderStatus = "";

        try {
            CreateRecommenderRequest createRecommenderRequest = CreateRecommenderRequest.builder()
                    .datasetGroupArn(datasetGroupArn)
                    .name(name)
                    .recipeArn(recipeArn)
                    .build();

            CreateRecommenderResponse recommenderResponse = personalizeClient
                    .createRecommender(createRecommenderRequest);
            String recommenderArn = recommenderResponse.recommenderArn();
            System.out.println("The recommender ARN is " + recommenderArn);

            DescribeRecommenderRequest describeRecommenderRequest = DescribeRecommenderRequest.builder()
                    .recommenderArn(recommenderArn)
                    .build();

            maxTime = Instant.now().getEpochSecond() + 3 * 60 * 60;

            while (Instant.now().getEpochSecond() < maxTime) {

                recommenderStatus = personalizeClient.describeRecommender(describeRecommenderRequest).recommender()
                        .status();
                System.out.println("Recommender status: " + recommenderStatus);

                if (recommenderStatus.equals("ACTIVE") || recommenderStatus.equals("CREATE FAILED")) {
                    break;
                }
                try {
                    Thread.sleep(waitInMilliseconds);
                } catch (InterruptedException e) {
                    System.out.println(e.getMessage());
                }
            }
            return recommenderArn;

        } catch (PersonalizeException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            System.exit(1);
        }
        return "";
    }
```

------
#### [ SDK for JavaScript v3 ]

```
// Get service clients and commands using ES6 syntax.
import { CreateRecommenderCommand, PersonalizeClient } from
  "@aws-sdk/client-personalize";

// create personalizeClient
const personalizeClient = new PersonalizeClient({
  region: "REGION"
});

// set the recommender's parameters
export const createRecommenderParam = {
  name: "RECOMMENDER_NAME",                    /* required */
  recipeArn: "RECIPE_ARN",                     /* required */
  datasetGroupArn: "DATASET_GROUP_ARN"         /* required */
}

export const run = async () => {
  try {
    const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam));
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

------