有什么方法可以让 azure 聊天机器人查询数据库并从数据库中返回答案吗? 可以使用 qna maker 或 luis?

问题描述 投票:1回答:1

我正试图建立一个聊天机器人,它可以查询数据库并根据所问的问题从数据库中返回答案.是否有任何方法可以将 azure 聊天机器人连接到数据库说 azure SQL 数据库?

azure-sql-database chatbot luis qnamaker webbot
1个回答
0
投票

根据你的补充信息,我已经改变了我的答案。使用QnA Maker的原始建议如下。如果你需要从数据库中检索数据,例如学生的分数,最好的方法是用填槽对话框。就我个人而言,我使用并更喜欢用LUIS的意图识别发起的瀑布式对话框,但也有其他方法。

  • 首先,使用LUIS识别用户意图并启动相应的对话框。我喜欢 DispatchBot样本 来演示如何进行基本的意图识别(但该示例将对话框放在同一个.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 如果返回的是选择项)。)
  • 一旦你有了所有的值,你就可以查询你的DB。查询的方法取决于你使用的是哪个DB。但是,如果我们假设你是通过某种帮助程序来实现的,你只需要调用类似于 const score = await queryMyDb(student, subject). 然后你可以把分数回复给用户。

这应该可以让你有足够的时间去尝试检索信息。如果你尝试后仍然有问题,你可以打开一个单独的请求,显示你的代码和你遇到的具体问题。


在收到额外的上下文之前,之前的回答。

假设你只是想在一个问题-答案对中检索问题的答案,听起来你只需要部署QnA Maker并创建一个机器人来利用它。微软提供了很好的说明,告诉你如何 创建、培训和发布您的QnA Maker知识库。. 试一试,如果你有任何问题,请回来通过一个单独的问题与你所尝试的代码一起询问。

QnA Maker可以支持 多轮对话的提示 以及。你仍然在处理单一的问答对,但你可以为用户提供一个简单的选择,通过点击一个按钮来带出相关的答案。


0
投票

如果你使用的是表存储或blob等azure存储。我建议使用Azure搜索服务。这将帮助你解决你的问题,但它肯定会增加成本。

© www.soinside.com 2019 - 2024. All rights reserved.