1744537768
2025-04-10 22:47:00
前回のブログで、私たちは議論しました Optimizely CMS WebサイトをAzure AI検索と統合します。それでは、もう少し高度なトピックを取り、Azure Ai検索でAzure Personalizerを使用してパーソナライズエクスペリエンスを提供しましょう。一緒に、ユーザーの動作、好み、コンテキスト全体で動的なカスタマイズされたコンテンツと検索結果を提供できます。
Azure Personalizerとは何ですか?
補強学習を使用したリアルタイムアソシエーションのためのAzure Personalizer Cognitive Service。過去の行動と現在のコンテキストによって通知されたユーザーに最も関連するコンテンツまたはエクスペリエンスを提供する能力を提供します。
AIパーソナルイザーの利点:
- そのため、人々がそれに従事するにつれて勉強し、進化することができます。
- 検索結果をランキングするのに驚くほど役立ちます。
- 直接的な呼び出しを行動、強調表示された記事、または商品をカスタマイズできます。
Azure AI検索と最適化の仕組み
- ユーザーは、Optimizelyサイトで検索を実行します。
- Azure AI検索は、一致するドキュメントのリストを提供するだけです
- これらのドキュメントは、「Azure Personalizer」に「ランク付け可能なアクション。」
- パーソナライズされた注文は、ユーザーのコンテキストを使用して結果をもたらします。
- アプリはパーソナライズされた結果を提供し、ユーザーのフィードバックはPersonalizerがさらに学習および進化するのに役立ちます。
Azure Personalizerをセットアップします
- Azure Portal→Personalizerリソース作成に移動します
- エンドポイントとAPIキーを保存します。
- ステップ3で、ランク付けするコンテンツを指定します(つまり、検索結果)
統合コード
ランク付け可能なアクションのモデル
public class RankableDocument
{
public string Id { get; set; }
public string Title { get; set; }
public string Summary { get; set; }
public string Category { get; set; }
}
コンテキストを使用してPersonalizerに情報を送信します。
private object GetUserContext(HttpRequestBase request)
{
return new
{
timeOfDay = DateTime.Now.Hour,
device = request.Browser.IsMobileDevice ? "mobile" : "desktop",
userAgent = request.UserAgent,
language = request.UserLanguages?.FirstOrDefault() ?? "en"
};
}
public async Task> GetPersonalizedResultsAsync(List documents, string userId)
{
var contextFeatures = new[] { GetUserContext(Request) };
var actions = documents.Select(doc => new
{
id = doc.Id,
features = new[]
{
new { category = doc.Category },
new { title = doc.Title }
}
});
_eventId = Guid.NewGuid().ToString();
var request = new
{
contextFeatures = contextFeatures,
actions = actions,
excludedActions = new string[] {},
eventId = _eventId,
deferActivation = false
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "--YOUR API KEY ---");
var response = await client.PostAsync("--Endpoint--/personalizer/v1.0/rank",
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"));
var result = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
var topActionId = result.RootElement.GetProperty("rewardActionId").GetString();
return documents.OrderByDescending(d => d.Id == topActionId).ToList();
}
それでは、検索ページコントローラーの以前の例を考えてみましょう。
検索コントローラー
public class AzureSearchPageController : PageController
{
private static string _eventId;
public async Task Index(AzureSearchPage currentPage, string q = "")
{
var results = new List();
if (!string.IsNullOrEmpty(q))
{
var url = $"https://.search.windows.net/indexes//docs?api-version=2021-04-30-Preview&search={q}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("api-key", "");
var response = await client.GetStringAsync(url);
var doc = JsonDocument.Parse(response);
results = doc.RootElement.GetProperty("value")
.EnumerateArray()
.Select(x => new RankableDocument
{
Id = x.GetProperty("id").GetString(),
Title = x.GetProperty("name").GetString(),
Category = x.GetProperty("type").GetString(),
Summary = x.GetProperty("content").GetString()
}).ToList();
results = await GetPersonalizedResultsAsync(results, "user123");
}
ViewBag.Results = results;
ViewBag.Query = q;
ViewBag.EventId = _eventId;
return View(currentPage);
}
[HttpPost]
public async Task Reward(string eventId, double rewardScore)
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "");
var rewardUrl = $"/personalizer/v1.0/events/{eventId}/reward";
var result = await client.PostAsync(rewardUrl, new StringContent(rewardScore.ToString(), Encoding.UTF8, "application/json"));
return Json(new { success = result.IsSuccessStatusCode });
}
}
ページビューを検索します
@model AzureSearchPage
@foreach (var result in ViewBag.Results as List)
{
-
@result.Title
@result.Summary
}
Azure AI検索が関連する結果を提供し、Azure Personalizerがリアルタイムコンテキストに基づいてそれらを再ランキングすることで、Optimizelyサイトはインテリジェントエクスペリエンスエンジンになります。
#Azure #AIおよびPersonalizerで最適に検索をパーソナライズします