Как использовать REST API QnA Maker для обновления моей базы знаний с использованием собственного JavaScript?

1

Я пытаюсь использовать API REST Azure для обновления базы знаний, созданной мной с помощью QnA Maker. Там есть ссылка для перехода на консоль тестирования API.

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

function synchronize() {

    var jsonData = {
        "add": {
            "qnaList":[
                {"source": "Custom"},
                {"answer": "Hello"},
                {"questions": ["Hi", "Hello"]}
            ],
        },
        "delete": {
            "sources": ["Custom"]
        },
        "update": {}
    }   

    var request = new XMLHttpRequest();    
    var parameters = {
        "body": jsonData
    }
    request.open("POST", "https://qnawcfaq.azurewebsites.net/qnamaker/knowledgebases/{kbId}}/generateAnswer", true);                    
    request.setRequestHeader("Authorization", "EndpointKey {key}}");
    request.setRequestHeader("Content-type", "application/json");                    
    request.onreadystatechange = function () { //Call a function when the state changes.
        if (request.readyState == 4 && request.status == 200) {
            alert(request.responseText);
        }
    }

    request.send(JSON.stringify(parameters));
}

Я ожидаю что-то вроде следующего:

{
  "operationState": "NotStarted",
  "createdTimestamp": "2018-03-19T07:38:46Z",
  "lastActionTimestamp": "2018-03-19T07:39:29Z",
  "userId": "86bb8390-56c0-42c2-9f81-3de161981191",
  "operationId": "03a4f4ce-30a6-4ec6-b436-02bcdf6153e1"
}

Однако я получаю следующую ошибку:

{
  "error": {
    "code": "BadArgument",
    "message": "Authorization"
  }
}

Значение, которое я использовал в Ocp-Apim-Subscription-Key, работает против их консоли тестирования API, но не работает с приведенным выше кодом. Есть идеи, что мне здесь не хватает?

Спасибо!

Рабочее решение загружено в Github: решение

  • 0
    Вы ошибаетесь, и заголовок "Ocp-Apim-Subscription-Key"
  • 0
    @FrV FRV, можете ли вы указать правильный URI и заголовок? Можете ли вы привести пример, пожалуйста? Спасибо!
Теги:
azure
rest
qnamaker

1 ответ

0
Лучший ответ

Обновление 1: после прочтения вопроса спрашивающий хочет создать пару QnAMaker, а не просто запросить ее. Документация по API QnAMaker не очень хороша, а в некоторых случаях устарела или сбивает с толку. Следовательно, я делюсь подсказками для обоих сценариев.

Сценарий 1. Создание пар QnAMaker

Создать пары QnAMaker немного сложнее, и я бы порекомендовал начать с образца С# и его Program.cs. Оттуда вы можете преобразовать его в сценарий Java. В документации есть примеры и для других языков, например для nodejs.

Подсказка: запустите Fiddler, пока выполняете сэмплы. Таким образом, вы можете проверить вызов по вызову и порт для почтальона или композитора для ваших тестов.

Исходя из исходного вопроса, правильный вызов выглядит так:

// Replace {key} with your QnAMaker endpoint key 
// and {kbId} with the id of the knowledgebase you want to upgrade.

function synchronize() {
    var jsonData = {
        qnaList: [
          {
            id: 0,
            answer: 'Hello',
            source: 'Custom Editorial',
            questions: [
              'Hi','Hello'
            ],
            metadata: [
              {
                name: 'category',
                value: 'api'
              }
            ]
          }
        ]
    }

    var request = new XMLHttpRequest();    

    request.open("PATCH", "https://westus.api.cognitive.microsoft.com/qnamaker/v4.0/knowledgebases/{kbId}", true);                    
    request.setRequestHeader("Ocp-Apim-Subscription-Key", "{key}");
    request.setRequestHeader("Content-type", "application/json");                    
    request.onreadystatechange = function () { 
        //Call a function when the state changes.
        if (request.readyState == 4) {
            alert(request.responseText);
        }
    }

    request.send(JSON.stringify(jsonData));
}

Сценарий 2: Запрос QnAMaker

Для POST/generateAnswer Ocp-Apim-Subscription-Key устарел, и вы должны использовать свой собственный uri (хост) вместо westus.api.cognitive.microsoft.com.

Когда летом прошлого года QnAMaker стал GA, определение заголовка и хоста изменилось.

Самый простой способ найти правильные настройки для всех ваших параметров - это перейти на портал QnAMaker и щелкнуть Просмотр кода в своей базе знаний. Изображение 174551

Оттуда вы найдете правильные настройки, чтобы скопировать его. Изображение 174551

Сопутствующее сравнение измененного определения ниже было опубликовано в объявлении ГА.

Изображение 174551

  • 0
    Я попытался сделать следующие изменения: `request.open (" POST "," {HOST_URL} ", true); request.setRequestHeader ("POST", "{POST_VALUE}"); request.setRequestHeader ("Host", "{HOST_VALUE}"); request.setRequestHeader ("Авторизация", "AUTH_VALUE"); `... но я получил следующую ошибку:` Отказался устанавливать небезопасный заголовок "Хост" `
  • 0
    Привет @ericute. Хост не заголовок. Это часть URL https: // {host} / Knowledgebases / xxx. Хорошо?
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню