如何使用 QnaId 查询知识库

How to query the knowledgebase using the QnaId

当出现多提示时,我不想添加按钮以进一步操作,而是想将它们直接添加到我的卡片中。

我有问题的答案,只用id可以得到答案吗?

我认为正确的方法是根据答案构建 qnaState,从提示中获取文本,然后使用这些参数进行新查询。

所以首先作为参考,这是我正在拨打的 QnA 制造商电话。

        if (qnAcontext == null) {
            qnAcontext = {
                PreviousQnaId: 0,
                PreviousUserQuery: null
            }
        }

        const qnaResult = await request({
            url: url,
            method: 'POST',
            headers: headers,
            json: {
                question: query,
                top: 3,
                context: qnAcontext
            }
        });

我在从 qna 对话框调用的辅助函数中有这段代码,但我认为位置并不重要。你可以看到我设置了一个 "default" qnAcontext。这是您将更新以进行基于提示的呼叫的内容。

从结果中,您可以通过

获得提示按钮
        var prompts = null;
        if(qnaResult[0].context != null){
            prompts = qnaResult[0].context.prompts;
        }

我以前没有这样做过,所以我不确定您可以从哪里获取文本属性,但我假设它位于 qnaResults[0].context.prompts[0].text。您需要查看提示对象以进行确认。您还需要创建新状态,并获取答案的第一部分。这些事情可以通过

来完成
            var qnAcontext = {
                PreviousQnaId: qnaResult[0].id,
                PreviousUserQuery: activity.text
            }

            answerText = qnaResult[0].answer;

现在只需使用新的 qnAContext 和提示文本作为查询进行另一个调用。从技术上讲,如果您没有将后续问题设置为仅上下文,则不必弄乱 qnAcontext。您应该能够将提示文本用作下一个查询,并且应该会出现答案。不过,如果答案仅是上下文,则您需要传递 qnAcontext 对象。

编辑: 有关直接使用 qnaId 查询的问题的直接答案,请参阅下面由 Kyle Delaney 添加的 link。