Публикация базы знаний через QnAMaker v4 API - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь перенести моего бота из API QnAMaker v2 в API QnAMaker v4.Я могу отправлять обновления в базу знаний, но публикация, похоже, не занимает.Вот код, который я использую.

    static void Main(string[] args)
    {
        MainAsync(args).Wait();
    }

    static async Task MainAsync(string[] args)
    {
        Console.WriteLine("We're starting.");
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", mySubKey);
        var uri = new Uri($"https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/{myKBId}");
        var payload = "{\"add\": {\"qnaList\": [{\"id\": 0,\"answer\": \"A woodchuck could chuck all the wood he could chuck if a woodchuck could chuck wood.\",\"source\": \"Custom Editorial\",\"questions\": [\"How much wood could a woodchuck chuck if a woodchuck could chuck wood?\"],\"metadata\": []}]},\"delete\": {},\"update\": {}}";
        var method = new HttpMethod("PATCH");
        var request = new HttpRequestMessage(method, uri);
        request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
        var response = await client.SendAsync(request);
        var responseMessage = await response.Content.ReadAsStringAsync();
        Console.Write(responseMessage);
        Console.ReadLine();
        method = new HttpMethod("POST");
        payload = "";
        request = new HttpRequestMessage(method, uri);
        request.Content = new StringContent(payload, Encoding.UTF8, "application/json");
        response = await client.SendAsync(request);
        responseMessage = await response.Content.ReadAsStringAsync();
        Console.WriteLine(responseMessage);
        Console.ReadLine();

    }

Мой тестовый процесс

  1. Спросите бота о сурках.
  2. Запустите этот код.
  3. Убедитесь, что пара q / a о сурках есть в базе знаний.
  4. Снова спросите бота о сурках.

Пока что API отвечает, как и ожидалось, но мой бот остаетсяне обращая внимания на критические знания о сурке, пока я не нажму "опубликовать" на сайте qnamaker.ai.Чего мне не хватает?

1 Ответ

0 голосов
/ 05 июня 2018

Исходя из вашего кода, вы отправляете первый запрос на обновление базы знаний , будет выполняться асинхронная операция, и сообщение, подобное приведенному ниже, будет записано в вашем окне консоли.

enter image description here

Мы можем найти operationState is NotStarted, вам необходимо отследитьoperationState и публикуйте свою Базу знаний, пока operationState не станет Succeeded.

Вы можете обратиться к "Обновлению базы знаний" обновить существующую базу знаний и отследить operationState на основе идентификатор операции .

Фрагмент кода из "Обновить базу знаний":

var done = false;
while (true != done)
{
    response = await GetStatus(operation);
    Console.WriteLine(PrettyPrint(response.response));

    var fields = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.response);

    String state = fields["operationState"];
    if (state.CompareTo("Running") == 0 || state.CompareTo("NotStarted") == 0)
    {
        var wait = response.headers.GetValues("Retry-After").First();
        Console.WriteLine("Waiting " + wait + " seconds...");
        Thread.Sleep(Int32.Parse(wait) * 1000);
    }
    else
    {
        Console.WriteLine("Press any key to continue.");
        done = true;
    }
}
...