Согласно вашей дополнительной информации, я изменил свой ответ. Исходное предложение с использованием QnA Maker приведено ниже. Если вам нужно получить данные из базы данных, например, оценки учащихся, лучший способ сделать это - использовать диалоговое окно для заполнения места. Лично я использую и предпочитаю водопадные диалоги, инициируемые распознаванием намерений с помощью LUIS, но есть и другие способы сделать это.
- Сначала используйте LUIS, чтобы определить намерение пользователя и запустить соответствующий диалог. Мне нравится образец DispatchBot для демонстрации того, как выполнять базовое c распознавание намерений (но в этом образце диалоговые окна содержатся в том же файле. js, что мне не нравится. Я предпочитаю держать свои диалоги в отдельные файлы).
- Если возможно, вы захотите попытаться извлечь соответствующие сущности, чтобы пользователю не приходилось вводить их повторно. Существует множество руководств о том, как это сделать, но вот хороший .
- Используйте диалоговое окно, чтобы собрать всю необходимую информацию для вызова вашей базы данных. Пример многооборотной подсказки - хороший пример того, как это сделать. Вам также необходимо учесть в своем коде извлечение сущностей, чтобы не повторять подсказки пользователю. Я делаю это через условие if: если объект существует, верните его к следующему шагу; иначе запросить у пользователя сущность. Вот пример.
if (step._info.options.entities.orderNumber) {
return await step.next(step._info.options.entities.orderNumber[0].toUpperCase());
} else {
return await step.prompt(ORDER_PROMPT, {
prompt: 'Please provide your order number.',
retryPrompt: 'Please enter a valid order number.',
});
}
- Вам нужно будет где-то временно сохранить значение. Самый простой способ - сохранить его в контексте шага (я называю его шаг ) вашего водопада. Например, на шаге, следующем за предыдущим, вы должны сохранить номер заказа в моем примере через
step.values.orderNumber = step.result;
(или step.result.value
при возврате выбора выбора). - Когда у вас есть все значения, вы можете запросить свой БД. Метод для этого будет зависеть от того, какую БД вы используете. Но если предположить, что вы делаете это через какого-то помощника, вы просто вызовете что-то вроде
const score = await queryMyDb(student, subject)
. Затем вы можете ответить пользователю с оценкой.
Этого должно быть достаточно, чтобы попытаться получить информацию. Если вы попытаетесь, но проблема не исчезнет, вы можете открыть отдельный запрос с указанием вашего кода и конкретных c проблем, с которыми вы сталкиваетесь.
Предыдущий ответ до получения дополнительного контекста:
Предполагая, что вы просто хотите получить ответы на вопросы в одной паре вопрос-ответ, похоже, что вам просто нужно развернуть QnA Maker и создать бота для его использования. Microsoft предоставляет подробные инструкции о том, как создавать, обучать и публиковать sh базу знаний QnA Maker. Попробуйте, и если у вас возникнут какие-либо проблемы, вернитесь и задайте их с помощью отдельного вопроса вместе с кодом, который вы пробовали.
QnA Maker может поддерживать подсказки для многооборотных разговоров также. Вы по-прежнему имеете дело с отдельными парами вопрос-ответ, но вы можете предоставить пользователям простой выбор, чтобы они могли вызывать связанные ответы одним нажатием кнопки.