У меня есть две базы знаний, и я хочу использовать их обе для одного бота для поиска ответа. Как я могу использовать несколько баз знаний.
Можно ли использовать две базы знаний без LUIS в одном приложении?
Это технически возможно, но не рекомендуется. Как вы могли бы добиться этого без LUIS, у вас есть цикл, который перебирает все ваши базы знаний и добавляет ответ с наивысшим баллом из каждой в коллекцию, из этой коллекции вы затем можете выбрать ответ с наивысшим баллом (или отобразить несколько ответит, если это то, что вам нужно.) Переход на маршрут LUIS дает вам дополнительную гибкость в вашем боте, если вы хотите обрабатывать более продвинутый NLP в будущем с минимальным рефакторингом.
Ниже текст из моего ответа здесь. Пример приложения nodejs доступен в файле официальное репо.
Есть руководство и образец проекта доступно здесь.
По сути, вы создаете приложение LUIS, а затем используете инструмент Dispatch для создания локального файла, который сканирует все ваши базы знаний и извлекает ваши вопросы для использования в качестве чего-то, что LUIS называет высказывания, эти высказывания затем используются для определения LUIS намерение пользователя в ваш случай какую базу знаний использовать. В основном диспетчерское приложение в LUIS действует как маршрутизатор. После того, как вы создали файл отправки локально, вам нужно отправить его в приложение LUIS (команда dispatch create
).
Я бы порекомендовал загрузить пример приложения и пройти весь процесс, чтобы получить общее представление о том, как все сочетается друг с другом. После того как вы опубликуете свое приложение LUIS, вы сможете тестовое задание его на портале LUIS, введя примеры высказываний и проверив ответ, чтобы увидеть выбранное намерение. Документация для инструмента Dispatch — доступно здесь. Обратите внимание, что когда вы обновляете свои базы знаний (путем добавления новых записей или альтернативных формулировок) после первоначальной публикации приложения для отправки, вам потребуется обновить модель отправки для этих новых вопросов/альтернативной фразы, чтобы добавить высказывание. в LUIS для этого сопоставления с правильным намерением LUIS — в противном случае они вернут намерение Никто.
NB. вы можете обойти необходимость обновления диспетчера, обработав случай, когда вы получаете намерение «Нет» и перебираете все свои базы знаний, чтобы запросить ответ на запрос пользователя и просто вернуть ответ с более высокой оценкой ( иметь коллекцию, в которой хранятся ответы из каждой базы знаний), но я бы не рекомендовал ее, поскольку вы упускаете преимущества активного обучения для ЛУИС и QnA Maker.
В этом примере также они использовали только одну базу знаний. Тогда как используются две базы знаний?
@KailashKumawat Я отредактировал свой ответ, указав, как этого можно достичь.
Я пробовал в Node.js, как описано в документации связь. Но в файле dispatchBot.js я получаю ошибки. Вы можете помочь?
Например, когда я добавляю — async dispatchToTopIntentAsync(context, intent, recognizerResult) { switch (intent) { case 'l_luis': await this.processHomeAutomation(context, recognizerResult.luisResult); break; case 'q_sample-qna': await this.processSampleQnA(context); break; default: this.logger.log(
Отправить нераспознанное намерение: ${intent}.); await context.sendActivity(
Отправить нераспознанное намерение: ${intent}.); break; } }
. Запуск этого дает ошибку - SyntaxError: Неожиданный идентификатор. Можете ли вы помочь в этом.
Можете ли вы добавить pastebin всего класса, пожалуйста, и скриншот, где ошибка.
dispatchBot.js
файл здесь связь и app.js
файл здесь связь. Я пробовал кое-что, но не получил ответа от базы знаний ни на один вопрос.
Проверьте этот образец. Вы замените константу qnaMaker коллекцией (массивом) объектов QnAMaker, которые содержат ваши различные базы знаний, а затем внутри processSampleQnA
вы получите результат для каждого объекта qnaMaker в вашей коллекции и выберете тот, у которого наивысшая оценка.
Запуск этих файлов бота выдает какую-то ошибку - TypeError: Class extends value undefined is not a constructor or null
в class DispatchBot extends ActivityHandler {}
.
Пожалуйста, смотрите мой ответ ниже.