Quickstart: Personalizer-clientbibliotheek
Geef gepersonaliseerde inhoud weer in deze quickstart met de Personalizer-service.
Aan de slag met de Personalizer-clientbibliotheek. Volg deze stappen om het pakket te installeren en de voorbeeldcode voor basistaken uit te proberen.
- Rank-API: hiermee wordt het beste item van de acties geselecteerd, op basis van realtime informatie die u over inhoud en context opgeeft.
- Reward-API: u bepaalt de beloningsscore op basis van uw zakelijke behoeften en verzendt deze vervolgens naar Personalizer met deze API. Die score kan één waarde zijn, zoals 1 voor goed en 0 voor fout, of een algoritme dat u maakt op basis van uw zakelijke behoeften.
Referentiedocumentatie | Broncode van bibliotheek | Pakket (NuGet) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- De huidige versie van .NET Core.
- Zodra u een Azure-abonnement hebt, kunt u een Personalizer-resource maken in de Azure-portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, klikt u op Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Personalizer-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
Bijwerkfrequentie voor model wijzigen
Wijzig in Azure Portal Personalizer-resource op de pagina Configuratie de frequentie van de modelupdate in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

Wanneer een Personalizer-lus voor het eerst wordt geïnstantieerd, is er geen model, omdat er geen Reward-API-aanroepen zijn die voor training kunnen worden gebruikt. Rank-aanroepen retourneren gelijke kansen voor elk item. Uw toepassing moet toch altijd inhoud plaatsen met de uitvoer van RewardActionId.
De reward-wachttijd wijzigen
In de Azure Portal wijzigt u in de Personalizer-resource op de pagina Configuratie de Reward-wachttijd in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

Een nieuwe C#-toepassing maken
Maak een nieuwe .NET Core-toepassing in uw favoriete editor of IDE.
Gebruik in een consolevenster (zoals cmd, PowerShell of Bash) de opdracht dotnet new om een nieuwe console-app te maken met de naam personalizer-quickstart. Met deze opdracht maakt u een eenvoudig Hallo wereld-C#-project met één bronbestand: Program.cs.
dotnet new console -n personalizer-quickstart
Wijzig uw map in de zojuist gemaakte app-map. U kunt de toepassing maken met:
dotnet build
De build-uitvoer mag geen waarschuwingen of fouten bevatten.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
De clientbibliotheek installeren
Installeer in de toepassingsmap de Personalizer-clientbibliotheek voor .NET met de volgende opdracht:
dotnet add package Microsoft.Azure.CognitiveServices.Personalizer --version 1.0.0
Tip
Als u de Visual Studio-IDE, gebruikt, is de clientbibliotheek beschikbaar als downloadbaar NuGet-pakket.
Open vanuit de projectmap bestand Program.cs in uw favoriete editor of IDE. Voeg het volgende toe met behulp van de instructies:
using Microsoft.Azure.CognitiveServices.Personalizer;
using Microsoft.Azure.CognitiveServices.Personalizer.Models;
using System;
using System.Collections.Generic;
using System.Linq;
Objectmodel
De Personalizer-client is een PersonalizerClient-object dat wordt geverifieerd bij Azure met behulp van Microsoft.Rest.ServiceClientCredentials, dat uw sleutel bevat.
Als u het beste item van de inhoud wilt hebben, maakt u een RankRequest en geeft u dit door aan de methode client.Rank. Met de methode Rank wordt een RankResponse geretourneerd.
Als u een beloningsscore naar een Personalizer wilt verzenden, maakt u een RewardRequest en geeft u dit door aan de methode client.Reward.
Het bepalen van de beloningsscore in deze quickstart is triviaal. In een productiesysteem kan de bepaling wat van invloed is op de beloningsscore en in welke mate, een complex proces zijn, dat u in de loop van de tijd zou kunnen wijzigen. Deze ontwerpbeslissing moet een van de belangrijkste beslissingen in uw Personalizer-architectuur zijn.
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Personalizer-clientbibliotheek voor .NET:
De client verifiëren
In deze sectie doet u twee dingen:
- Uw sleutel en eindpunt opgeven
- Personalizer-client maken
Voeg eerst de volgende regels toe aan de klasse Programma. Denk erom dat u de sleutel en het eindpunt van uw Personalizer-resource toevoegt.
Belangrijk
Ga naar Azure Portal. Als de Personalizer-resource die u in de sectie Vereisten hebt gemaakt, succesvol is geïmplementeerd, klikt u op de knop Ga naar resource onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Bijvoorbeeld Azure Key Vault.
private static readonly string ApiKey = "REPLACE-WITH-YOUR-PERSONALIZER-KEY";
private static readonly string ServiceEndpoint = "https://REPLACE-WITH-YOUR-PERSONALIZER-RESOURCE-NAME.cognitiveservices.azure.com";
Voeg vervolgens een methode aan uw programma toe om een nieuwe Personalizer-client te maken.
static PersonalizerClient InitializePersonalizerClient(string url)
{
PersonalizerClient client = new PersonalizerClient(
new ApiKeyServiceClientCredentials(ApiKey)) { Endpoint = url };
return client;
}
Levensmiddelen ophalen als te rangschikken acties
Acties vertegenwoordigen de inhoudskeuzes waaruit Personalizer het beste inhoudsitem moet selecteren. Voeg de volgende methoden aan de klasse Programma toe om de reeks acties en hun functies te representeren.
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;
}
Gebruikersvoorkeuren voor context ophalen
Voeg de volgende methoden aan de klasse Programma toe om vanaf de opdrachtregel de invoer van een gebruiker op te halen voor het tijdstip van de dag en de huidige voedselvoorkeur. Deze worden als contextkenmerken gebruikt.
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];
}
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];
}
Beide methoden maken gebruik van de methode GetKey om de vanaf de opdrachtregel selectie van de gebruiker te lezen.
private static string GetKey()
{
return Console.ReadKey().Key.ToString().Last().ToString().ToUpper();
}
De leerlus maken
De Personalizer-leerlus is een cyclus van Positie- en Beloning-aanroepen. In deze quickstart wordt elke Positie-oproep, voor het personaliseren van de inhoud, gevolgd door een Beloning-oproep om Personalizer te laten weten hoe goed de service is uitgevoerd.
Met de volgende code wordt herhaaldelijk vanaf de opdrachtregel de cyclus voor het vragen naar de voorkeuren van de gebruiker doorlopen. Deze gegevens worden naar Personalizer gestuurd om de beste actie te selecteren, waarbij de selectie aan de klant in een lijst wordt gepresenteerd om een keuze te kunnen maken. Vervolgens wordt er een beloningsscore naar Personalizer verzonden waarmee wordt aangegeven hoe goed de service de selectie heeft uitgevoerd.
static void Main(string[] args)
{
int iteration = 1;
bool runLoop = true;
IList<RankableAction> actions = GetActions();
PersonalizerClient client = InitializePersonalizerClient(ServiceEndpoint);
do
{
Console.WriteLine("\nIteration: " + iteration++);
string timeOfDayFeature = GetUsersTimeOfDay();
string tasteFeature = GetUsersTastePreference();
IList<object> currentContext = new List<object>() {
new { time = timeOfDayFeature },
new { taste = tasteFeature }
};
IList<string> excludeActions = new List<string> { "juice" };
string eventId = Guid.NewGuid().ToString();
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);
}
client.Reward(response.EventId, new RewardRequest(reward));
Console.WriteLine("\nPress q to break, any other key to continue:");
runLoop = !(GetKey() == "Q");
} while (runLoop);
}
Voeg de volgende methoden toe, waarmee de inhoudskeuzes worden opgehaald, voordat u het codebestand uitvoert:
GetActionsGetUsersTimeOfDayGetUsersTastePreferenceGetKey
De beste actie aanvragen
Als u de Positie-aanvraag wilt voltooien, wordt naar de voorkeuren van de gebruiker gevraagd om een currentContext van de inhoudskeuzes te maken. Het proces kan inhoud maken die van de acties wordt uitgesloten, weergegeven als excludeActions. De Positie-aanvraag heeft de acties en hun kenmerken, currentcontext-kenmerken, excludeActions en een unieke gebeurtenis-id nodig om de reactie te kunnen ontvangen.
Deze quickstart bevat eenvoudige contextkenmerken over het tijdstip van de dag en de voedselvoorkeur van de gebruiker. In productiesystemen kan het bepalen en evalueren van acties en kenmerken een ingewikkelde zaak zijn.
string timeOfDayFeature = GetUsersTimeOfDay();
string tasteFeature = GetUsersTastePreference();
IList<object> currentContext = new List<object>() {
new { time = timeOfDayFeature },
new { taste = tasteFeature }
};
IList<string> excludeActions = new List<string> { "juice" };
string eventId = Guid.NewGuid().ToString();
var request = new RankRequest(actions, currentContext, excludeActions, eventId);
RankResponse response = client.Rank(request);
Een beloning verzenden
Om ervoor te zorgen dat de beloningsscore de Beloning-aanvraag instuurt, haalt het programma de selectie van de gebruiker op vanaf de opdrachtregel, wijst een numerieke waarde toe aan de selectie en verzendt vervolgens de unieke gebeurtenis-id en de beloningsscore als de numerieke waarde naar de Beloning API.
In deze quickstart wordt een eenvoudig getal, een 0 of een 1, aan een beloningsscore toegewezen. In productiesystemen kan het bepalen van wanneer en wat er naar de Beloning-oproep moet worden gezonden een ingewikkelde zaak zijn, afhankelijk van uw specifieke behoeften.
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));
Het programma uitvoeren
Voer de toepassing uit vanuit uw toepassingsmap met de opdracht dotnet run.
dotnet run

De broncode voor deze quickstart is beschikbaar.
Referentiedocumentatie |Bibliotheekbroncode | Pakket (NPM) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Installeer Node.js NPM (geverifieerd met Node.js v14.16.0 en NPM 6.14.11).
- Zodra u een Azure-abonnement hebt, kunt u een Personalizer-resource maken in de Azure-portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, klikt u op Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Personalizer-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
Bijwerkfrequentie voor model wijzigen
Wijzig in Azure Portal Personalizer-resource op de pagina Configuratie de frequentie van de modelupdate in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

Wanneer een Personalizer-lus voor het eerst wordt geïnstantieerd, is er geen model, omdat er geen Reward-API-aanroepen zijn die voor training kunnen worden gebruikt. Rank-aanroepen retourneren gelijke kansen voor elk item. Uw toepassing moet toch altijd inhoud plaatsen met de uitvoer van RewardActionId.
De reward-wachttijd wijzigen
In de Azure Portal wijzigt u in de Personalizer-resource op de pagina Configuratie de Reward-wachttijd in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

Een nieuwe Node.js-toepassing maken
Maak in een consolevenster (zoals cmd, PowerShell of Bash) een nieuwe map voor de app, en navigeer naar deze map.
mkdir myapp && cd myapp
Voer de opdracht npm init -y uit om een bestand package.json te maken.
npm init -y
Maak een nieuwe Node.js-toepassing in uw voorkeurseditor of IDE met de naam sample.js en maak variabelen voor het eindpunt en de abonnementssleutel van uw resource.
Belangrijk
Ga naar Azure Portal. Als de Personalizer-resource die u in de sectie Vereisten hebt gemaakt, succesvol is geïmplementeerd, klikt u op de knop Ga naar resource onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Bijvoorbeeld Azure Key Vault.
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');
// The key specific to your personalization service instance; e.g. "0123456789abcdef0123456789ABCDEF"
const serviceKey = "<REPLACE-WITH-YOUR-PERSONALIZER-KEY>";
// The endpoint specific to your personalization service instance;
// e.g. https://<your-resource-name>.cognitiveservices.azure.com
const baseUri = "https://<REPLACE-WITH-YOUR-PERSONALIZER-ENDPOINT>.cognitiveservices.azure.com";
De Node.js-bibliotheek installeren voor Personalizer
Installeer de Personalizer-clientbibliotheek voor Node.js met de volgende opdracht:
npm install @azure/cognitiveservices-personalizer --save
Installeer de resterende NPM-pakketten voor deze quickstart:
npm install @azure/ms-rest-azure-js @azure/ms-rest-js readline-sync uuid --save
Objectmodel
De Personalizer-client is een PersonalizerClient-object dat wordt geverifieerd bij Azure met behulp van Microsoft.Rest.ServiceClientCredentials, dat uw sleutel bevat.
Als u het beste item van de inhoud wilt hebben, maakt u een RankRequest en geeft u dit door aan de methode client.Rank. Met de methode Rank wordt een RankResponse geretourneerd.
Als u een belonings naar een Personalizer wilt verzenden, maakt u een RewardRequest en geeft u dit door aan de methode Reward in de Gebeurtenisklasse.
Het bepalen van de belonings in deze quickstart is triviaal. In een productiesysteem kan de bepaling wat van invloed is op de beloningsscore en in welke mate, een complex proces zijn, dat u in de loop van de tijd zou kunnen wijzigen. Dit moet een van de belangrijkste ontwerpbeslissingen in uw Personalizer-architectuur zijn.
Codevoorbeelden
Deze codefragmenten laten zien hoe u het volgende kunt uitvoeren met de Personalizer-clientbibliotheek voor Node.js:
De client verifiëren
Instantieer de PersonalizerClient met uw eerder gemaakte serviceKey en baseUri.
const credentials = new CognitiveServicesCredentials(serviceKey);
// Initialize Personalization client.
const personalizerClient = new Personalizer.PersonalizerClient(credentials, baseUri);
Inhoudskeuzes ophalen die worden weergegeven als acties
Acties vertegenwoordigen de inhoudskeuzes waaruit Personalizer het beste inhoudsitem moet selecteren. Voeg de volgende methoden aan de klasse Programma toe om de reeks acties en hun functies te representeren.
function getContextFeaturesList() {
const timeOfDayFeatures = ['morning', 'afternoon', 'evening', 'night'];
const tasteFeatures = ['salty', 'sweet'];
let answer = readline.question("\nWhat time of day is it (enter number)? 1. morning 2. afternoon 3. evening 4. night\n");
let selection = parseInt(answer);
const 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);
const 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
}
]
}
];
}
De leerlus maken
De Personalizer-leerlus is een cyclus van Positie- en Beloning-aanroepen. In deze quickstart wordt elke Positie-oproep, voor het personaliseren van de inhoud, gevolgd door een Beloning-oproep om Personalizer te laten weten hoe goed de service is uitgevoerd.
Met de volgende code wordt herhaaldelijk vanaf de opdrachtregel de cyclus voor het vragen naar de voorkeuren van de gebruiker doorlopen. Deze gegevens worden naar Personalizer gestuurd om de beste actie te selecteren, waarbij de selectie aan de klant in een lijst wordt gepresenteerd om een keuze te kunnen maken. Vervolgens wordt er een beloning naar Personalizer verzonden waarmee wordt aangegeven hoe goed de service de selectie heeft uitgevoerd.
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
const 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
const reward = getReward();
console.log("\nPersonalization service ranked the actions with the probabilities as below:\n");
for (let 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.
const rewardRequest = {
value: reward
}
await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);
runLoop = continueLoop();
} while (runLoop);
Bekijk de Rank- en Reward-aanroepen in de volgende secties.
Voeg de volgende methoden toe, waarmee de inhoudskeuzes worden opgehaald, voordat u het codebestand uitvoert:
- getActionsList
- getContextFeaturesList
De beste actie aanvragen
Als u de Positie-aanvraag wilt voltooien, wordt naar de voorkeuren van de gebruiker gevraagd om inhoudskeuzes te maken. Het proces kan inhoud maken die van de acties wordt uitgesloten, weergegeven als excludeActions. De Positie-aanvraag heeft de acties en hun kenmerken, currentcontext-kenmerken, excludeActions en een unieke ranggebeurtenis-id nodig om de gerangschikte reactie te kunnen ontvangen.
Deze quickstart bevat eenvoudige contextkenmerken over het tijdstip van de dag en de voedselvoorkeur van de gebruiker. In productiesystemen kan het bepalen en evalueren van acties en kenmerken een ingewikkelde zaak zijn.
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
const rankResponse = await personalizerClient.rank(rankRequest);
Een beloning verzenden
Om ervoor te zorgen dat de beloningsscore de Beloning-aanvraag instuurt, haalt het programma de selectie van de gebruiker op vanaf de opdrachtregel, wijst een numerieke waarde toe aan de selectie en verzendt vervolgens de unieke gebeurtenis-id en de beloningsscore als de numerieke waarde naar de Beloning API.
In deze quickstart wordt een eenvoudig getal, een 0 of een 1, aan een beloningsscore toegewezen. In productiesystemen kan het bepalen van wanneer en wat er naar de Beloning-oproep moet worden gezonden een ingewikkelde zaak zijn, afhankelijk van uw specifieke behoeften.
const rewardRequest = {
value: reward
}
await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);
Het programma uitvoeren
Voer de toepassing uit met de Node.js vanuit uw toepassingsmap.
node sample.js

Referentiedocumentatie | Broncode bibliotheek | Package (pypi) | Voorbeelden
Vereisten
- Azure-abonnement: Krijg een gratis abonnement
- Python 3.x
- Zodra u een Azure-abonnement hebt, kunt u een Personalizer-resource maken in de Azure-portal om uw sleutel en eindpunt op te halen. Nadat de app is geïmplementeerd, klikt u op Ga naar resource.
- U hebt de sleutel en het eindpunt nodig van de resource die u maakt, om de toepassing te verbinden met de Personalizer-API. Later in de quickstart plakt u uw sleutel en eindpunt in de onderstaande code.
- U kunt de gratis prijscategorie (
F0) gebruiken om de service uit te proberen, en later upgraden naar een betaalde laag voor productie.
Instellen
Bijwerkfrequentie voor model wijzigen
Wijzig in Azure Portal Personalizer-resource op de pagina Configuratie de frequentie van de modelupdate in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

Wanneer een Personalizer-lus voor het eerst wordt geïnstantieerd, is er geen model, omdat er geen Reward-API-aanroepen zijn die voor training kunnen worden gebruikt. Rank-aanroepen retourneren gelijke kansen voor elk item. Uw toepassing moet toch altijd inhoud plaatsen met de uitvoer van RewardActionId.
De reward-wachttijd wijzigen
In de Azure Portal wijzigt u in de Personalizer-resource op de pagina Configuratie de Reward-wachttijd in 30 seconden. Met deze korte duur wordt de service snel getraind, zodat u kunt zien hoe de belangrijkste actie voor elke iteratie wordt gewijzigd.

De clientbibliotheek installeren
Na de installatie van Python kunt u de clientbibliotheek installeren met:
pip install azure-cognitiveservices-personalizer
Een nieuwe Python-toepassing maken
Maak een nieuw Python-bestand en maak variabelen voor het eindpunt en de abonnementssleutel van uw resource.
Belangrijk
Ga naar Azure Portal. Als de Personalizer-resource die u in de sectie Vereisten hebt gemaakt, succesvol is geïmplementeerd, klikt u op de knop Ga naar resource onder Volgende stappen. U vindt uw sleutel en eindpunt op de pagina Sleutel en eindpunt van de resource, onder Resourcebeheer.
Vergeet niet de sleutel uit uw code te verwijderen wanneer u klaar bent, en plaats deze sleutel nooit in het openbaar. Overweeg om voor productie een veilige manier te gebruiken voor het opslaan en openen van uw referenties. Bijvoorbeeld Azure Key Vault.
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
key = "<paste-your-personalizer-key-here>"
endpoint = "<paste-your-personalizer-endpoint-here>"
Objectmodel
De Personalizer-client is een PersonalizerClient-object dat wordt geverifieerd bij Azure met behulp van Microsoft.Rest.ServiceClientCredentials, dat uw sleutel bevat.
Als u het beste item van de inhoud wilt hebben, maakt u een RankRequest en geeft u dit door aan de methode client.Rank. Met de methode Rank wordt een RankResponse geretourneerd.
Als u een beloningsscore naar Personalizer wilt verzenden, stelt u de gebeurtenis-id en de beloningsscore (waarde) in die u wilt verzenden naar de methode Reward op de EventOperations-klasse.
Het bepalen van de belonings in deze quickstart is triviaal. In een productiesysteem kan de bepaling wat van invloed is op de beloningsscore en in welke mate, een complex proces zijn, dat u in de loop van de tijd zou kunnen wijzigen. Dit moet een van de belangrijkste ontwerpbeslissingen in uw Personalizer-architectuur zijn.
Codevoorbeelden
Deze codefragmenten laten zien hoe u de volgende taken kunt uitvoeren met de Personalizer-clientbibliotheek voor Python:
De client verifiëren
Instantieer de PersonalizerClient met uw eerder gemaakte key en endpoint.
# Instantiate a Personalizer client
client = PersonalizerClient(endpoint, CognitiveServicesCredentials(key))
Inhoudskeuzes ophalen die worden weergegeven als acties
Acties vertegenwoordigen de inhoudskeuzes waaruit Personalizer het beste inhoudsitem moet selecteren. Voeg de volgende methoden aan de klasse Programma toe om de reeks acties en hun functies te representeren.
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
De leerlus maken
De Personalizer-leerlus is een cyclus van Positie- en Beloning-aanroepen. In deze quickstart wordt elke positie-oproep, voor het personaliseren van de inhoud, gevolgd door een beloning-oproep om Personalizer te laten weten hoe goed de service is uitgevoerd.
Met de volgende code wordt herhaaldelijk vanaf de opdrachtregel de cyclus voor het vragen naar de voorkeuren van de gebruiker doorlopen. Deze gegevens worden naar Personalizer gestuurd om de beste actie te selecteren, waarbij de selectie aan de klant in een lijst wordt gepresenteerd om een keuze te kunnen maken. Vervolgens wordt er een beloning naar Personalizer verzonden waarmee wordt aangegeven hoe goed de service de selectie heeft uitgevoerd.
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
Voeg de volgende methoden toe, waarmee de inhoudskeuzes worden opgehaald, voordat u het codebestand uitvoert:
get_user_preferenceget_user_timeofdayget_actions
De beste actie aanvragen
Als u de Positie-aanvraag wilt voltooien, wordt naar de voorkeuren van de gebruiker gevraagd om een currentContent van de inhoudskeuzes te maken. Het proces kan inhoud maken die van de acties wordt uitgesloten, weergegeven als excludeActions. De Positie-aanvraag heeft de acties en hun kenmerken, currentcontext-kenmerken, excludeActions en een unieke gebeurtenis-id nodig om de reactie te kunnen ontvangen.
Deze quickstart bevat eenvoudige contextkenmerken over het tijdstip van de dag en de voedselvoorkeur van de gebruiker. In productiesystemen kan het bepalen en evalueren van acties en kenmerken een ingewikkelde zaak zijn.
rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
response = client.rank(rank_request=rank_request)
Een beloning verzenden
Om ervoor te zorgen dat de beloningsscore de Beloning-aanvraag instuurt, haalt het programma de selectie van de gebruiker op vanaf de opdrachtregel, wijst een numerieke waarde toe aan de selectie en verzendt vervolgens de unieke gebeurtenis-id en de beloningsscore als de numerieke waarde naar de Beloning API.
In deze quickstart wordt een eenvoudig getal, een 0 of een 1, aan een beloningsscore toegewezen. In productiesystemen kan het bepalen van wanneer en wat er naar de Beloning-oproep moet worden gezonden een ingewikkelde zaak zijn, afhankelijk van uw specifieke behoeften.
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)
Het programma uitvoeren
Voer de toepassing uit met de Python vanuit uw toepassingsmap.
python sample.py

Resources opschonen
Als u een Cognitive Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd.