Snabbstart: Personanpassar klientbibliotek
Visa anpassat innehåll i den här snabbstarten med tjänsten Personanpassare.
Kom igång med klientbiblioteket för Personanpassare. Följ de här stegen för att installera paketet och prova exempelkoden för grundläggande uppgifter.
- Rangordnings-API – Väljer det bästa objektet, från åtgärder, baserat på realtidsinformation som du anger om innehåll och kontext.
- Belönings-API – Du fastställer belöningspoängen baserat på dina affärsbehov och skickar den sedan till Personanpassare med det här API:et. Poängen kan vara ett enda värde, till exempel 1 för bra och 0 för dåligt, eller en algoritm som du skapar baserat på dina affärsbehov.
Referensdokumentation | Bibliotekskällkod | Paket (NuGet) | Exempel
Förutsättningar
- Azure-prenumeration – Skapa en utan kostnad
- Den aktuella versionen av .NET Core.
- När du har din Azure-prenumeration skapar du en resurs för personanpassare i Azure Portal för att slutpunkt. När den har distribuerats klickar du på Gå till resurs.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till API:et för personanpassare. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten.
- Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.
Inrätta
Ändra modellens uppdateringsfrekvens
I Azure Portal i resursen Personanpassare på sidan Konfiguration ändrar du Uppdateringsfrekvens för modell till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

När en loop för personanpassare först instansieras finns det ingen modell eftersom det inte har gjorts några anrop till belönings-API:et att träna från. Rankningsanrop returnerar samma sannolikheter för varje objekt. Ditt program bör fortfarande rangordna innehåll med hjälp av resultatet av RewardActionId.
Ändra väntetiden för belöningen
I Azure Portal resurs för personanpassare på sidan Konfiguration ändrar du väntetiden för belöning till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

Skapa ett nytt C#-program
Skapa ett nytt .NET Core-program i önskat redigeringsprogram eller IDE.
I ett konsolfönster (till exempel cmd, PowerShell eller Bash) använder du dotnet-kommandot för att skapa en ny new konsolapp med namnet personalizer-quickstart . Det här kommandot skapar ett enkelt "Hello World" C#-projekt med en enda källfil: Program.cs .
dotnet new console -n personalizer-quickstart
Ändra din katalog till den nyligen skapade appmappen. Du kan skapa programmet med:
dotnet build
Byggutdata får inte innehålla några varningar eller fel.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Installera klientbiblioteket
I programkatalogen installerar du Klientbiblioteket för Personanpassare för .NET med följande kommando:
dotnet add package Microsoft.Azure.CognitiveServices.Personalizer --version 1.0.0
Tips
Om du använder den nya Visual Studio IDE är klientbiblioteket tillgängligt som ett nedladdningsbart NuGet-paket.
Öppna filen i önskad redigerare Program.cs eller IDE från projektkatalogen. Lägg till följande using-direktiv:
using Microsoft.Azure.CognitiveServices.Personalizer;
using Microsoft.Azure.CognitiveServices.Personalizer.Models;
using System;
using System.Collections.Generic;
using System.Linq;
Objektmodell
Personanpassarklienten är ett PersonalizerClient-objekt som autentiserar till Azure med hjälp av Microsoft.Rest.ServiceClientCredentials, som innehåller din nyckel.
Om du vill fråga efter det bästa objektet i innehållet skapar du en RankRequestoch skickar den sedan till klienten. Rankningsmetod. Rank-metoden returnerar en RankResponse.
Om du vill skicka en belöningspoäng till Personanpassare skapar du en RewardRequestoch skickar den sedan till klienten. Belöningsmetod.
Det är enkelt att fastställa belöningspoängen i den här snabbstarten. I ett produktionssystem kan du bestämma vad som påverkar belöningspoängen och hur mycket som kan vara en komplex process som du kan välja att ändra med tiden. Det här designbeslutet bör vara ett av de viktigaste besluten i din personanpassararkitektur.
Kodexempel
Dessa kodfragment visar hur du utför följande uppgifter med Klientbiblioteket för Personanpassare för .NET:
Autentisera klienten
I det här avsnittet ska du göra två saker:
- Ange din nyckel och slutpunkt
- Skapa en personanpassarklient
Börja med att lägga till följande rader i klassen Program. Se till att lägga till din nyckel och slutpunkt från din personanpassarresurs.
Viktigt
Gå till Azure-portalen. Om den personanpassarresurs som du skapade i avsnittet Förutsättningar har distribuerats klickar du på knappen Gå till resurs under Nästa steg. Du hittar din nyckel och slutpunkt på resursens nyckel- och slutpunktssida under resurshantering.
Kom ihåg att ta bort nyckeln från koden när du är klar och aldrig publicera den offentligt. Överväg att använda ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter för produktion. Till exempel 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";
Lägg sedan till en metod i programmet för att skapa en ny klient för personanpassare.
static PersonalizerClient InitializePersonalizerClient(string url)
{
PersonalizerClient client = new PersonalizerClient(
new ApiKeyServiceClientCredentials(ApiKey)) { Endpoint = url };
return client;
}
Hämta matartiklar som rangordnade åtgärder
Åtgärder representerar de innehållsval från vilka du vill att Personanpassare ska välja det bästa innehållsobjektet. Lägg till följande metoder i klassen Program för att representera uppsättningen åtgärder och deras funktioner.
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;
}
Hämta användarinställningar för kontext
Lägg till följande metoder i klassen Program för att hämta en användares indata från kommandoraden för tid på dagen och aktuella matpreferenser. Dessa används som kontextfunktioner.
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];
}
Båda metoderna använder GetKey metoden för att läsa användarens val från kommandoraden.
private static string GetKey()
{
return Console.ReadKey().Key.ToString().Last().ToString().ToUpper();
}
Skapa utbildningsloopen
Inlärningsloopen för personanpassare är en cykel med anrop till rangordning och belöning. I den här snabbstarten följs varje Rank-anrop för att anpassa innehållet av ett belöningssamtal för att berätta för Personanpassaren hur väl tjänsten utfördes.
Följande kod loopar igenom en cykel där användaren uppmanas att ange sina inställningar på kommandoraden, skickar informationen till Personanpassaren för att välja den bästa åtgärden, visar valet för kunden att välja bland i listan och skickar sedan en belöningspoäng till Personanpassare som signalerar hur väl tjänsten gjorde i sitt val.
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);
}
Lägg till följande metoder, som hämtar innehållsvalen, innan du kör kodfilen:
GetActionsGetUsersTimeOfDayGetUsersTastePreferenceGetKey
Begär den bästa åtgärden
För att slutföra Rank-begäran ber programmet användarens inställningar att skapa en currentContext av innehållsvalen. Processen kan skapa innehåll som ska undantas från åtgärderna, som visas som excludeActions . Rank-begäran behöver åtgärderna och deras funktioner, currentContext-funktioner, excludeActions och ett unikt händelse-ID, för att få svaret.
Den här snabbstarten innehåller enkla kontextfunktioner för tid på dagen och användarnas matpreferenser. I produktionssystem kan det vara en icke-trivial fråga att fastställa och utvärdera åtgärder och funktioner.
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);
Skicka en belöning
För att få belöningspoängen att skicka in en belöningsbegäran hämtar programmet användarens val från kommandoraden, tilldelar ett numeriskt värde till valet och skickar sedan det unika händelse-ID:t och belöningspoängen som det numeriska värdet till belönings-API:et.
Den här snabbstarten tilldelar ett enkelt tal som en belöningspoäng, antingen noll eller ett 1. I produktionssystem kan det vara en icke-trivial fråga att avgöra när och vad som ska skickas till belöningssamtalet, beroende på dina specifika behov.
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));
Köra programmet
Kör programmet med kommandot dotnet run från programkatalogen.
dotnet run

Källkoden för den här snabbstarten är tillgänglig.
Referensdokumentation | Bibliotekskällkod | Paket (NPM) | Exempel
Förutsättningar
- Azure-prenumeration – Skapa en utan kostnad
- Installera Node.js och NPM (verifierade med Node.js v14.16.0 och NPM 6.14.11).
- När du har din Azure-prenumeration skapar du en resurs för personanpassare och skapar en resurs för personanpassare i Azure Portal för slutpunkt. När den har distribuerats klickar du på Gå till resurs.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till API:et för personanpassare. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten.
- Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.
Inrätta
Ändra modellens uppdateringsfrekvens
I Azure Portal i resursen Personanpassare på sidan Konfiguration ändrar du Uppdateringsfrekvens för modell till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

När en loop för personanpassare först instansieras finns det ingen modell eftersom det inte har gjorts några anrop till belönings-API:et att träna från. Rankningsanrop returnerar samma sannolikheter för varje objekt. Ditt program bör fortfarande rangordna innehåll med hjälp av resultatet av RewardActionId.
Ändra väntetiden för belöningen
I Azure Portal resurs för personanpassare på sidan Konfiguration ändrar du väntetiden för belöning till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

Skapa ett nytt Node.js-program
I ett konsolfönster (till exempel cmd, PowerShell eller Bash) skapar du en ny katalog för din app och navigerar till den.
mkdir myapp && cd myapp
Kör kommandot npm init -y för att skapa en package.json fil.
npm init -y
Skapa ett nytt Node.js program i önskat redigeringsprogram eller IDE med namnet och skapa variabler för sample.js resursens slutpunkt och prenumerationsnyckel.
Viktigt
Gå till Azure-portalen. Om den personanpassarresurs som du skapade i avsnittet Förutsättningar har distribuerats klickar du på knappen Gå till resurs under Nästa steg. Du hittar din nyckel och slutpunkt på resursens nyckel- och slutpunktssida under resurshantering.
Kom ihåg att ta bort nyckeln från koden när du är klar och aldrig publicera den offentligt. Överväg att använda ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter för produktion. Till exempel 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";
Installera Node.js för Personanpassare
Installera klientbiblioteket för Personanpassare för Node.js med följande kommando:
npm install @azure/cognitiveservices-personalizer --save
Installera de återstående NPM-paketen för den här snabbstarten:
npm install @azure/ms-rest-azure-js @azure/ms-rest-js readline-sync uuid --save
Objektmodell
Personanpassarklienten är ett PersonalizerClient-objekt som autentiserar till Azure med hjälp av Microsoft.Rest.ServiceClientCredentials, som innehåller din nyckel.
Om du vill fråga efter det bästa objektet i innehållet skapar du en RankRequestoch skickar den sedan till klienten. Rankningsmetod. Rank-metoden returnerar en RankResponse.
Om du vill skicka en belöning till Personanpassare skapar du en RewardRequestoch skickar den sedan till metoden Reward (Belöning) i klassen Events (Händelser).
Att fastställa belöningen är enkelt i den här snabbstarten. I ett produktionssystem kan du bestämma vad som påverkar belöningspoängen och hur mycket som kan vara en komplex process som du kan välja att ändra med tiden. Detta bör vara ett av de primära designbesluten i din arkitektur för personanpassare.
Kodexempel
De här kodfragmenten visar hur du gör följande med klientbiblioteket för Personanpassare för Node.js:
Autentisera klienten
Instansiera PersonalizerClient med och som du skapade serviceKey baseUri tidigare.
const credentials = new CognitiveServicesCredentials(serviceKey);
// Initialize Personalization client.
const personalizerClient = new Personalizer.PersonalizerClient(credentials, baseUri);
Hämta innehållsalternativ som representeras som åtgärder
Åtgärder representerar de innehållsval från vilka du vill att Personanpassare ska välja det bästa innehållsobjektet. Lägg till följande metoder i klassen Program för att representera uppsättningen åtgärder och deras funktioner.
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
}
]
}
];
}
Skapa utbildningsloopen
Inlärningsloopen för personanpassare är en cykel med anrop till rangordning och belöning. I den här snabbstarten följs varje Rank-anrop för att anpassa innehållet av ett belöningssamtal som talar om för Personanpassaren hur väl tjänsten utfördes.
Följande kod loopar igenom en cykel där användaren uppmanas att ange sina inställningar på kommandoraden, skickar informationen till Personanpassaren för att välja den bästa åtgärden, visar valet för kunden att välja bland i listan och skickar sedan en belöning till Personanpassare som signalerar hur väl tjänsten gjorde i sitt val.
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);
Ta en närmare titt på anropen av rangordning och belöning i följande avsnitt.
Lägg till följande metoder, som hämtar innehållsvalen, innan du kör kodfilen:
- getActionsList
- getContextFeaturesList
Begära den bästa åtgärden
För att slutföra Rank-begäran ber programmet användarens inställningar att skapa innehållsval. Processen kan skapa innehåll som ska undantas från åtgärderna, som visas som excludeActions . Rank-begäran behöver åtgärder och deras funktioner, currentContext-funktioner, excludeActions och ett unikt rankning händelse-ID för att ta emot det rangordnade svaret.
Den här snabbstarten innehåller enkla kontextfunktioner för tid på dagen och användarnas matpreferenser. I produktionssystem kan det vara en icke-trivial fråga att fastställa och utvärdera åtgärder och funktioner.
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);
Skicka en belöning
För att få belöningspoängen att skicka in en belöningsbegäran hämtar programmet användarens val från kommandoraden, tilldelar ett numeriskt värde till valet och skickar sedan det unika händelse-ID:t och belöningspoängen som det numeriska värdet till belönings-API:et.
Den här snabbstarten tilldelar ett enkelt tal som en belöningspoäng, antingen noll eller ett 1. I produktionssystem kan det vara en icke-trivial fråga att avgöra när och vad som ska skickas till belöningssamtalet, beroende på dina specifika behov.
const rewardRequest = {
value: reward
}
await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);
Köra programmet
Kör programmet med Node.js från programkatalogen.
node sample.js

Referensdokumentation | Bibliotekskällkod | Paket (pypi) | Exempel
Förutsättningar
- Azure-prenumeration – Skapa en utan kostnad
- Python 3.x
- När du har din Azure-prenumeration skapar du en resurs för personanpassare och skapar en resurs för personanpassare i Azure Portal för slutpunkt. När den har distribuerats klickar du på Gå till resurs.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till API:et för personanpassare. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten.
- Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten och uppgradera senare till en betald nivå för produktion.
Inrätta
Ändra modellens uppdateringsfrekvens
I Azure Portal i resursen Personanpassare på sidan Konfiguration ändrar du Uppdateringsfrekvens för modell till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

När en loop för personanpassare först instansieras finns det ingen modell eftersom det inte har gjorts några anrop till belönings-API:et att träna från. Rankningsanrop returnerar samma sannolikheter för varje objekt. Ditt program bör fortfarande rangordna innehåll med hjälp av resultatet av RewardActionId.
Ändra väntetiden för belöningen
I Azure Portal resurs för personanpassare på sidan Konfiguration ändrar du väntetiden för belöning till 30 sekunder. Den här korta varaktigheten tränar tjänsten snabbt, så att du kan se hur den översta åtgärden ändras för varje iteration.

Installera klientbiblioteket
När du har installerat Python kan du installera klientbiblioteket med:
pip install azure-cognitiveservices-personalizer
Skapa ett nytt Python-program
Skapa en ny Python-fil och skapa variabler för resursens slutpunkt och prenumerationsnyckel.
Viktigt
Gå till Azure-portalen. Om den personanpassarresurs som du skapade i avsnittet Förutsättningar har distribuerats klickar du på knappen Gå till resurs under Nästa steg. Du hittar din nyckel och slutpunkt på resursens nyckel- och slutpunktssida under resurshantering.
Kom ihåg att ta bort nyckeln från koden när du är klar och aldrig publicera den offentligt. Överväg att använda ett säkert sätt att lagra och komma åt dina autentiseringsuppgifter för produktion. Till exempel 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>"
Objektmodell
Personanpassarklienten är ett PersonalizerClient-objekt som autentiserar till Azure med hjälp av Microsoft.Rest.ServiceClientCredentials, som innehåller din nyckel.
Om du vill fråga efter det bästa objektet i innehållet skapar du en RankRequestoch skickar den sedan till klienten. Rankningsmetod. Rank-metoden returnerar en RankResponse.
Om du vill skicka en belöningspoäng till Personifierare anger du händelse-ID:t och belöningspoängen (värdet) som ska skickas till metoden Reward i EventOperations-klassen.
Att fastställa belöningen är enkelt i den här snabbstarten. I ett produktionssystem kan du bestämma vad som påverkar belöningspoängen och hur mycket som kan vara en komplex process som du kan välja att ändra med tiden. Detta bör vara ett av de primära designbesluten i din arkitektur för personanpassare.
Kodexempel
De här kodfragmenten visar hur du gör följande med Klientbiblioteket för Personanpassare för Python:
Autentisera klienten
Instansiera PersonalizerClient med och som du skapade key endpoint tidigare.
# Instantiate a Personalizer client
client = PersonalizerClient(endpoint, CognitiveServicesCredentials(key))
Hämta innehållsalternativ som representeras som åtgärder
Åtgärder representerar de innehållsval från vilka du vill att Personanpassare ska välja det bästa innehållsobjektet. Lägg till följande metoder i klassen Program för att representera uppsättningen åtgärder och deras funktioner.
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
Skapa utbildningsloopen
Inlärningsloopen för personanpassare är en cykel med anrop till rangordning och belöning. I den här snabbstarten följs varje rangsamtal för att anpassa innehållet av ett belöningssamtal för att berätta för Personanpassaren hur väl tjänsten utfördes.
Följande kod loopar igenom en cykel där användaren uppmanas att ange sina inställningar på kommandoraden, skickar informationen till Personanpassaren för att välja den bästa åtgärden, visar valet för kunden att välja bland i listan och skickar sedan en belöning till Personanpassare som signalerar hur väl tjänsten gjorde i sitt val.
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
Lägg till följande metoder, som hämtar innehållsvalen, innan du kör kodfilen:
get_user_preferenceget_user_timeofdayget_actions
Begära den bästa åtgärden
För att slutföra Rank-begäran ber programmet användarens inställningar att skapa en currentContent av innehållsvalen. Processen kan skapa innehåll som ska undantas från åtgärderna, som visas som excludeActions . Rank-begäran behöver åtgärderna och deras funktioner, currentContext-funktioner, excludeActions och ett unikt händelse-ID, för att få svaret.
Den här snabbstarten innehåller enkla kontextfunktioner för tid på dagen och användarnas matpreferenser. I produktionssystem kan det vara en icke-trivial fråga att fastställa och utvärdera åtgärder och funktioner.
rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
response = client.rank(rank_request=rank_request)
Skicka en belöning
För att få belöningspoängen att skicka in en belöningsbegäran hämtar programmet användarens val från kommandoraden, tilldelar ett numeriskt värde till valet och skickar sedan det unika händelse-ID:t och belöningspoängen som det numeriska värdet till belönings-API:et.
Den här snabbstarten tilldelar ett enkelt tal som en belöningspoäng, antingen noll eller ett 1. I produktionssystem kan det vara en icke-trivial fråga att avgöra när och vad som ska skickas till belöningssamtalet, beroende på dina specifika behov.
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)
Köra programmet
Kör programmet med Python från programkatalogen.
python sample.py

Rensa resurser
Om du vill rensa och ta bort en Cognitive Services prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort.