Quickstart: Personalizer client libraryQuickstart: Personalizer client library

Exiba conteúdo personalizado neste quickstart com o serviço Personalizer.Display personalized content in this quickstart with the Personalizer service.

Começar com a biblioteca de clientes Personalizer.Get started with the Personalizer client library. Siga estes passos para instalar a embalagem e experimente o código de exemplo para tarefas básicas.Follow these steps to install the package and try out the example code for basic tasks.

  • Rank API - Seleciona o melhor item, a partir de ações, com base em informações em tempo real que fornece sobre conteúdo e contexto.Rank API - Selects the best item, from actions, based on real-time information you provide about content and context.
  • Reward API - Determina a pontuação de recompensa com base nas necessidades do seu negócio e, em seguida, envie-a para personalizer com esta API.Reward API - You determine the reward score based on your business needs, then send it to Personalizer with this API. Essa pontuação pode ser um único valor, como 1 para o bem, e 0 para o mal, ou um algoritmo que crias com base nas necessidades do teu negócio.That score can be a single value such as 1 for good, and 0 for bad, or an algorithm you create based on your business needs.

Documentação de referência | Pacotede código fonte | da biblioteca(NuGet) | SamplesReference documentation | Library source code | Package (NuGet) | Samples

Pré-requisitosPrerequisites

Usando este arranque rápidoUsing this quickstart

Há vários passos para usar este arranque rápido:There are several steps to use this quickstart:

  • No portal Azure, crie um recurso PersonalizerIn the Azure portal, create a Personalizer resource
  • No portal Azure, para o recurso Personalizer, na página de Configuração, altere a frequência de atualização do modelo para um intervalo muito curtoIn the Azure portal, for the Personalizer resource, on the Configuration page, change the model update frequency to a very short interval
  • Num editor de código, crie um ficheiro de código e edite o ficheiro de códigoIn a code editor, create a code file and edit the code file
  • Na linha de comando ou terminal, instale o SDK a partir da linha de comandoIn the command line or terminal, install the SDK from the command line
  • Na linha de comando ou terminal, executar o ficheiro de códigoIn the command line or terminal, run the code file

Criar um recurso Personalizer AzureCreate a Personalizer Azure resource

Crie um recurso para personalizar utilizando o portal Azure ou o Azure CLI na sua máquina local.Create a resource for Personalizer using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

  • Obtenha uma chave de teste válida por 7 dias de graça.Get a trial key valid for 7 days for free. Depois de se inscrever, estará disponível no site do Azure.After signing up, it will be available on the Azure website.
  • Veja o seu recurso no portal Azure.View your resource on the Azure portal.

Depois de obter uma chave da sua subscrição ou recurso experimental, crie duas variáveis ambientais:After you get a key from your trial subscription or resource, create two environment variable:

  • PERSONALIZER_RESOURCE_KEYpara a chave de recursos.PERSONALIZER_RESOURCE_KEY for the resource key.
  • PERSONALIZER_RESOURCE_ENDPOINTpara o ponto final do recurso.PERSONALIZER_RESOURCE_ENDPOINT for the resource endpoint.

No portal Azure, tanto os valores chave como os valores finais estão disponíveis na página de arranque rápido.In the Azure portal, both the key and endpoint values are available from the quickstart page.

Alterar a frequência de atualização do modeloChange the model update frequency

No portal Azure, no recurso Personalizer na página de Configuração, altere a frequência de atualização do Modelo para 10 segundos.In the Azure portal, in the Personalizer resource on the Configuration page, change the Model update frequency to 10 seconds. Esta curta duração irá treinar o serviço rapidamente, permitindo-lhe ver como a ação de topo muda para cada iteração.This short duration will train the service rapidly, allowing you to see how the top action changes for each iteration.

Alterar a frequência de atualização do modelo

Quando um loop Personalizer é inicialmente instantâneo, não há modelo, uma vez que não houve chamadas Reward API para treinar.When a Personalizer loop is first instantiated, there is no model since there has been no Reward API calls to train from. As chamadas de classificação devolverão probabilidades iguais para cada item.Rank calls will return equal probabilities for each item. A sua aplicação deve ainda classificar sempre o conteúdo utilizando a saída do RewardActionId.Your application should still always rank content using the output of RewardActionId.

Criar uma nova aplicação C#Create a new C# application

Crie uma nova aplicação .NET Core no seu editor ou IDE preferido.Create a new .NET Core application in your preferred editor or IDE.

Numa janela de consola (como cmd, PowerShell ou Bash), utilize o comando dotnet new para criar uma nova aplicação de consola com o nome personalizer-quickstart.In a console window (such as cmd, PowerShell, or Bash), use the dotnet new command to create a new console app with the name personalizer-quickstart. Este comando cria um simples projeto C# "Hello Program.csWorld" com um único ficheiro de origem: .This command creates a simple "Hello World" C# project with a single source file: Program.cs.

dotnet new console -n personalizer-quickstart

Mude o seu diretório para a pasta de aplicações recém-criada.Change your directory to the newly created app folder. Pode construir a aplicação com:You can build the application with:

dotnet build

A saída de construção não deve conter avisos ou erros.The build output should contain no warnings or errors.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

Instalar o SDKInstall the SDK

Dentro do diretório de aplicações, instale a biblioteca de clientes Personalizer para .NET com o seguinte comando:Within the application directory, install the Personalizer client library for .NET with the following command:

dotnet add package Microsoft.Azure.CognitiveServices.Personalizer --version 0.8.0-preview

Se estiver a usar o Visual Studio IDE, a biblioteca de clientes está disponível como um pacote NuGet transferível.If you're using the Visual Studio IDE, the client library is available as a downloadable NuGet package.

Modelo de objetoObject model

O cliente Personalizer é um objeto PersonalizerClient que autentica o Azure usando o Microsoft.Rest.ServiceClientCredentials, que contém a sua chave.The Personalizer client is a PersonalizerClient object that authenticates to Azure using Microsoft.Rest.ServiceClientCredentials, which contains your key.

Para pedir o melhor item do conteúdo, crie um RankRequest,em seguida, passe-o para o cliente. Método de classificação.To ask for the single best item of the content, create a RankRequest, then pass it to client.Rank method. O método Rank devolve uma RankResponse.The Rank method returns a RankResponse.

Para enviar uma pontuação de recompensa ao Personalizer, crie um RewardRequeste, em seguida, passe-o para o cliente. Método de recompensa.To send a reward score to Personalizer, create a RewardRequest, then pass it to the client.Reward method.

Determinar a pontuação da recompensa, neste arranque rápido é trivial.Determining the reward score, in this quickstart is trivial. Num sistema produtivo, a determinação do que impacta a pontuação da recompensa e pelo quanto pode ser um processo complexo, que pode decidir mudar ao longo do tempo.In a production system, the determination of what impacts the reward score and by how much can be a complex process, that you may decide to change over time. Esta decisão de design deve ser uma das decisões primárias na sua arquitetura Personalizer.This design decision should be one of the primary decisions in your Personalizer architecture.

Exemplos de códigoCode examples

Estes fragmentos de código mostram-lhe como fazer as seguintes tarefas com a biblioteca de clientes Personalizer para .NET:These code snippets show you how to do the following tasks with the Personalizer client library for .NET:

Adicione as dependênciasAdd the dependencies

A partir do diretório do projeto, abra o ficheiro Program.cs no seu editor ou IDE preferido.From the project directory, open the Program.cs file in your preferred editor or IDE. Substitua o using código existente using pelas seguintes diretivas:Replace the existing using code with the following using directives:

using Microsoft.Azure.CognitiveServices.Personalizer;
using Microsoft.Azure.CognitiveServices.Personalizer.Models;
using System;
using System.Collections.Generic;
using System.Linq;

Adicionar informações de recursos personalizantesAdd Personalizer resource information

Na aula de Programa, crie variáveis para a chave Azure do seu PERSONALIZER_RESOURCE_KEY recurso PERSONALIZER_RESOURCE_ENDPOINTe ponto final retirado das variáveis ambientais, nomeadas e .In the Program class, create variables for your resource's Azure key and endpoint pulled from the environment variables, named PERSONALIZER_RESOURCE_KEY and PERSONALIZER_RESOURCE_ENDPOINT. Se criou as variáveis ambientais após o lançamento da aplicação, o editor, IDE ou shell running terá de ser fechado e recarregado para aceder à variável.If you created the environment variables after the application is launched, the editor, IDE, or shell running it will need to be closed and reloaded to access the variable. Os métodos serão criados mais tarde neste arranque rápido.The methods will be created later in this quickstart.

// The key specific to your personalizer resource instance; e.g. "0123456789abcdef0123456789ABCDEF"
private static readonly string ApiKey = Environment.GetEnvironmentVariable("PERSONALIZER_RESOURCE_KEY");

// The endpoint specific to your personalizer resource instance; e.g. https://westus2.api.cognitive.microsoft.com/
private static readonly string ServiceEndpoint = Environment.GetEnvironmentVariable("PERSONALIZER_RESOURCE_ENDPOINT");

Criar um cliente PersonalizerCreate a Personalizer client

Em seguida, crie um método para devolver um cliente Personalizer.Next, create a method to return a Personalizer client. O parâmetro para o PERSONALIZER_RESOURCE_ENDPOINT método é o e PERSONALIZER_RESOURCE_KEYo ApiKey é o .The parameter to the method is the PERSONALIZER_RESOURCE_ENDPOINT and the ApiKey is the PERSONALIZER_RESOURCE_KEY.

/// <summary>
/// Initializes the personalizer client.
/// </summary>
/// <param name="url">Azure endpoint</param>
/// <returns>Personalizer client instance</returns>
static PersonalizerClient InitializePersonalizerClient(string url)
{
    PersonalizerClient client = new PersonalizerClient(
        new ApiKeyServiceClientCredentials(ApiKey)) { Endpoint = url };

    return client;
}

Obtenha itens alimentares como ações de classificaçãoGet food items as rankable actions

As ações representam as escolhas de conteúdo a partir das quais pretende que o Personalizer selecione o melhor item de conteúdo.Actions represent the content choices from which you want Personalizer to select the best content item. Adicione os seguintes métodos à classe Programa para representar o conjunto de ações e suas funcionalidades.Add the following methods to the Program class to represent the set of actions and their features.

/// <summary>
/// Creates personalizer actions feature list.
/// </summary>
/// <returns>List of actions for personalizer.</returns>
static IList<RankableAction> GetActions()
{
    IList<RankableAction> actions = new List<RankableAction>
    {
        new RankableAction
        {
            Id = "pasta",
            Features =
            new List<object>() { new { taste = "salty", spiceLevel = "medium" }, new { nutritionLevel = 5, cuisine = "italian" } }
        },

        new RankableAction
        {
            Id = "ice cream",
            Features =
            new List<object>() { new { taste = "sweet", spiceLevel = "none" }, new { nutritionalLevel = 2 } }
        },

        new RankableAction
        {
            Id = "juice",
            Features =
            new List<object>() { new { taste = "sweet", spiceLevel = "none" }, new { nutritionLevel = 5 }, new { drink = true } }
        },

        new RankableAction
        {
            Id = "salad",
            Features =
            new List<object>() { new { taste = "salty", spiceLevel = "low" }, new { nutritionLevel = 8 } }
        }
    };

    return actions;
}

Obtenha preferências de utilizador para contextoGet user preferences for context

Adicione os seguintes métodos à classe Programa para obter a entrada de um utilizador da linha de comando para a hora do dia e a preferência alimentar atual.Add the following methods to the Program class to get a user's input from the command line for the time of day and current food preference. Estes serão usados como características de contexto.These will be used as context features.

/// <summary>
/// Get users time of the day context.
/// </summary>
/// <returns>Time of day feature selected by the user.</returns>
static string GetUsersTimeOfDay()
{
    string[] timeOfDayFeatures = new string[] { "morning", "afternoon", "evening", "night" };

    Console.WriteLine("\nWhat time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night");
    if (!int.TryParse(GetKey(), out int timeIndex) || timeIndex < 1 || timeIndex > timeOfDayFeatures.Length)
    {
        Console.WriteLine("\nEntered value is invalid. Setting feature value to " + timeOfDayFeatures[0] + ".");
        timeIndex = 1;
    }

    return timeOfDayFeatures[timeIndex - 1];
}
/// <summary>
/// Gets user food preference.
/// </summary>
/// <returns>Food taste feature selected by the user.</returns>
static string GetUsersTastePreference()
{
    string[] tasteFeatures = new string[] { "salty", "sweet" };

    Console.WriteLine("\nWhat type of food would you prefer (enter number)? 1. salty 2. sweet");
    if (!int.TryParse(GetKey(), out int tasteIndex) || tasteIndex < 1 || tasteIndex > tasteFeatures.Length)
    {
        Console.WriteLine("\nEntered value is invalid. Setting feature value to " + tasteFeatures[0] + ".");
        tasteIndex = 1;
    }

    return tasteFeatures[tasteIndex - 1];
}

Ambos os GetKey métodos utilizam o método para ler a seleção do utilizador a partir da linha de comando.Both methods use the GetKey method to read the user's selection from the command line.

private static string GetKey()
{
    return Console.ReadKey().Key.ToString().Last().ToString().ToUpper();
}

Criar o ciclo de aprendizagemCreate the learning loop

O ciclo de aprendizagem personalizer é um ciclo de chamadas De Rank e Reward.The Personalizer learning loop is a cycle of Rank and Reward calls. Neste arranque rápido, cada chamada de Rank, para personalizar o conteúdo, é seguida por uma chamada de Recompensa para dizer ao Personalizer o quão bem o serviço foi executado.In this quickstart, each Rank call, to personalize the content, is followed by a Reward call to tell Personalizer how well the service performed.

O código seguinte passa por um ciclo de pedir ao utilizador as suas preferências na linha de comando, enviando essa informação ao Personalizer para selecionar a melhor ação, apresentando a seleção ao cliente para escolher entre a lista, enviando depois uma pontuação de recompensa ao Personalizer sinalizando o quão bem o serviço fez na sua seleção.The following code loops through a cycle of asking the user their preferences at the command line, sending that information to Personalizer to select the best action, presenting the selection to the customer to choose from among the list, then sending a reward score to Personalizer signaling how well the service did in its selection.

static void Main(string[] args)
{
    int iteration = 1;
    bool runLoop = true;

    // Get the actions list to choose from personalizer with their features.
    IList<RankableAction> actions = GetActions();

    // Initialize Personalizer client.
    PersonalizerClient client = InitializePersonalizerClient(ServiceEndpoint);

    do
    {
        Console.WriteLine("\nIteration: " + iteration++);

        // Get context information from the user.
        string timeOfDayFeature = GetUsersTimeOfDay();
        string tasteFeature = GetUsersTastePreference();

        // Create current context from user specified data.
        IList<object> currentContext = new List<object>() {
            new { time = timeOfDayFeature },
            new { taste = tasteFeature }
        };

        // Exclude an action for personalizer ranking. This action will be held at its current position.
        // This simulates a business rule to force the action "juice" to be ignored in the ranking.
        // As juice is excluded, the return of the API will always be with a probability of 0.
        IList<string> excludeActions = new List<string> { "juice" };

        // Generate an ID to associate with the request.
        string eventId = Guid.NewGuid().ToString();

        // Rank the actions
        var request = new RankRequest(actions, currentContext, excludeActions, eventId);
        RankResponse response = client.Rank(request);

        Console.WriteLine("\nPersonalizer service thinks you would like to have: " + response.RewardActionId + ". Is this correct? (y/n)");

        float reward = 0.0f;
        string answer = GetKey();

        if (answer == "Y")
        {
            reward = 1;
            Console.WriteLine("\nGreat! Enjoy your food.");
        }
        else if (answer == "N")
        {
            reward = 0;
            Console.WriteLine("\nYou didn't like the recommended food choice.");
        }
        else
        {
            Console.WriteLine("\nEntered choice is invalid. Service assumes that you didn't like the recommended food choice.");
        }

        Console.WriteLine("\nPersonalizer service ranked the actions with the probabilities as below:");
        foreach (var rankedResponse in response.Ranking)
        {
            Console.WriteLine(rankedResponse.Id + " " + rankedResponse.Probability);
        }

        // Send the reward for the action based on user response.
        client.Reward(response.EventId, new RewardRequest(reward));

        Console.WriteLine("\nPress q to break, any other key to continue:");
        runLoop = !(GetKey() == "Q");

    } while (runLoop);
}

Adicione os seguintes métodos, que obtêm as escolhas de conteúdo,antes de executar o ficheiro de código:Add the following methods, which get the content choices, before running the code file:

  • GetActions
  • GetUsersTimeOfDay
  • GetUsersTastePreference
  • GetKey

Solicite a melhor açãoRequest the best action

Para completar o pedido de Rank, o programa pede currentContent às preferências do utilizador para criar uma das escolhas de conteúdo.To complete the Rank request, the program asks the user's preferences to create a currentContent of the content choices. O processo pode criar conteúdo para excluir excludeActionsdas ações, mostradas como .The process can create content to exclude from the actions, shown as excludeActions. O pedido de Rank necessita das ações e suas funcionalidades, funcionalidades atuais Contexto, exclusão DeAções e um ID de evento único, para receber a resposta.The Rank request needs the actions and their features, currentContext features, excludeActions, and a unique event ID, to receive the response.

Este quickstart tem características de contexto simples de hora do dia e preferência alimentar do utilizador.This quickstart has simple context features of time of day and user food preference. Nos sistemas de produção, determinar e avaliar ações e funcionalidades pode ser uma questão não trivial.In production systems, determining and evaluating actions and features can be a non-trivial matter.

// Get context information from the user.
string timeOfDayFeature = GetUsersTimeOfDay();
string tasteFeature = GetUsersTastePreference();

// Create current context from user specified data.
IList<object> currentContext = new List<object>() {
    new { time = timeOfDayFeature },
    new { taste = tasteFeature }
};

// Exclude an action for personalizer ranking. This action will be held at its current position.
// This simulates a business rule to force the action "juice" to be ignored in the ranking.
// As juice is excluded, the return of the API will always be with a probability of 0.
IList<string> excludeActions = new List<string> { "juice" };

// Generate an ID to associate with the request.
string eventId = Guid.NewGuid().ToString();

// Rank the actions
var request = new RankRequest(actions, currentContext, excludeActions, eventId);
RankResponse response = client.Rank(request);

Enviar uma recompensaSend a reward

Para obter a pontuação de recompensa para enviar o pedido de Recompensa, o programa obtém a seleção do utilizador da linha de comando, atribui um valor numérico à seleção, em seguida, envia o ID de evento único e a pontuação de recompensa como o valor numérico para a API recompensa.To get the reward score to send in the Reward request, the program gets the user's selection from the command line, assigns a numeric value to the selection, then sends the unique event ID and the reward score as the numeric value to the Reward API.

Este quickstart atribui um número simples como uma pontuação de recompensa, um zero ou um 1.This quickstart assigns a simple number as a reward score, either a zero or a 1. Nos sistemas de produção, determinar quando e o que enviar para a chamada Reward pode ser uma questão não trivial, dependendo das suas necessidades específicas.In production systems, determining when and what to send to the Reward call can be a non-trivial matter, depending on your specific needs.

float reward = 0.0f;
string answer = GetKey();

if (answer == "Y")
{
    reward = 1;
    Console.WriteLine("\nGreat! Enjoy your food.");
}
else if (answer == "N")
{
    reward = 0;
    Console.WriteLine("\nYou didn't like the recommended food choice.");
}
else
{
    Console.WriteLine("\nEntered choice is invalid. Service assumes that you didn't like the recommended food choice.");
}

Console.WriteLine("\nPersonalizer service ranked the actions with the probabilities as below:");
foreach (var rankedResponse in response.Ranking)
{
    Console.WriteLine(rankedResponse.Id + " " + rankedResponse.Probability);
}

// Send the reward for the action based on user response.
client.Reward(response.EventId, new RewardRequest(reward));

Execute o programaRun the program

Execute a aplicação run com o comando dotnet a partir do seu diretório de aplicações.Run the application with the dotnet run command from your application directory.

dotnet run

O programa quickstart faz algumas perguntas para reunir as preferências dos utilizadores, conhecidas como funcionalidades, e depois fornece a ação de topo.

O código fonte para este arranque rápido está disponível no repositório de amostras De Personaler GitHub.The source code for this quickstart is available in the Personalizer samples GitHub repository.

Documentação de referência |Biblioteca Código fonte | Pacote (NPM) | AmostrasReference documentation |Library source code | Package (NPM) | Samples

Pré-requisitosPrerequisites

Usando este arranque rápidoUsing this quickstart

Há vários passos para usar este arranque rápido:There are several steps to use this quickstart:

  • No portal Azure, crie um recurso PersonalizerIn the Azure portal, create a Personalizer resource
  • No portal Azure, para o recurso Personalizer, na página de Configuração, altere a frequência de atualização do modelo para um intervalo muito curtoIn the Azure portal, for the Personalizer resource, on the Configuration page, change the model update frequency to a very short interval
  • Num editor de código, crie um ficheiro de código e edite o ficheiro de códigoIn a code editor, create a code file and edit the code file
  • Na linha de comando ou terminal, instale o SDK a partir da linha de comandoIn the command line or terminal, install the SDK from the command line
  • Na linha de comando ou terminal, executar o ficheiro de códigoIn the command line or terminal, run the code file

Criar um recurso Personalizer AzureCreate a Personalizer Azure resource

Crie um recurso para personalizar utilizando o portal Azure ou o Azure CLI na sua máquina local.Create a resource for Personalizer using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

  • Obtenha uma chave de teste válida por 7 dias de graça.Get a trial key valid for 7 days for free. Depois de se inscrever, estará disponível no site do Azure.After signing up, it will be available on the Azure website.
  • Veja o seu recurso no portal Azure.View your resource on the Azure portal.

Depois de obter uma chave da sua subscrição ou recurso experimental, crie duas variáveis ambientais:After you get a key from your trial subscription or resource, create two environment variable:

  • PERSONALIZER_RESOURCE_KEYpara a chave de recursos.PERSONALIZER_RESOURCE_KEY for the resource key.
  • PERSONALIZER_RESOURCE_ENDPOINTpara o ponto final do recurso.PERSONALIZER_RESOURCE_ENDPOINT for the resource endpoint.

No portal Azure, tanto os valores chave como os valores finais estão disponíveis na página de arranque rápido.In the Azure portal, both the key and endpoint values are available from the quickstart page.

Alterar a frequência de atualização do modeloChange the model update frequency

No portal Azure, no recurso Personalizer na página de Configuração, altere a frequência de atualização do Modelo para 10 segundos.In the Azure portal, in the Personalizer resource on the Configuration page, change the Model update frequency to 10 seconds. Esta curta duração irá treinar o serviço rapidamente, permitindo-lhe ver como a ação de topo muda para cada iteração.This short duration will train the service rapidly, allowing you to see how the top action changes for each iteration.

Alterar a frequência de atualização do modelo

Quando um loop Personalizer é inicialmente instantâneo, não há modelo, uma vez que não houve chamadas Reward API para treinar.When a Personalizer loop is first instantiated, there is no model since there has been no Reward API calls to train from. As chamadas de classificação devolverão probabilidades iguais para cada item.Rank calls will return equal probabilities for each item. A sua aplicação deve ainda classificar sempre o conteúdo utilizando a saída do RewardActionId.Your application should still always rank content using the output of RewardActionId.

Criar uma nova aplicação Node.jsCreate a new Node.js application

Numa janela de consola (como cmd, PowerShell ou Bash), crie um novo diretório para a sua aplicação e navegue para ela.In a console window (such as cmd, PowerShell, or Bash), create a new directory for your app, and navigate to it.

mkdir myapp && cd myapp

Executar npm init -y o comando package.json para criar um ficheiro.Run the npm init -y command to create a package.json file.

npm init -y

Instale a biblioteca Node.js para PersonalizarInstall the Node.js library for Personalizer

Instale a biblioteca de clientes Personalizer para Node.js com o seguinte comando:Install the Personalizer client library for Node.js with the following command:

npm install @azure/cognitiveservices-personalizer --save

Instale os restantes pacotes NPM para este arranque rápido:Install the remaining NPM packages for this quickstart:

npm install @azure/ms-rest-azure-js @azure/ms-rest-js readline-sync uuid --save

Modelo de objetoObject model

O cliente Personalizer é um objeto PersonalizerClient que autentica o Azure usando o Microsoft.Rest.ServiceClientCredentials, que contém a sua chave.The Personalizer client is a PersonalizerClient object that authenticates to Azure using Microsoft.Rest.ServiceClientCredentials, which contains your key.

Para pedir o melhor item do conteúdo, crie um RankRequest,em seguida, passe-o para o cliente. Método de classificação.To ask for the single best item of the content, create a RankRequest, then pass it to client.Rank method. O método Rank devolve uma RankResponse.The Rank method returns a RankResponse.

Para enviar uma recompensa ao Personalizer, crie um RewardRequest,em seguida, passe-o para o método Reward na classe Eventos.To send a reward to Personalizer, create a RewardRequest, then pass it to the Reward method on the Events class.

Determinar a recompensa, neste arranque rápido é trivial.Determining the reward, in this quickstart is trivial. Num sistema produtivo, a determinação do que impacta a pontuação da recompensa e pelo quanto pode ser um processo complexo, que pode decidir mudar ao longo do tempo.In a production system, the determination of what impacts the reward score and by how much can be a complex process, that you may decide to change over time. Esta deve ser uma das principais decisões de design na sua arquitetura Personalizer.This should be one of the primary design decisions in your Personalizer architecture.

Exemplos de códigoCode examples

Estes fragmentos de código mostram-lhe como fazer o seguinte com a biblioteca de clientes Personalizer para Node.js:These code snippets show you how to do the following with the Personalizer client library for Node.js:

Criar uma nova aplicação Node.jsCreate a new Node.js application

Crie uma nova aplicação Node.js no sample.jsseu editor preferido ou IDE nomeado.Create a new Node.js application in your preferred editor or IDE named sample.js.

Adicione as dependênciasAdd the dependencies

Abra o ficheiro sample.js no seu editor preferido ou IDE.Open the sample.js file in your preferred editor or IDE. Adicione o requires seguinte para adicionar os pacotes NPM:Add the following requires to add the NPM packages:

const uuidv1 = require('uuid/v1');
const Personalizer = require('@azure/cognitiveservices-personalizer');
const CognitiveServicesCredentials = require('@azure/ms-rest-azure-js').CognitiveServicesCredentials;
const readline = require('readline-sync');

Adicionar informações de recursos personalizantesAdd Personalizer resource information

Crie variáveis para a chave Azure do seu recurso e PERSONALIZER_KEY ponto PERSONALIZER_ENDPOINTfinal retirado das variáveis ambientais, nomeadas e .Create variables for your resource's Azure key and endpoint pulled from the environment variables, named PERSONALIZER_KEY and PERSONALIZER_ENDPOINT. Se criou as variáveis ambientais após o lançamento da aplicação, o editor, IDE ou shell running terá de ser fechado e recarregado para aceder à variável.If you created the environment variables after the application is launched, the editor, IDE, or shell running it will need to be closed and reloaded to access the variable. Os métodos serão criados mais tarde neste arranque rápido.The methods will be created later in this quickstart.

// The key specific to your personalization service instance; e.g. "0123456789abcdef0123456789ABCDEF"
let serviceKey = process.env.PERSONALIZER_KEY;

// The endpoint specific to your personalization service instance; 
// e.g. https://westus2.api.cognitive.microsoft.com
let baseUri = process.env.PERSONALIZER_ENDPOINT;

Criar um cliente PersonalizerCreate a Personalizer client

Em seguida, crie um método para devolver um cliente Personalizer.Next, create a method to return a Personalizer client. O parâmetro para o PERSONALIZER_RESOURCE_ENDPOINT método é o e PERSONALIZER_RESOURCE_KEYo ApiKey é o .The parameter to the method is the PERSONALIZER_RESOURCE_ENDPOINT and the ApiKey is the PERSONALIZER_RESOURCE_KEY.

let credentials = new CognitiveServicesCredentials(serviceKey);

// Initialize Personalization client.
let personalizerClient = new Personalizer.PersonalizerClient(credentials, baseUri);

Obtenha escolhas de conteúdo representadas como açõesGet content choices represented as actions

As ações representam as escolhas de conteúdo a partir das quais pretende que o Personalizer selecione o melhor item de conteúdo.Actions represent the content choices from which you want Personalizer to select the best content item. Adicione os seguintes métodos à classe Programa para representar o conjunto de ações e suas funcionalidades.Add the following methods to the Program class to represent the set of actions and their features.

function getContextFeaturesList() {
  var timeOfDayFeatures = ['morning', 'afternoon', 'evening', 'night'];
  var tasteFeatures = ['salty', 'sweet'];

  var answer = readline.question("\nWhat time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night\n");
  var selection = parseInt(answer);
  var timeOfDay = selection >= 1 && selection <= 4 ? timeOfDayFeatures[selection - 1] : timeOfDayFeatures[0];

  answer = readline.question("\nWhat type of food would you prefer (enter number)? 1. salty 2. sweet\n");
  selection = parseInt(answer);
  var taste = selection >= 1 && selection <= 2 ? tasteFeatures[selection - 1] : tasteFeatures[0];

  console.log("Selected features:\n");
  console.log("Time of day: " + timeOfDay + "\n");
  console.log("Taste: " + taste + "\n");

  return [
    {
      "time": timeOfDay
    },
    {
      "taste": taste
    }
  ];
}
function getActionsList() {
  return [
    {
      "id": "pasta",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "medium"
        },
        {
          "nutritionLevel": 5,
          "cuisine": "italian"
        }
      ]
    },
    {
      "id": "ice cream",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none"
        },
        {
          "nutritionalLevel": 2
        }
      ]
    },
    {
      "id": "juice",
      "features": [
        {
          "taste": "sweet",
          "spiceLevel": "none"
        },
        {
          "nutritionLevel": 5
        },
        {
          "drink": true
        }
      ]
    },
    {
      "id": "salad",
      "features": [
        {
          "taste": "salty",
          "spiceLevel": "low"
        },
        {
          "nutritionLevel": 8
        }
      ]
    }
  ];
}

Criar o ciclo de aprendizagemCreate the learning loop

O ciclo de aprendizagem personalizer é um ciclo de chamadas De Rank e Reward.The Personalizer learning loop is a cycle of Rank and Reward calls. Neste arranque rápido, cada chamada de Rank, para personalizar o conteúdo, é seguida por uma chamada de Recompensa para dizer ao Personalizer o quão bem o serviço foi executado.In this quickstart, each Rank call, to personalize the content, is followed by a Reward call to tell Personalizer how well the service performed.

O código seguinte passa por um ciclo de pedir ao utilizador as suas preferências na linha de comando, enviando essa informação ao Personalizer para selecionar a melhor ação, apresentando a seleção ao cliente para escolher entre a lista, enviando depois uma recompensa ao Personalizer sinalizando o quão bem o serviço fez na sua seleção.The following code loops through a cycle of asking the user their preferences at the command line, sending that information to Personalizer to select the best action, presenting the selection to the customer to choose from among the list, then sending a reward to Personalizer signaling how well the service did in its selection.

let runLoop = true;

do {

  let rankRequest = {}

  // Generate an ID to associate with the request.
  rankRequest.eventId = uuidv1();

  // Get context information from the user.
  rankRequest.contextFeatures = getContextFeaturesList();

  // Get the actions list to choose from personalization with their features.
  rankRequest.actions = getActionsList();

  // Exclude an action for personalization ranking. This action will be held at its current position.
  rankRequest.excludedActions = getExcludedActionsList();

  rankRequest.deferActivation = false;

  // Rank the actions
  let rankResponse = await personalizerClient.rank(rankRequest);

  console.log("\nPersonalization service thinks you would like to have:\n")
  console.log(rankResponse.rewardActionId);

  // Display top choice to user, user agrees or disagrees with top choice
  let reward = getReward();

  console.log("\nPersonalization service ranked the actions with the probabilities as below:\n");
  for (var i = 0; i < rankResponse.ranking.length; i++) {
    console.log(JSON.stringify(rankResponse.ranking[i]) + "\n");
  }

  // Send the reward for the action based on user response.

  let rewardRequest = {
    value: reward
  }

  await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);

  runLoop = continueLoop();

} while (runLoop);

Veja mais de perto as chamadas de classificação e recompensa nas seguintes secções.Take a closer look at the rank and reward calls in the following sections.

Adicione os seguintes métodos, que obtêm as escolhas de conteúdo,antes de executar o ficheiro de código:Add the following methods, which get the content choices, before running the code file:

  • getActionsListgetActionsList
  • getContextFeaturesListgetContextFeaturesList

Solicite a melhor açãoRequest the best action

Para completar o pedido de Rank, o programa pede às preferências do utilizador para criar escolhas de conteúdo.To complete the Rank request, the program asks the user's preferences to create content choices. O processo pode criar conteúdo para excluir excludeActionsdas ações, mostradas como .The process can create content to exclude from the actions, shown as excludeActions. O pedido de Rank necessita das ações e suas funcionalidades, funcionalidades atuais Contexto, exclusãoDeAções e um ID de evento de classificação único, para receber a resposta classificada.The Rank request needs the actions and their features, currentContext features, excludeActions, and a unique rank event ID, to receive the ranked response.

Este quickstart tem características de contexto simples de hora do dia e preferência alimentar do utilizador.This quickstart has simple context features of time of day and user food preference. Nos sistemas de produção, determinar e avaliar ações e funcionalidades pode ser uma questão não trivial.In production systems, determining and evaluating actions and features can be a non-trivial matter.

let rankRequest = {}

// Generate an ID to associate with the request.
rankRequest.eventId = uuidv1();

// Get context information from the user.
rankRequest.contextFeatures = getContextFeaturesList();

// Get the actions list to choose from personalization with their features.
rankRequest.actions = getActionsList();

// Exclude an action for personalization ranking. This action will be held at its current position.
rankRequest.excludedActions = getExcludedActionsList();

rankRequest.deferActivation = false;

// Rank the actions
let rankResponse = await personalizerClient.rank(rankRequest);

Enviar uma recompensaSend a reward

Para obter a pontuação de recompensa para enviar o pedido de Recompensa, o programa obtém a seleção do utilizador da linha de comando, atribui um valor numérico à seleção, em seguida, envia o ID de evento único e a pontuação de recompensa como o valor numérico para a API recompensa.To get the reward score to send in the Reward request, the program gets the user's selection from the command line, assigns a numeric value to the selection, then sends the unique event ID and the reward score as the numeric value to the Reward API.

Este quickstart atribui um número simples como uma pontuação de recompensa, um zero ou um 1.This quickstart assigns a simple number as a reward score, either a zero or a 1. Nos sistemas de produção, determinar quando e o que enviar para a chamada Reward pode ser uma questão não trivial, dependendo das suas necessidades específicas.In production systems, determining when and what to send to the Reward call can be a non-trivial matter, depending on your specific needs.

let rewardRequest = {
  value: reward
}

await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);

Execute o programaRun the program

Execute a aplicação com o Node.js do seu diretório de candidaturas.Run the application with the Node.js from your application directory.

node sample.js

O programa quickstart faz algumas perguntas para reunir as preferências dos utilizadores, conhecidas como funcionalidades, e depois fornece a ação de topo.

Documentação de referência | Pacotede código fonte | da biblioteca(pipi) | SamplesReference documentation | Library source code | Package (pypi) | Samples

Pré-requisitosPrerequisites

Usando este arranque rápidoUsing this quickstart

Há vários passos para usar este arranque rápido:There are several steps to use this quickstart:

  • No portal Azure, crie um recurso PersonalizerIn the Azure portal, create a Personalizer resource
  • No portal Azure, para o recurso Personalizer, na página de Configuração, altere a frequência de atualização do modelo para um intervalo muito curtoIn the Azure portal, for the Personalizer resource, on the Configuration page, change the model update frequency to a very short interval
  • Num editor de código, crie um ficheiro de código e edite o ficheiro de códigoIn a code editor, create a code file and edit the code file
  • Na linha de comando ou terminal, instale o SDK a partir da linha de comandoIn the command line or terminal, install the SDK from the command line
  • Na linha de comando ou terminal, executar o ficheiro de códigoIn the command line or terminal, run the code file

Criar um recurso Personalizer AzureCreate a Personalizer Azure resource

Crie um recurso para personalizar utilizando o portal Azure ou o Azure CLI na sua máquina local.Create a resource for Personalizer using the Azure portal or Azure CLI on your local machine. Também pode:You can also:

  • Obtenha uma chave de teste válida por 7 dias de graça.Get a trial key valid for 7 days for free. Depois de se inscrever, estará disponível no site do Azure.After signing up, it will be available on the Azure website.
  • Veja o seu recurso no portal Azure.View your resource on the Azure portal.

Depois de obter uma chave da sua subscrição ou recurso experimental, crie duas variáveis ambientais:After you get a key from your trial subscription or resource, create two environment variable:

  • PERSONALIZER_RESOURCE_KEYpara a chave de recursos.PERSONALIZER_RESOURCE_KEY for the resource key.
  • PERSONALIZER_RESOURCE_ENDPOINTpara o ponto final do recurso.PERSONALIZER_RESOURCE_ENDPOINT for the resource endpoint.

No portal Azure, tanto os valores chave como os valores finais estão disponíveis na página de arranque rápido.In the Azure portal, both the key and endpoint values are available from the quickstart page.

Alterar a frequência de atualização do modeloChange the model update frequency

No portal Azure, no recurso Personalizer na página de Configuração, altere a frequência de atualização do Modelo para 10 segundos.In the Azure portal, in the Personalizer resource on the Configuration page, change the Model update frequency to 10 seconds. Esta curta duração irá treinar o serviço rapidamente, permitindo-lhe ver como a ação de topo muda para cada iteração.This short duration will train the service rapidly, allowing you to see how the top action changes for each iteration.

Alterar a frequência de atualização do modelo

Quando um loop Personalizer é inicialmente instantâneo, não há modelo, uma vez que não houve chamadas Reward API para treinar.When a Personalizer loop is first instantiated, there is no model since there has been no Reward API calls to train from. As chamadas de classificação devolverão probabilidades iguais para cada item.Rank calls will return equal probabilities for each item. A sua aplicação deve ainda classificar sempre o conteúdo utilizando a saída do RewardActionId.Your application should still always rank content using the output of RewardActionId.

Instale a biblioteca Python para PersonalizarInstall the Python library for Personalizer

Instale a biblioteca cliente Personalizer para Python com o seguinte comando:Install the Personalizer client library for Python with the following command:

pip install azure-cognitiveservices-personalizer

Modelo de objetoObject model

O cliente Personalizer é um objeto PersonalizerClient que autentica o Azure usando o Microsoft.Rest.ServiceClientCredentials, que contém a sua chave.The Personalizer client is a PersonalizerClient object that authenticates to Azure using Microsoft.Rest.ServiceClientCredentials, which contains your key.

Para pedir o melhor item do conteúdo, crie um RankRequest,em seguida, passe-o para o cliente. Método de classificação.To ask for the single best item of the content, create a RankRequest, then pass it to client.Rank method. O método Rank devolve uma RankResponse.The Rank method returns a RankResponse.

Para enviar uma pontuação de recompensa ao Personalizer, detete o ID do evento e a pontuação de recompensa (valor) para enviar para o método Reward na classe EventOperations.To send a reward score to Personalizer, set the event ID and the reward score (value) to send to the Reward method on the EventOperations class.

Determinar a recompensa, neste arranque rápido é trivial.Determining the reward, in this quickstart is trivial. Num sistema produtivo, a determinação do que impacta a pontuação da recompensa e pelo quanto pode ser um processo complexo, que pode decidir mudar ao longo do tempo.In a production system, the determination of what impacts the reward score and by how much can be a complex process, that you may decide to change over time. Esta deve ser uma das principais decisões de design na sua arquitetura Personalizer.This should be one of the primary design decisions in your Personalizer architecture.

Exemplos de códigoCode examples

Estes fragmentos de código mostram-lhe como fazer o seguinte com a biblioteca de clientes Personalizer para Python:These code snippets show you how to do the following with the Personalizer client library for Python:

Criar uma nova aplicação pythonCreate a new python application

Crie uma nova aplicação Python no sample.pyseu editor preferido ou IDE nomeado.Create a new Python application in your preferred editor or IDE named sample.py.

Adicione as dependênciasAdd the dependencies

A partir do diretório do projeto, abra o ficheiro sample.py no seu editor ou IDE preferido.From the project directory, open the sample.py file in your preferred editor or IDE. Adicione o seguinte:Add the following:

from azure.cognitiveservices.personalizer import PersonalizerClient
from azure.cognitiveservices.personalizer.models import RankableAction, RewardRequest, RankRequest
from msrest.authentication import CognitiveServicesCredentials

import datetime, json, os, time, uuid

Adicionar informações de recursos personalizantesAdd Personalizer resource information

Crie variáveis para a chave Azure do seu recurso e PERSONALIZER_RESOURCE_KEY ponto PERSONALIZER_RESOURCE_ENDPOINTfinal retirado das variáveis ambientais, nomeadas e .Create variables for your resource's Azure key and endpoint pulled from the environment variables, named PERSONALIZER_RESOURCE_KEY and PERSONALIZER_RESOURCE_ENDPOINT. Se criou as variáveis ambientais após o lançamento da aplicação, o editor, IDE ou shell running terá de ser fechado e recarregado para aceder à variável.If you created the environment variables after the application is launched, the editor, IDE, or shell running it will need to be closed and reloaded to access the variable. Os métodos serão criados mais tarde neste arranque rápido.The methods will be created later in this quickstart.

O nome do recurso faz parte https://<your-resource-name>.api.cognitive.microsoft.com/do URL do ponto final: .The resource name is part of the endpoint URL: https://<your-resource-name>.api.cognitive.microsoft.com/.

key_var_name = 'PERSONALIZER_KEY'
if not key_var_name in os.environ:
    raise Exception('Please set/export the environment variable: {}'.format(key_var_name))
personalizer_key = os.environ[key_var_name]

# Replace <your-resource-name>: https://<your-resource-name>.api.cognitive.microsoft.com/
endpoint_var_name = 'PERSONALIZER_ENDPOINT'
if not endpoint_var_name in os.environ:
    raise Exception('Please set/export the environment variable: {}'.format(endpoint_var_name))
personalizer_endpoint = os.environ[endpoint_var_name]

Criar um cliente PersonalizerCreate a Personalizer client

Em seguida, crie um método para devolver um cliente Personalizer.Next, create a method to return a Personalizer client. O parâmetro para o PERSONALIZER_RESOURCE_ENDPOINT método é o e PERSONALIZER_RESOURCE_KEYo ApiKey é o .The parameter to the method is the PERSONALIZER_RESOURCE_ENDPOINT and the ApiKey is the PERSONALIZER_RESOURCE_KEY.

# Instantiate a Personalizer client
client = PersonalizerClient(personalizer_endpoint, CognitiveServicesCredentials(personalizer_key))

Obtenha escolhas de conteúdo representadas como açõesGet content choices represented as actions

As ações representam as escolhas de conteúdo a partir das quais pretende que o Personalizer selecione o melhor item de conteúdo.Actions represent the content choices from which you want Personalizer to select the best content item. Adicione os seguintes métodos à classe Programa para representar o conjunto de ações e suas funcionalidades.Add the following methods to the Program class to represent the set of actions and their features.

def get_actions():
    action1 = RankableAction(id='pasta', features=[{"taste":"salty", "spice_level":"medium"},{"nutrition_level":5,"cuisine":"italian"}])
    action2 = RankableAction(id='ice cream', features=[{"taste":"sweet", "spice_level":"none"}, { "nutritional_level": 2 }])
    action3 = RankableAction(id='juice', features=[{"taste":"sweet", 'spice_level':'none'}, {'nutritional_level': 5}, {'drink':True}])
    action4 = RankableAction(id='salad', features=[{'taste':'salty', 'spice_level':'none'},{'nutritional_level': 2}])
    return [action1, action2, action3, action4]
def get_user_timeofday():
    res={}
    time_features = ["morning", "afternoon", "evening", "night"]
    time = input("What time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night\n")
    try:
        ptime = int(time)
        if(ptime<=0 or ptime>len(time_features)):
            raise IndexError
        res['time_of_day'] = time_features[ptime-1]
    except (ValueError, IndexError):
        print("Entered value is invalid. Setting feature value to", time_features[0] + ".")
        res['time_of_day'] = time_features[0]
    return res
def get_user_preference():
    res = {}
    taste_features = ['salty','sweet']
    pref = input("What type of food would you prefer? Enter number 1.salty 2.sweet\n")
    
    try:
        ppref = int(pref)
        if(ppref<=0 or ppref>len(taste_features)):
            raise IndexError
        res['taste_preference'] = taste_features[ppref-1]
    except (ValueError, IndexError):
        print("Entered value is invalid. Setting feature value to", taste_features[0]+ ".")
        res['taste_preference'] = taste_features[0]
    return res

Criar o ciclo de aprendizagemCreate the learning loop

O ciclo de aprendizagem personalizer é um ciclo de chamadas De Rank e Reward.The Personalizer learning loop is a cycle of Rank and Reward calls. Neste arranque rápido, cada chamada de classificação, para personalizar o conteúdo, é seguida por uma chamada de recompensa para dizer ao Personalizer o quão bem o serviço foi executado.In this quickstart, each rank call, to personalize the content, is followed by a reward call to tell Personalizer how well the service performed.

O código seguinte passa por um ciclo de pedir ao utilizador as suas preferências na linha de comando, enviando essa informação ao Personalizer para selecionar a melhor ação, apresentando a seleção ao cliente para escolher entre a lista, enviando depois uma recompensa ao Personalizer sinalizando o quão bem o serviço fez na sua seleção.The following code loops through a cycle of asking the user their preferences at the command line, sending that information to Personalizer to select the best action, presenting the selection to the customer to choose from among the list, then sending a reward to Personalizer signaling how well the service did in its selection.

keep_going = True
while keep_going:

    eventid = str(uuid.uuid4())

    context = [get_user_preference(), get_user_timeofday()]
    actions = get_actions()

    rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
    response = client.rank(rank_request=rank_request)
    
    print("Personalizer service ranked the actions with the probabilities listed below:")
    
    rankedList = response.ranking
    for ranked in rankedList:
        print(ranked.id, ':',ranked.probability)

    print("Personalizer thinks you would like to have", response.reward_action_id+".")
    answer = input("Is this correct?(y/n)\n")[0]

    reward_val = "0.0"
    if(answer.lower()=='y'):
        reward_val = "1.0"
    elif(answer.lower()=='n'):
        reward_val = "0.0"
    else:
        print("Entered choice is invalid. Service assumes that you didn't like the recommended food choice.")

    client.events.reward(event_id=eventid, value=reward_val)

    br = input("Press Q to exit, any other key to continue: ")
    if(br.lower()=='q'):
        keep_going = False

Adicione os seguintes métodos, que obtêm as escolhas de conteúdo,antes de executar o ficheiro de código:Add the following methods, which get the content choices, before running the code file:

  • get_user_preference
  • get_user_timeofday
  • get_actions

Solicite a melhor açãoRequest the best action

Para completar o pedido de Rank, o programa pede currentContent às preferências do utilizador para criar uma das escolhas de conteúdo.To complete the Rank request, the program asks the user's preferences to create a currentContent of the content choices. O processo pode criar conteúdo para excluir excludeActionsdas ações, mostradas como .The process can create content to exclude from the actions, shown as excludeActions. O pedido de Rank necessita das ações e suas funcionalidades, funcionalidades atuais Contexto, exclusão DeAções e um ID de evento único, para receber a resposta.The Rank request needs the actions and their features, currentContext features, excludeActions, and a unique event ID, to receive the response.

Este quickstart tem características de contexto simples de hora do dia e preferência alimentar do utilizador.This quickstart has simple context features of time of day and user food preference. Nos sistemas de produção, determinar e avaliar ações e funcionalidades pode ser uma questão não trivial.In production systems, determining and evaluating actions and features can be a non-trivial matter.

rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
response = client.rank(rank_request=rank_request)

Enviar uma recompensaSend a reward

Para obter a pontuação de recompensa para enviar o pedido de Recompensa, o programa obtém a seleção do utilizador da linha de comando, atribui um valor numérico à seleção, em seguida, envia o ID de evento único e a pontuação de recompensa como o valor numérico para a API recompensa.To get the reward score to send in the Reward request, the program gets the user's selection from the command line, assigns a numeric value to the selection, then sends the unique event ID and the reward score as the numeric value to the Reward API.

Este quickstart atribui um número simples como uma pontuação de recompensa, um zero ou um 1.This quickstart assigns a simple number as a reward score, either a zero or a 1. Nos sistemas de produção, determinar quando e o que enviar para a chamada Reward pode ser uma questão não trivial, dependendo das suas necessidades específicas.In production systems, determining when and what to send to the Reward call can be a non-trivial matter, depending on your specific needs.

reward_val = "0.0"
if(answer.lower()=='y'):
    reward_val = "1.0"
elif(answer.lower()=='n'):
    reward_val = "0.0"
else:
    print("Entered choice is invalid. Service assumes that you didn't like the recommended food choice.")

client.events.reward(event_id=eventid, value=reward_val)

Execute o programaRun the program

Execute a aplicação com a pitão do seu diretório de candidaturas.Run the application with the python from your application directory.

python sample.py

O programa quickstart faz algumas perguntas para reunir as preferências dos utilizadores, conhecidas como funcionalidades, e depois fornece a ação de topo.

Limpar recursosClean up resources

Se pretender limpar e remover uma subscrição dos Serviços Cognitivos, pode eliminar o grupo de recursos ou recursos.If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. A eliminação do grupo de recursos também elimina quaisquer outros recursos associados ao mesmo.Deleting the resource group also deletes any other resources associated with it.

Passos seguintesNext steps