迁移新版QnAMaker后遇授权参数缺失错误的技术求助
解决QnAMaker迁移后「Valid KnowledgeBaseId and SubscriptionKey not provided」错误
看起来你在迁移到新版QnAMaker后踩了版本兼容和参数配置的坑,结合你的代码和依赖版本,我整理了几个核心问题点和解决办法:
1. 依赖版本不兼容,第三方QnADialog库过时
你目前用的QNADialog:1.2.0是第三方库,而官方的QnAMaker集成已经整合到Microsoft.Bot.Builder.CognitiveServices包中。同时你的Microsoft.Bot.Builder.CognitiveServices.1.1.7版本过低,和Bot Builder 3.15.2.2不匹配,无法支持新版QnAMaker的认证机制。
解决步骤:
- 卸载第三方
QnADialog包,改用官方的Microsoft.Bot.Builder.CognitiveServices包,升级到和Bot Builder一致的版本(3.15.2.2):Uninstall-Package QnADialog Update-Package Microsoft.Bot.Builder.CognitiveServices -Version 3.15.2.2 - 代码中替换命名空间,去掉
using QnAMakerDialog;,改用官方命名空间:using Microsoft.Bot.Builder.CognitiveServices.QnAMaker;
2. QnAMaker属性参数名称错误
新版QnAMaker已经不再使用authKey,而是用endpointKey(你可以在QnAMaker门户的「Settings」页面找到这个密钥)。旧版本的属性参数名和新版服务不匹配,导致系统无法识别你的密钥配置。
修正你的QnADialog属性:
把原来的[QnAMaker]属性替换为官方的[QnAMakerService]属性(或者使用构造函数注入配置,更灵活):
[Serializable] [QnAMakerService( knowledgebaseId: "f81ce668-XXXX-XXXX-XXXX-ad20c5f4d3fa", endpointKey: "013ffd97-XXXX-XXXX-981f-ea298085591c", host: "https://XXXX.azurewebsites.net/qnamaker" )] public class QnADialog : QnAMakerDialog { // 你的对话框逻辑保持不变,注意继承的是官方的QnAMakerDialog,而非第三方的QnAMakerDialog<object> }
3. 确认EndpointHostName格式正确性
新版QnAMaker的host地址格式应为https://<your-resource-name>.azurewebsites.net/qnamaker,确保你填写的地址和QnAMaker门户发布页面显示的「Postman示例」中的地址完全一致,不要遗漏路径后缀。
额外检查点
- 确认你使用的
endpointKey是QnAMaker门户中的「Endpoint key」,而非Azure资源的「Subscription Key」,两者是不同的密钥。 - 检查代码中是否有其他地方覆盖了QnAMaker的配置,比如在全局设置或对话框构造函数中重复设置参数导致冲突。
按照以上步骤调整后,应该就能解决参数不识别的问题了。
内容的提问来源于stack exchange,提问作者anonymous1110
相关产品推荐
相关产品推荐

