QnAMaker 迁移后无法到达端点

Unable to reach endpoint after QnAMaker migration

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

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

在我的 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 或任何天蓝色设置中的位置。我重写了它,一切似乎都很好。

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

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

最初也发现了我。他们对 api 也做了一些更改 qnaquestions collection 现在是 qnalist,而且 qnaid 现在只是 id。

您将需要彻底比较 api,尤其是当您已手动推介您的客户时。

乐于助人 菲尔

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

旧版本 QnA 服务:

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

https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/<QnAKnowledgeBaseId>/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
    {}
}

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

希望这会有所帮助。