Я пытаюсь реализовать код C#
, который может добавлять высказывания в мои Luis API
, как это показано в этом руководстве .
Так что меня интересует толькофункцию AddUtterances()
и чтобы проверить ее, я включил ее в функцию ShowLuisResult()
, чтобы убедиться, что она будет использоваться каждый раз, когда я отправляю сообщение в чат-бота, но когда я смотрю в API, я вижу, что никакое высказывание не добавляется...
Я поместил файл utterances.json
в то же место, что и BasicLuisDialog.cs
, и в /d/home
в консоли kudu
, чтобы убедиться, что он работает.
Вот код:
using System;
using System.Configuration;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Builder.Luis;
using Microsoft.Bot.Builder.Luis.Models;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net.Http;
using System.Xml.Linq;
namespace Microsoft.Bot.Sample.LuisBot
{
// For more information about this template visit http://aka.ms/azurebots-csharp-luis
[Serializable]
public class BasicLuisDialog : LuisDialog<object>
{
// NOTE: Replace this example LUIS application ID with the ID of your LUIS application.
static string appID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
// NOTE: Replace this example LUIS application version number with the version number of your LUIS application.
static string appVersion = "0.1";
// NOTE: Replace this example LUIS authoring key with a valid key.
static string authoringKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
static string host = "https://westus.api.cognitive.microsoft.com";
static string path = "/luis/api/v2.0/apps/" + appID + "/versions/" + appVersion + "/";
public BasicLuisDialog() : base(new LuisService(new LuisModelAttribute(
ConfigurationManager.AppSettings["LuisAppId"],
ConfigurationManager.AppSettings["LuisAPIKey"],
domain: ConfigurationManager.AppSettings["LuisAPIHostName"])))
{
}
[LuisIntent("None")]
public async Task NoneIntent(IDialogContext context, LuisResult result)
{
await this.ShowLuisResult(context, result);
}
// Go to https://luis.ai and create a new intent, then train/publish your luis app.
// Finally replace "Greeting" with the name of your newly created intent in the following handler
[LuisIntent("Greeting")]
public async Task GreetingIntent(IDialogContext context, LuisResult result)
{
await this.ShowLuisResult(context, result);
}
[LuisIntent("Cancel")]
public async Task CancelIntent(IDialogContext context, LuisResult result)
{
await this.ShowLuisResult(context, result);
}
[LuisIntent("Help")]
public async Task HelpIntent(IDialogContext context, LuisResult result)
{
await this.ShowLuisResult(context, result);
}
private async Task ShowLuisResult(IDialogContext context, LuisResult result)
{
AddUtterances("utterances.json");
await context.PostAsync($"You have reached {result.Intents[0].Intent}. You said: {result.Query}");
context.Wait(MessageReceived);
}
async static Task AddUtterances(string input_file)
{
string uri = host + path + "examples";
string requestBody = File.ReadAllText(input_file);
var response = await SendPost(uri, requestBody);
var result = await response.Content.ReadAsStringAsync();
}
async static Task<HttpResponseMessage> SendPost(string uri, string requestBody)
{
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(uri);
request.Content = new StringContent(requestBody, Encoding.UTF8, "text/json");
request.Headers.Add("Ocp-Apim-Subscription-Key", authoringKey);
return await client.SendAsync(request);
}
}
}
}
А вот содержание utterances.json
:
[
{
"text": "go to Seattle",
"intentName": "Help",
"entityLabels": []
},
{
"text": "book a flight",
"intentName": "Greeting",
"entityLabels": []
}
]