1745648471
2025-04-25 23:19:00
で パート2、Azure AI検索をAzure Personalizerと統合して、Optimizely CMSでよりスマートでユーザー重視のエクスペリエンスを構築しました。 Serviceapiを使用して、CMSコンテンツをAzure AI検索に送信しました。パート3では、さらに一歩進んでいます。ユーザーが自然言語の質問をしてAIを搭載した回答を得ることができるようにします。
しかし、ここにひねりがあります:Serviceapiを使用する代わりに、今回はインデックス付きコンテンツを照会する方法を探ります 直接 Azure AI SearchのREST APIを使用します。
なぜ自然言語Q&A?
ユーザーが正確なキーワードを知らない場合があります。彼らは次のようなことを尋ねます:
「どのように製品を返すことができますか?」
「デモを予約できますか?」
AzureのOpenaiとAzure AI検索のセマンティック機能により、Webサイトはこれらのクエリを理解し、役立つコンテキストの応答を提供できるようになりました。
アーキテクチャの概要
更新されたフロー
- CMSコンテンツは、Azure AI検索(ServiceapiまたはCrawlerを介して)によってインデックス付けされます。
- 検索インデックスには、セマンティック設定が強化されています。
- ユーザーは自然言語クエリを入力します。
- バックエンドは、Azure Searchのセマンティック検索 + Azure Openai(チャット/完了API)を使用して、コンテキストの回答を返します。
Azure Search APIを使用してコンテンツを抽出します
Azure Search Rest APIを使用して、インデックス付きコンテンツに直接アクセスできます。上位5つの結果を取得する方法の例は次のとおりです。
public async Task> SearchAzureContentAsync(string query)
{
var searchServiceName = "";
var indexName = "";
var apiKey = "";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("api-key", apiKey);
var url = $"https://{searchServiceName}.search.windows.net/indexes/{indexName}/docs?api-version=2021-04-30-Preview&search={query}&$top=5";
var result = await client.GetStringAsync(url);
var json = JsonDocument.Parse(result);
var docs = new List();
foreach (var item in json.RootElement.GetProperty("value").EnumerateArray())
{
docs.Add(item.GetProperty("content").GetString());
}
return docs;
}
Azure Openaiを使用して回答を生成します
関連するドキュメントを取得したら、それらをAzure Openaiに渡して、文脈的な答えを生成します。
public async Task AskOpenAiAsync(string question, List context)
{
var prompt = $"""
You are a helpful assistant. Based on the following content, answer the question:
{string.Join("nn", context)}
Question: {question}
Answer:
""";
var openAiKey = "";
var endpoint = "https://.openai.azure.com/openai/deployments//completions?api-version=2022-12-01";
var payload = new
{
prompt = prompt,
temperature = 0.7,
max_tokens = 200
};
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("api-key", openAiKey);
var response = await client.PostAsync(endpoint, new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"));
var result = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
return result.RootElement.GetProperty("choices")[0].GetProperty("text").GetString();
}
Optimizely CMSと統合します
このようなコントローラーを作成できます。
public class QnAController : Controller
{
[HttpPost]
public async Task Ask(string question)
{
var docs = await SearchAzureContentAsync(question);
var answer = await AskOpenAiAsync(question, docs);
return Json(new { answer });
}
}
そしてあなたの見解について:
まとめ
これにより、最終的なパズルのピースがまとめられています。ユーザーが最適化のサイトで自由に話すようにし、AIはリアルタイムで解釈して応答します。コンテンツのインデックス作成から再ランキング、フルオンのQ&Aまで、CMSはインテリジェントで、会話型、ユーザーファーストになりました。
これを実際に見たいですか?サンプルのレポとビデオのウォークスルーをお楽しみに!
このシリーズの最初の部分、 Optimizely CMSとAzure AI検索の統合 – サイト検索のゲームチェンジャー
#azure #search #openaiを使用して最適にAI #QAを構築する