Rychlý Start: Klientská knihovna pro přizpůsobování
Zobrazit přizpůsobený obsah v tomto rychlém startu pomocí služby pro přizpůsobení.
Začínáme s klientskou knihovnou pro přizpůsobování Pomocí těchto kroků nainstalujete balíček a vyzkoušíte ukázkový kód pro základní úlohy.
- Rozhraní API pro řazení – vybere nejlepší položku z akcí na základě informací v reálném čase, které poskytnete o obsahu a kontextu.
- API pro odměnu – na základě vašich obchodních potřeb určíte skóre odměňování a pak ho pošlete do přizpůsobeného rozhraní API. Toto skóre může být jedna hodnota, například 1 pro dobrý, a 0 pro špatný nebo algoritmus, který vytvoříte na základě vašich obchodních potřeb.
Referenční dokumentace | Zdrojový kód knihovny | Balíček (NuGet) | Ukázky
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma.
- Aktuální verze .NET Core.
- Jakmile máte předplatné Azure, vytvořte si prostředek Služby personalizátoru v Azure Portal a získejte bod. Po nasazení klikněte na Přejít k prostředku.
- Klíč a koncový bod z prostředku, který vytvoříte, budete potřebovat pro připojení aplikace k rozhraní API služby Personalizér. Svůj klíč a koncový bod vložíte do kódu níže v pozdější části tohoto rychlého startu.
- K vyzkoušejí služby můžete použít bezplatnou cenovou úroveň ( ) a později upgradovat
F0na placenou úroveň pro produkční prostředí.
Nastavení
Změna frekvence aktualizace modelu
V Azure Portal změňte v prostředku přizpůsobeném na stránce Konfigurace Četnost aktualizace modelu na 30 sekund. Tato krátká doba bude službu vytvářet rychle, což vám umožní zjistit, jak se hlavní akce mění pro každou iteraci.

Když se poprvé vytvoří instance smyčky pro přizpůsobení, neexistuje žádný model, protože neexistovala žádná Neplatní volání rozhraní API pro vlak. Volání Rank budou pro každou položku vracet stejné pravděpodobnosti. Vaše aplikace by měla stále vždy Seřadit obsah pomocí výstupu RewardActionId.
Změna doby čekání na odměnu
V Azure Portal prostředku Personalizační služby na stránce Konfigurace změňte dobu čekání Reward na 30 sekund. Tato krátká doba rychle vytrénuje službu, abyste viděli, jak se u každé iterace mění hlavní akce.

Vytvoření nové aplikace v jazyce C#
V upřednostňovaném editoru nebo integrovaném vývojovém prostředí (IDE) vytvořte novou aplikaci .NET Core.
V okně konzoly (například cmd, PowerShell nebo Bash) pomocí příkazu dotnet vytvořte novou konzolovou aplikaci s new názvem personalizer-quickstart . Tento příkaz vytvoří jednoduchý projekt "Hello World" jazyka C# s jedním zdrojovým souborem: Program.cs .
dotnet new console -n personalizer-quickstart
Změňte adresář na nově vytvořenou složku aplikace. Aplikaci můžete sestavit pomocí:
dotnet build
Výstup sestavení by neměl obsahovat žádná upozornění ani chyby.
...
Build succeeded.
0 Warning(s)
0 Error(s)
...
Instalace klientské knihovny
V adresáři aplikace nainstalujte klientskou knihovnu personalizátoru pro .NET pomocí následujícího příkazu:
dotnet add package Microsoft.Azure.CognitiveServices.Personalizer --version 1.0.0
Tip
Pokud používáte integrované vývojové Visual Studio, je klientská knihovna dostupná jako balíček ke stažení NuGet balíčku.
V adresáři projektu otevřete soubor Program.cs v upřednostňovaném editoru nebo integrovaném vývojovém prostředí.) Přidejte následující direktivy using:
using Microsoft.Azure.CognitiveServices.Personalizer;
using Microsoft.Azure.CognitiveServices.Personalizer.Models;
using System;
using System.Collections.Generic;
using System.Linq;
Objektový model
Klient Personalizační služby je objekt PersonalizerClient, který se ověřuje v Azure pomocí Microsoft.Rest.ServiceClientCredentials, který obsahuje váš klíč.
Pokud chcete požádat o jedinou nejlepší položku obsahu, vytvořte požadavek RankRequesta pak ho předejte klientovi. Metoda Rank Metoda Rank vrátí rankResponse.
Pokud chcete odeslat skóre odměny do služby Personalizer, vytvořte požadavek RewardRequesta pak ho předejte klientovi. Metoda Reward.
Určení skóre odměny je v tomto rychlém startu triviální. V produkčním systému se určení toho, co ovlivňuje skóre odměny a kolik může být složitý proces, můžete rozhodnout, že se v průběhu času změníte. Toto rozhodnutí o návrhu by mělo být jedním z hlavních rozhodnutí v architektuře Personalizátoru.
Příklady kódu
Tyto fragmenty kódu ukazují, jak pomocí klientské knihovny Personalizační služby pro .NET provádět následující úlohy:
Ověření klienta
V této části budete dělat dvě věci:
- Zadání klíče a koncového bodu
- Vytvoření klienta Služby personalizátoru
Začněte přidáním následujících řádků do třídy Program. Nezapomeňte přidat svůj klíč a koncový bod z prostředku personalizátoru.
Důležité
Přejděte na Azure Portal. Pokud se prostředek přizpůsobeného přizpůsobování, který jste vytvořili v části předpoklady , nasadil úspěšně, klikněte v části Další kroky na tlačítko Přejít k prostředku . Klíč a koncový bod můžete najít na stránce klíč a koncový bod prostředku v části Správa prostředků.
Nezapomeňte odebrat klíč z kódu, až budete hotovi, a nikdy ho zveřejnit. V případě produkčního prostředí zvažte použití zabezpečeného způsobu ukládání a přístupu k vašim přihlašovacím údajům. Například Trezor klíčů Azure.
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";
Dále do programu přidejte metodu pro vytvoření nového klienta Personalizéru.
static PersonalizerClient InitializePersonalizerClient(string url)
{
PersonalizerClient client = new PersonalizerClient(
new ApiKeyServiceClientCredentials(ApiKey)) { Endpoint = url };
return client;
}
Získání položek jídla jako seřazených akcí
Akce představují volby obsahu, ze kterých má personalizátor vybrat nejlepší položku obsahu. Do třídy Program přidejte následující metody, které reprezentují sadu akcí a jejich funkce.
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;
}
Získání uživatelských předvoleb pro kontext
Do třídy Program přidejte následující metody pro získání vstupu uživatele z příkazového řádku pro denní dobu a aktuální předvolbu jídla. Budou se používat jako kontextové funkce.
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];
}
Obě metody používají GetKey metodu ke čtení výběru uživatele z příkazového řádku.
private static string GetKey()
{
return Console.ReadKey().Key.ToString().Last().ToString().ToUpper();
}
Vytvoření smyčky učení
Smyčka učení personalizátoru je cyklus volání Rank a Reward. V tomto rychlém startu každý hovor Rank (Pořadí) pro přizpůsobení obsahu následuje volání Reward, které službě Personalizace řekne, jak dobře služba prováděných.
Následující kód prochází cyklus dotazování uživatele na příkazovém řádku, odeslání těchto informací službě Personalizér, aby vybral nejlepší akci, prezentuje výběr zákazníka, který si může vybrat ze seznamu, a pak pošle skóre odměny službě Personalizer, která bude signalizována, jak dobře služba ve svém výběru dělali.
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);
}
Před spuštěním souboru s kódem přidejtenásledující metody, které volby obsahu 1:
GetActionsGetUsersTimeOfDayGetUsersTastePreferenceGetKey
Žádost o nejlepší akci
Aby bylo možné dokončit požadavek Rank (Pořadí), požádá program uživatele o vytvoření volby currentContext obsahu. Proces může vytvořit obsah, který se vyloučí z akcí zobrazených jako excludeActions . Požadavek Rank potřebuje akce a jejich funkce, funkce currentContext, excludeActions a jedinečné ID události pro příjem odpovědi.
Tento rychlý start obsahuje jednoduché kontextové funkce denní doby a preferencí potravin pro uživatele. V produkčních systémech může být stanovení a vyhodnocení akcí a funkcí netýkající se triviální věci.
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);
Odeslání odměny
Aby program získá skóre odměny, které má odeslat v žádosti o odměnu, získá výběr uživatele z příkazového řádku, přiřadí k výběru číselnou hodnotu a pak odešle jedinečné ID události a skóre odměny jako číselnou hodnotu do rozhraní Reward API.
V tomto rychlém startu se jako skóre odměny přiřadí jednoduché číslo, a to buď nula, nebo 1. V produkčních systémech může být určení, kdy a co odeslat do hovoru Reward, netýkající se jen triviální záležitosti v závislosti na vašich konkrétních potřebách.
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));
Spuštění programu
Spusťte aplikaci pomocí příkazu dotnet run z adresáře vaší aplikace.
dotnet run

Zdrojový kód pro tento rychlý start je k dispozici.
Referenční dokumentace | Zdrojový kód knihovny | Balíček (NPM) | Ukázky
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma.
- Nainstalujte Node.js a NPM (ověřené pomocí Node.js v14.16.0 a NPM 6.14.11).
- Jakmile máte předplatné Azure, vytvořte si prostředek Služby personalizátoru v Azure Portal a získejte bod. Po nasazení klikněte na Přejít k prostředku.
- Klíč a koncový bod z prostředku, který vytvoříte, budete potřebovat pro připojení aplikace k rozhraní API služby Personalizér. Svůj klíč a koncový bod vložíte do kódu níže v pozdější části tohoto rychlého startu.
- K vyzkoušejí služby můžete použít bezplatnou cenovou úroveň ( ) a později upgradovat
F0na placenou úroveň pro produkční prostředí.
Nastavení
Změna frekvence aktualizace modelu
V Azure Portal změňte v prostředku přizpůsobeném na stránce Konfigurace Četnost aktualizace modelu na 30 sekund. Tato krátká doba bude službu vytvářet rychle, což vám umožní zjistit, jak se hlavní akce mění pro každou iteraci.

Když se poprvé vytvoří instance smyčky pro přizpůsobení, neexistuje žádný model, protože neexistovala žádná Neplatní volání rozhraní API pro vlak. Volání Rank budou pro každou položku vracet stejné pravděpodobnosti. Vaše aplikace by měla stále vždy Seřadit obsah pomocí výstupu RewardActionId.
Změna doby čekání na odměnu
V Azure Portal prostředku Personalizační služby na stránce Konfigurace změňte dobu čekání Reward na 30 sekund. Tato krátká doba rychle vytrénuje službu, abyste viděli, jak se u každé iterace mění hlavní akce.

Vytvoření nové aplikace Node.js
V okně konzoly (například cmd, PowerShell nebo Bash) vytvořte nový adresář pro vaši aplikaci a přejděte do něj.
mkdir myapp && cd myapp
Spuštěním npm init -y příkazu vytvořte package.json soubor.
npm init -y
Vytvořte novou aplikaci pro Node.js v upřednostňovaném editoru nebo integrovaném vývojovém prostředí (IDE) s názvem a vytvořte proměnné pro koncový bod vašeho prostředku a sample.js klíč předplatného.
Důležité
Přejděte na Azure Portal. Pokud se prostředek přizpůsobeného přizpůsobování, který jste vytvořili v části předpoklady , nasadil úspěšně, klikněte v části Další kroky na tlačítko Přejít k prostředku . Klíč a koncový bod můžete najít na stránce klíč a koncový bod prostředku v části Správa prostředků.
Nezapomeňte odebrat klíč z kódu, až budete hotovi, a nikdy ho zveřejnit. V případě produkčního prostředí zvažte použití zabezpečeného způsobu ukládání a přístupu k vašim přihlašovacím údajům. Například Trezor klíčů Azure.
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";
Instalace knihovny Node.js pro personalizér
Pomocí následujícího příkazu nainstalujte klientskou knihovnu Node.js personalizátoru pro službu Personalizér:
npm install @azure/cognitiveservices-personalizer --save
Pro tento rychlý start nainstalujte zbývající balíčky NPM:
npm install @azure/ms-rest-azure-js @azure/ms-rest-js readline-sync uuid --save
Objektový model
Klient Personalizační služby je objekt PersonalizerClient, který se ověřuje v Azure pomocí Microsoft.Rest.ServiceClientCredentials, který obsahuje váš klíč.
Pokud chcete požádat o jednu nejlepší položku obsahu, vytvořte požadavek RankRequesta pak ho předejte klientovi. Metoda Rank. Metoda Rank vrátí rankResponse.
Pokud chcete odeslat odměnu do služby Personalizer, vytvořte žádost RewardRequesta pak ji předejte metodě Reward ve třídě Events.
Určení odměny je v tomto rychlém startu triviální. V produkčním systému se určení toho, co ovlivňuje skóre odměny a kolik může být složitý proces, můžete rozhodnout, že se v průběhu času změníte. Mělo by jít o jedno z hlavních rozhodnutí při návrhu v architektuře Personalizátoru.
Příklady kódu
Tyto fragmenty kódu ukazují, jak pomocí klientské knihovny Personalizační služby pro Node.js:
Ověření klienta
Vytvořte instanci s PersonalizerClient objektem a serviceKey , který jste baseUri vytvořili dříve.
const credentials = new CognitiveServicesCredentials(serviceKey);
// Initialize Personalization client.
const personalizerClient = new Personalizer.PersonalizerClient(credentials, baseUri);
Získání možností obsahu vyjádřených jako akce
Akce představují volby obsahu, ze kterých má personalizátor vybrat nejlepší položku obsahu. Do třídy Program přidejte následující metody, které reprezentují sadu akcí a jejich funkce.
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
}
]
}
];
}
Vytvoření smyčky učení
Smyčka učení personalizátoru je cyklus volání Rank a Reward. V tomto rychlém startu každý hovor Rank (Pořadí) pro přizpůsobení obsahu následuje volání Reward, které službě Personalizace řekne, jak dobře služba prováděných.
Následující kód prochází cyklus dotazování uživatele na příkazovém řádku, odeslání těchto informací službě Personalizér, aby vybral nejlepší akci, prezentuje výběr zákazníka, který si může vybrat ze seznamu, a pak pošle odměnu službě Personalizer, která signalizována, jak dobře služba při výběru dělali.
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);
V následujících částech se blíže podíváme na volání k pořadí a odměně.
Před spuštěním souboru s kódem přidejtenásledující metody, které mají volby obsahu :
- getActionsList
- getContextFeaturesList
Žádost o nejlepší akci
Aby bylo možné dokončit požadavek Rank (Pořadí), program požádá uživatele o předvolby, aby vytvořil volby obsahu. Proces může vytvořit obsah, který se vyloučí z akcí zobrazených jako excludeActions . Požadavek Rank potřebuje akce a jejich funkce, funkce currentContext, excludeActions a jedinečné ID události pořadí pro příjem seřazené odpovědi.
Tento rychlý start obsahuje jednoduché kontextové funkce denní doby a preferencí potravin pro uživatele. V produkčních systémech může být určení a vyhodnocení akcí a funkcí netýkající se triviální věci.
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);
Odeslání odměny
Aby program získá skóre odměny, které má odeslat v žádosti o odměnu, získá výběr uživatele z příkazového řádku, přiřadí k výběru číselnou hodnotu a pak odešle jedinečné ID události a skóre odměny jako číselnou hodnotu do rozhraní Reward API.
V tomto rychlém startu se jako skóre odměny přiřadí jednoduché číslo, a to buď nula, nebo 1. V produkčních systémech může být určení, kdy a co odeslat do hovoru Reward, netýkající se jen triviální záležitosti v závislosti na vašich konkrétních potřebách.
const rewardRequest = {
value: reward
}
await personalizerClient.events.reward(rankRequest.eventId, rewardRequest);
Spuštění programu
Spusťte aplikaci s příkazem Node.js z adresáře vaší aplikace.
node sample.js

Referenční dokumentace | Zdrojový kód knihovny | Balíček (PyPi) | Ukázky
Požadavky
- Předplatné Azure – Vytvořte si ho zdarma .
- Python 3.x
- Jakmile budete mít předplatné Azure, vytvořte prostředek přizpůsobeného přizpůsobeného prostředku v Azure Portal, abyste získali svůj klíč a koncový bod. Po nasazení klikněte na Přejít k prostředku.
- K připojení aplikace k rozhraní API pro přizpůsobení budete potřebovat klíč a koncový bod z prostředku, který vytvoříte. Svůj klíč a koncový bod vložíte do níže uvedeného kódu později v rychlém startu.
- K vyzkoušení služby můžete použít bezplatnou cenovou úroveň (
F0) a upgradovat ji později na placenou úroveň pro produkční prostředí.
Nastavení
Změna frekvence aktualizace modelu
V Azure Portal změňte v prostředku přizpůsobeném na stránce Konfigurace Četnost aktualizace modelu na 30 sekund. Tato krátká doba bude službu vytvářet rychle, což vám umožní zjistit, jak se hlavní akce mění pro každou iteraci.

Když se poprvé vytvoří instance smyčky pro přizpůsobení, neexistuje žádný model, protože neexistovala žádná Neplatní volání rozhraní API pro vlak. Volání Rank budou pro každou položku vracet stejné pravděpodobnosti. Vaše aplikace by měla stále vždy Seřadit obsah pomocí výstupu RewardActionId.
Změna doby čekání na odměnu
V Azure Portal prostředku Personalizační služby na stránce Konfigurace změňte dobu čekání Reward na 30 sekund. Tato krátká doba rychle vytrénuje službu, abyste viděli, jak se u každé iterace mění hlavní akce.

Instalace klientské knihovny
Po instalaci Pythonu můžete nainstalovat klientskou knihovnu pomocí nástroje:
pip install azure-cognitiveservices-personalizer
Vytvoření nové aplikace v Pythonu
Vytvořte nový soubor Pythonu a vytvořte proměnné pro koncový bod prostředku a klíč předplatného.
Důležité
Přejděte na Azure Portal. Pokud se prostředek přizpůsobeného přizpůsobování, který jste vytvořili v části předpoklady , nasadil úspěšně, klikněte v části Další kroky na tlačítko Přejít k prostředku . Klíč a koncový bod můžete najít na stránce klíč a koncový bod prostředku v části Správa prostředků.
Nezapomeňte odebrat klíč z kódu, až budete hotovi, a nikdy ho zveřejnit. V případě produkčního prostředí zvažte použití zabezpečeného způsobu ukládání a přístupu k vašim přihlašovacím údajům. Například Trezor klíčů Azure.
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>"
Objektový model
Klient pro přizpůsobování je objekt PersonalizerClient , který se ověřuje v Azure pomocí Microsoft. REST. ServiceClientCredentials, který obsahuje váš klíč.
Pokud chcete požádat o jednu nejlepší položku obsahu, vytvořte RankRequesta pak ji předejte klientovi. Rank – metoda Metoda Rank vrátí RankResponse.
Chcete-li odeslat skóre odměna do přizpůsobeného, nastavte ID události a skóre (hodnota) pro odeslání na metodu odměňování do třídy EventOperations.
Stanovení odměňování je v tomto rychlém startu triviální. V produkčním systému se určení toho, co ovlivňuje skóre záměna a kolik může být složitý proces, se může stát, že se v průběhu času rozhodnete změnit. To by mělo být jedno z primárních rozhodnutí o návrhu v architektuře pro přizpůsobování.
Příklady kódu
Tyto fragmenty kódu ukazují, jak provést následující akce pomocí klientské knihovny pro přizpůsobování pro Python:
Ověření klienta
Vytvořte instanci PersonalizerClient s a, key kterou endpoint jste vytvořili dříve.
# Instantiate a Personalizer client
client = PersonalizerClient(endpoint, CognitiveServicesCredentials(key))
Získat možnosti obsahu reprezentované jako akce
Akce reprezentují volby obsahu, ze kterých chcete přizpůsobovat výběr nejlepší položky obsahu. Do třídy program přidejte následující metody, které reprezentují sadu akcí a jejich funkcí.
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
Vytvoření výukové smyčky
Výuková smyčka pro přizpůsobování je cyklem volání pořadí a odměňování . V tomto rychlém startu každé volání pořadí pro přizpůsobení obsahu je následováno voláním odměna, které přizpůsobuje, jak dobře se služba provádí.
Následující smyčka kódu projde cyklem, který uživateli požádá o jejich Předvolby na příkazovém řádku, aby si vybrali nejlepší akci, která prezentuje výběr zákazníkovi, který si zvolí ze seznamu, a pak pošle do přizpůsobené signalizaci, jak dobře služba vybrala.
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
Přidejte následující metody, které získají volby obsahupřed spuštěním souboru kódu:
get_user_preferenceget_user_timeofdayget_actions
Požádat o nejlepší akci
Chcete-li dokončit požadavek na řazení, program požádá o předvolby uživatele, aby vytvořil currentContent Výběr obsahu. Proces může vytvořit obsah, který se má vyloučit z akcí, které jsou zobrazené jako excludeActions . Požadavek na řazení potřebuje pro příjem odpovědi akce a jejich funkce, currentContext funkce, excludeActions a jedinečné ID události.
Tento rychlý Start má jednoduché kontextové funkce pro denní prioritu a uživatelské preference. V produkčních systémech může být určení a vyhodnocení akcí a funkcí netriviální.
rank_request = RankRequest( actions=actions, context_features=context, excluded_actions=['juice'], event_id=eventid)
response = client.rank(rank_request=rank_request)
Poslat odměnu
Chcete-li získat skóre odměňování v žádosti o odměnu, program získá výběr uživatele z příkazového řádku, přiřadí číselnou hodnotu výběru a pak odešle jedinečné ID události a skóre odměňování jako číselnou hodnotu pro rozhraní API pro odměnu.
V tomto rychlém startu se přiřadí jednoduché číslo jako skóre odměňování, buď nula, nebo 1. V produkčních systémech může být určení, kdy a co má být odesláno volání odměna , v závislosti na konkrétních potřebách netriviální povahy.
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)
Spuštění programu
Spusťte aplikaci s Pythonem z adresáře vaší aplikace.
python sample.py

Vyčištění prostředků
Pokud chcete vyčistit a odebrat předplatné Cognitive Services, můžete prostředek nebo skupinu prostředků odstranit. Odstraněním skupiny prostředků se odstraní také všechny další prostředky, které jsou k ní přidružené.