Как программно получить идентификатор пары в QnA Maker v4.0? - PullRequest
0 голосов
/ 04 января 2019

Я программно строю 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, кто-нибудь знает, почему это происходит?

1 Ответ

0 голосов
/ 04 января 2019

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

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

Архитектура следующая, и конечная точка, которую вы ищете, находится на зеленой стороне, а не на голубой: enter image description here

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

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

enter image description here

...