Botframework QnAMaker迁移后无法到达终结点

Botframework QnAMaker迁移后无法到达终结点,botframework,qnamaker,Botframework,Qnamaker,我们有一个机器人已经投入生产几个月了。配置了预览服务的bot运行良好 因此,我遵循了迁移文档中的步骤。我在Azure中创建了一个QnA服务,然后创建了知识库。我导入了我的知识库,保存/培训并发布 在我的web.config中,我替换了以下值: <add key="QnAKnowledgeBaseId" value="foo" /> <add key="QnaSubscriptionKey" value="bar" /> <add key="QnaMakerUpdat

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

因此,我遵循了迁移文档中的步骤。我在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>
POST/knowledgebase//generateAnswer
主持人:
授权:端点密钥
更改这三行后,我的机器人停止检索答案。这让我怀疑1)我拥有的这些数据点的源不正确,或者2)在我的情况下需要进行更大的更改才能转换。有人能给我指引正确的方向吗

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


下面的答案对我来说比官方文件更清楚,即使他们只是肯定了我最初阅读时认为正确的答案。干得好的人

新的v4使用azure网站作为其generateAnswer端点,授权标题中包含不同的方案。登录到新的V4UI进行发布,您将看到url示例已更改

一开始也发现了我。他们对api也做了一些修改,qnaquestions集合现在是qnalist,qnaid现在只是id

您将需要彻底比较api,特别是如果您已经手动提交了客户端

很乐意帮忙
Phil

新v4使用azure网站作为其生成端,在授权标题中使用不同的方案。登录到新的V4UI进行发布,您将看到url示例已更改

一开始也发现了我。他们对api也做了一些修改,qnaquestions集合现在是qnalist,qnaid现在只是id

您将需要彻底比较api,特别是如果您已经手动提交了客户端

很乐意帮忙 Phil

完成后,您将发现可以在应用程序或bot代码中使用的端点详细信息。正如Phil提到的,它使用azure网站作为其generateAnswer端点,这与旧版本的QnA服务不同

旧版QnA服务:

因此,如果您提出以下请求以获取具有新知识库的问题的答案,则该请求将不起作用

https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/<QnAKnowledgeBaseId>/generateAnswer
https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases//generateAnswer
之后,您将找到可在应用程序或bot代码中使用的端点详细信息。正如Phil提到的,它使用azure网站作为其generateAnswer端点,这与旧版本的QnA服务不同

旧版QnA服务:

因此,如果您提出以下请求以获取具有新知识库的问题的答案,则该请求将不起作用

https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/<QnAKnowledgeBaseId>/generateAnswer
https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases//generateAnswer

发布后,当您获得所有必要的设置信息后,可以添加以下代码。 使用在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
    {}
}
对于NodeJS,您可以这样做

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);

希望这会有所帮助。

发布后,当您获得所有必要的设置信息时,您可以添加这样的代码。 使用在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
    {}
}
对于NodeJS,您可以这样做

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);

希望这能有所帮助。

我在达到终点时也遇到了问题。我到达终点也有问题。我已经添加了这个,但问题仍然存在。我已经添加了这个,但问题仍然存在。你也能帮我吗