我们有一个已经生产了几个月的机器人。配置了预览服务的机器人运行良好。
所以我按照迁移文档中的步骤操作。我在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设置中。我覆盖了它,一切似乎都很好。
下面的答案对我来说比官方文档更清楚,即使他们只是肯定了我认为在我的初读时正确答案。干得好的人。
答案 0 :(得分:2)
新v4使用azure网站为其generateAnswer端点,在授权标头内使用不同的方案。登录到新的v4 ui做一个发布,你会看到url示例已经改变。
最初也抓住了我。他们是对api的一些改变太qnaquestions集合现在是qnalist而且qnaid现在只是id。
您需要彻底比较api,特别是如果您已经为您的客户提供了手动。
乐意为您提供帮助 菲尔
答案 1 :(得分:2)
在publish your knowledge base之后,您将找到可在您的应用程序或机器人代码中使用的端点详细信息。正如菲尔所说,它使用azure网站作为其generateAnswer端点,这与旧版QnA服务不同。
旧版QnA服务:
因此,如果您提出以下请求以获取具有新知识库的问题的答案,那么它将无效。
https://westus.api.cognitive.microsoft.com/qnamaker/v2.0/knowledgebases/<QnAKnowledgeBaseId>/generateAnswer
答案 2 :(得分: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);
希望这会有所帮助。