1

我们有一个已经生产了几个月的机器人。使用预览服务配置的机器人运行良好。

所以我按照迁移文档中的步骤进行操作。我在 Azure 中创建了一个 QnA 服务,然后创建了知识库。我导入了我的知识库,保存/训练并发布。

在我的 web.config 中,我替换了以下值:

<add key="QnAKnowledgeBaseId" value="foo" />
<add key="QnaSubscriptionKey" value="bar" />
<add key="QnaMakerUpdateKnowledgeBaseEndpoint" value="https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases" />

我使用了发布我的知识库后给出的值,所以

POST /knowledgebases/<QnAKnowledgeBaseId>/generateAnswer
Host: <QnaMakerUpdateKnowledgeBaseEndpoint>
Authorization: EndpointKey <QnaSubscriptionKey>

更改这三行后,我的机器人停止检索答案。这使我怀疑 1)我的这些数据点的来源不正确,或者 2)在我的情况下需要进行更大的更改才能转换。谁能指导我正确的方向?

编辑:最终我的问题是机器人的原始开发人员将 QnAMaker 的端点隐藏在某处。我仍然不确定在哪里,该 url 不在 web.config 或任何 azure 设置中。我覆盖了它,一切似乎都很好。

下面的答案对我来说比官方文档更清楚,即使他们只是肯定了我最初阅读时认为的正确答案。伟大的工作人员。

4

3 回答 3

2

新的 v4 使用 azure 网站作为其 generateAnswer 端点,并在授权标头内使用不同的方案。登录到新的 v4 ui 进行发布,您将看到 url 示例已更改。

最初也抓住了我。它们是对 api 的一些更改,qnaquestions 集合现在是 qnalist,qnaid 现在只是 id。

您将需要彻底比较 api,特别是如果您已经手动处理了您的客户端。

很高兴帮助菲尔

于 2018-05-17T23:48:20.630 回答
2

发布知识库后,您将找到可在应用程序或机器人代码中使用的端点详细信息。正如 Phil 所提到的,它使用 Azure 网站作为其 generateAnswer 端点,这与旧版本的 QnA 服务不同。

在此处输入图像描述

旧版 QnA 服务:

在此处输入图像描述

因此,如果您提出以下请求以获取具有新知识库的问题的答案,它将无法正常工作。

https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/<QnAKnowledgeBaseId>/generateAnswer
于 2018-05-18T03:29:32.417 回答
1

发布后,当您获得所有必要的设置信息时,您可以在这样的代码中添加。使用您在 qnamaker 中发布时获得的主机地址。

QnADialog.cs

namespace Test.Qna
{
    [Serializable]
    [QnAMaker(authKey: "AuthKey", knowledgebaseId: "KnowledgebaseId", defaultMessage: "please rephrase, I could not understand.", scoreThreshold: 0.5, top: 1, endpointHostName: "https://yourAccount.azurewebsites.net/qnamaker")]
    public class QnADialog : QnAMakerDialog
    {}
}

对于 Node js,你可以这样做

var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
    console.log('%s listening to %s', server.name, server.url);
});

var connector = new builder.ChatConnector({
    appId: process.env.MICROSOFT_APP_ID,
    appPassword: process.env.MICROSOFT_APP_PASSWORD
});
var bot = new builder.UniversalBot(connector);
bot.set('storage', new builder.MemoryBotStorage()); 
server.post('/api/messages', connector.listen());

var recognizer = new cognitiveservices.QnAMakerRecognizer({
    knowledgeBaseId: '5abcde-cbfb-4yuio-92c5-052d3a806e78',
    authKey: 'eb7uy78y-8a64-4e75-98uj-7f89987b67bc',
    endpointHostName: 'https://name.azurewebsites.net/qnamaker'
    });

var basicQnAMakerDialog = new cognitiveservices.QnAMakerDialog({
    recognizers: [recognizer],
    defaultMessage: 'No match! Try changing the query terms!',
    qnaThreshold: 0.3
});

bot.dialog('/', basicQnAMakerDialog);

希望这会有所帮助。

于 2018-05-20T08:44:47.407 回答