QnA Maker - Невозможно обновить базу знаний программно - PullRequest
0 голосов
/ 04 января 2019

Я использую QnA Maker v4.0 и пытаюсь программно обновить свою базу знаний, используя C #, и следую документации, предоставленной в:

https://westus.dev.cognitive.microsoft.com/docs/services/5a93fcf85b4ccd136866eb37/operations/5ac266295b4ccd1554da7600

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

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

ЧтоДо сих пор я пытался следовать документации следующим образом:

Добавить новый вопрос пара ответов

string json = "{\"add\":{\"qnaList\":[{\"id\":123456789,\"answer\":\"fooanswer\",\"source\":\"Editorial\",\"questions\":[\"fooquestion\"],\"metadata\":null},{\"id\":987654321,\"answer\":\"fooanswer2\",\"source\":\"Editorial\",\"questions\":[\"fooquestion2\"],\"metadata\":null}],\"urls\":null,\"files\":null},\"delete\":null,\"update\":null}"

public async void UpdateKnowledgeBase(string json)
    {
    var knowledgebaseid = "<my kb id>";
    var client = new HttpClient();
    var querystring = HttpUtility.ParseQueryString(string.Empty);
    // Request headers
    client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "QnA Subscription Key>");
    var uri = "https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/"+ this.KnowledgeBaseId + "?" + querystring; 

    // Request body
    byte[] byteData = Encoding.UTF8.GetBytes(json);
    using (var content = new ByteArrayContent(byteData))
        {
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var method = new HttpMethod("PATCH");
            var request = new HttpRequestMessage(method, uri)
                {
                    Content = content
                };
                HttpResponseMessage response;
                response = await client.SendAsync(request);
        }
    }

Это создаст пару вопросов и ответов в моих знанияхbase: Question and answers pair created programmatically in the KB

Удаление пары вопросов и ответов

Однако, если я попытаюсь сейчас следовать документации и удалить вопрос и ответпара с id 123456789, ничего не произойдет.Для этого я делаю:

json = "{\"add\":null,\"delete\":{\"ids\":[123456789],\"sources\":null},\"update\":null}"

И после вызова метода UpdateKnowledgeBase с этим json я не получу никакой ошибки, но моя пара вопросов и ответов по-прежнему отображается на портале QnA Maker.Если я добавлю источник, он удалит все редакционные источники.Это нормально, но я также хочу удалить только одну пару, а не все.Возможно ли это?

Обновление существующей пары вопросов и ответов

При обновлении существующей пары вопросов и ответов у меня возникает та же проблема, я не получаю никакойпо ошибке, но я не вижу изменений на портале QnA Maker, что заставляет меня думать, что никаких изменений не делается.

Поэтому мой вопрос: как я могу обновить и / или удалить пары вопросов и ответов, не удаляя весь источник?

Заранее спасибо!

1 Ответ

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

Удаление пары вопросов и ответов

Я проверил ваш случай с теми же значениями для создания и удаления.

Проблема в вашем случае заключается в том, что значение id выпри добавлении элемента значение, указанное на этапе add, изменяется: даже если я добавлю "id": 123456789, , созданный элемент имеет значение id, которое представляет собой приращение текущего идентификатора, существующего в моей базе знаний.

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

Чтобы убедиться, что у вас возникла та же проблема, проверьте идентификатор добавленного элемента.загрузив КБ (GET в https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/:kbId/:environment/qna,, где :kbId - это идентификатор вашей базы знаний, а :environment - Test или Prod).


Обновлениесуществующая пара вопросов и ответов

Полагаю, здесь то же самое: возможно, вы пытаетесь обновить идентификатор, который на самом деле не тот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...