Я пытаюсь использовать 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: решение
Обновление 1: после прочтения вопроса спрашивающий хочет создать пару QnAMaker, а не просто запросить ее. Документация по API 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));
}
Для POST/generateAnswer
Ocp-Apim-Subscription-Key
устарел, и вы должны использовать свой собственный uri (хост) вместо westus.api.cognitive.microsoft.com
.
Когда летом прошлого года QnAMaker стал GA, определение заголовка и хоста изменилось.
Самый простой способ найти правильные настройки для всех ваших параметров - это перейти на портал QnAMaker и щелкнуть Просмотр кода в своей базе знаний.
Оттуда вы найдете правильные настройки, чтобы скопировать его.
Сопутствующее сравнение измененного определения ниже было опубликовано в объявлении ГА.