QNA Maker не возвращает точные совпадения - PullRequest
2 голосов
/ 16 мая 2019

QNA Maker не возвращает точные совпадения из баз знаний.

Итак, мы использовали библиотеку botbuilder-ai для вызова создателя QNA. Однако QNA Maker не возвращает точное совпадение, которое есть в базе знаний. Однако, если я проверю это в тестовой функции портала qnamaker.ai, это сработает.

Вот код, который я использую для извлечения результатов.

const this.qnaRecognizer = new QnAMaker(
                {
                    knowledgeBaseId: keyvault.QnAMakerSecret.knowledgebaseID,
                    endpointKey: keyvault.QnAMakerSecret.qnaAuthKEY,
                    host: keyvault.QnAMakerSecret.qnaEndPointHost,
                },
                {
                    scoreThreshold: QNA_CONFIDENCE_THRESHOLD,
                    top: QNA_NUM_OF_RESULTS,
                }
            );
const qnaResult = await this.qnaRecognizer.getAnswers(step.context);

Как и ожидалось, он вызывает конечную точку QNA Maker и должен возвращать результаты. Вместо этого возвращается пустой массив.

Теперь я наблюдал за вызовами qnamaker.ai и заметил, что когда они вызывают API, они передают еще один параметр, который является isTest = true.

Вот результаты:

Без isTest = true

URL: https://qnamaker-host.azurewebsites.net/qnamaker/knowledgebases/<kbid>/generateAnswer
Method: POST
Result: {
    "answers": [
        {
            "questions": [],
            "answer": "No good match found in KB.",
            "score": 0,
            "id": -1,
            "source": null,
            "metadata": []
        }
    ],
    "debugInfo": null
}

С isTest = true

URL: https://qnamaker-host.azurewebsites.net/qnamaker/knowledgebases/<kbid>/generateAnswer
Method: POST
Result: {
    "answers": [
        {
            "questions": [
                "Who are you?"
            ],
            "answer": "I am an intelligent bot",
            "score": 100,
            "id": 2,
            "source": "Editorial",
            "metadata": [
                {
                    "name": "_id",
                    "value": "<removed>"
                }
            ],
            "context": {
                "isContextOnly": false,
                "prompts": []
            }
        }
    ],
    "debugInfo": null
}

Теперь я должен ожидать того же поведения без установки isTest = true в этом случае. Кроме того, в каждом API я не могу передать isTest = true, потому что я напрямую использую их библиотеку для этого.

Может кто-нибудь помочь в этом? Заранее спасибо.

1 Ответ

1 голос
/ 17 мая 2019

Наиболее вероятная причина в том, что вы не опубликовали базу знаний .

С "isTest": true вы запрашиваете тестовую базу знаний вместо опубликованной базы знаний. См. Этот документ для получения более подробной информации.

Обновление:

У QnA Maker есть ограничение дизайна, когда в ресурсе существует несколько КБ, на среду тестирования влияют другие КБ. Производственная среда изолирована от других КБ. Это связано с тем, что индексы поиска Azure совместно используются КБ в тестовой среде. Один из обходных путей - использование только одного килобайта в ресурсе при использовании тестовой среды.

...