Как программно получить идентификатор пары в QnA Maker v4.0?

Я программно создаю QnA, используя C #. Я хочу программно получить ответ на вопрос, для этого я использовал документацию, предоставленную Microsoft по следующей ссылке:

https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/csharp#GetAnswers

Однако, если я буду следовать инструкциям там:

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace QnAMaker
{
    class Program
    {
        // NOTE: Replace this with a valid host name.
        static string host = "ENTER HOST HERE";

        // NOTE: Replace this with a valid endpoint key.
        // This is not your subscription key.
        // To get your endpoint keys, call the GET /endpointkeys method.
        static string endpoint_key = "ENTER KEY HERE";

        // NOTE: Replace this with a valid knowledge base ID.
        // Make sure you have published the knowledge base with the
        // POST /knowledgebases/{knowledge base ID} method.
        static string kb = "ENTER KB ID HERE";

        static string service = "/qnamaker";
        static string method = "/knowledgebases/" + kb + "/generateAnswer/";

        static string question = @"
{
    'question': 'Is the QnA Maker Service free?',
    'top': 3
}
";

        async static Task<string> Post(string uri, string body)
        {
            using (var client = new HttpClient())
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(uri);
                request.Content = new StringContent(body, Encoding.UTF8, "application/json");
                request.Headers.Add("Authorization", "EndpointKey " + endpoint_key);

                var response = await client.SendAsync(request);
                return await response.Content.ReadAsStringAsync();
            }
        }

        async static void GetAnswers()
        {
            var uri = host + service + method;
            Console.WriteLine("Calling " + uri + ".");
            var response = await Post(uri, question);
            Console.WriteLine(response);
            Console.WriteLine("Press any key to continue.");
        }

        static void Main(string[] args)
        {
            GetAnswers();
            Console.ReadLine();
        }
    }
}

Вместо ответа я получаю ресурс, который не найден. В то время как другие методы, обновляющие базу знаний, хорошо работают с одним и тем же uri, кто-нибудь знает, почему это происходит?


person Marisa    schedule 04.01.2019    source источник


Ответы (1)


Это потому, что некоторые конечные точки API не являются общими, но доступны на хосте на вашей стороне.

Как сказано в документации, Replace the host value with the Website name for your QnA Maker subscription: хост не https://westus.api.cognitive.microsoft.com/...

Архитектура следующая, и конечная точка, которую вы ищете, находится на зеленой стороне, а не на синей:  введите описание изображения здесь

Вот почему вы не можете найти generateAnswer в документации https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/5ac266295b4ccd1554da75ff

Так что перейдите на https://www.qnamaker.ai/Home/MyServices, нажмите на свой QnA KB, опубликуйте его, если это еще не сделано, и тогда в настройках у вас будут интересные детали, как показано ниже:

введите здесь описание изображения

person Nicolas R    schedule 04.01.2019