Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将QnAMaker示例与QnAMakerDialog一起使用时出错_C#_Visual Studio_Azure_Botframework_Qnamaker - Fatal编程技术网

C# 将QnAMaker示例与QnAMakerDialog一起使用时出错

C# 将QnAMaker示例与QnAMakerDialog一起使用时出错,c#,visual-studio,azure,botframework,qnamaker,C#,Visual Studio,Azure,Botframework,Qnamaker,为了创建一个简单的聊天机器人,我一直在尝试创建一个使用MicrosoftCognitive和AI工具包以及QnAMaker API的类构造函数 虽然我的普通qnaMakerAi聊天机器人工作正常,但在我试图增强其功能并包含构造函数时出现了一个问题。 在emulator中运行代码时,我发现以下错误: 消息:抱歉,我的机器人程序代码有问题。 POST:500 directline.postActivity 我遇到的问题是: “对象引用未设置为对象的实例。” 请检查并提出建议 根据用户的评论,下面是R

为了创建一个简单的聊天机器人,我一直在尝试创建一个使用MicrosoftCognitive和AI工具包以及QnAMaker API的类构造函数

虽然我的普通qnaMakerAi聊天机器人工作正常,但在我试图增强其功能并包含构造函数时出现了一个问题。 在emulator中运行代码时,我发现以下错误:

消息:抱歉,我的机器人程序代码有问题。 POST:500 directline.postActivity

我遇到的问题是: “对象引用未设置为对象的实例。”

请检查并提出建议

根据用户的评论,下面是RootDialog的代码- `

命名空间Microsoft.Bot.Sample.QnABot {

[可序列化]
公共类根对话框:QnAMakerDialog//IDialog
{
公共异步任务StartAsync(IDialogContext上下文)
{
/*等待,直到从对话中收到第一条消息,然后调用MessageReceviedAsync
*来处理这个消息*/
context.Wait(this.MessageReceivedAsync);
}
public RootDialog():base(新的QnAMakerService(新的QnAMakerAttribute(ConfigurationManager.AppSettings[“QnASubscriptionKey”]、ConfigurationManager.AppSettings[“QnAKnowledgebaseId”],“抱歉,我找不到该问题的答案”))
{
}
受保护的重写异步任务RespondFromQnAMakerResultAsync(IDialogContext上下文、IMessageActivity消息、QnAMakerResults结果)
{
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
/*调用MessageReceivedAsync时,会传递一个IAwaitable。要获取消息,
*等待结果*/
var消息=等待结果;
//var qnaAuthKey=Utils.GetAppSetting(“qnaAuthKey”);
var qnaAuthKey=GetSetting(“qnaAuthKey”);
//var qnaKBId=Utils.GetAppSetting(“qnaknowledgeebaseid”);
//var endpointHostName=Utils.GetAppSetting(“QnAEndpointHostName”);
var qnaKBId=ConfigurationManager.AppSettings[“qnaknowledgeebaseid”];
var endpointHostName=ConfigurationManager.AppSettings[“QnAEndpointHostName”];
//QnA订阅密钥和知识库Id空验证
如果(!string.IsNullOrEmpty(qnaAuthKey)和&!string.IsNullOrEmpty(qnaKBId))
{
//根据端点主机名是否存在转发到相应的对话框
if(string.IsNullOrEmpty(endpointHostName))
wait context.Forward(新的basicqlnamakerprevewdialog(),AfterAnswerAsync,message,CancellationToken.None);
其他的
wait context.Forward(new BasicQnAMakerDialog(),AfterAnswerAsync,message,CancellationToken.None);
}
其他的
{
等待context.PostAsync(“请在应用程序设置中设置QnAKnowledgebaseId、QnAAuthKey和QnAEndpointHostName(如果适用)。了解如何在https://aka.ms/qnaabssetup.");
}
}
应答异步后的专用异步任务(IDialogContext上下文,IAwaitable结果)
{
//等待下一条用户消息
Wait(MessageReceivedAsync);
}
公共静态字符串设置(字符串键)
{
var value=ConfigurationManager.AppSettings[key];
if(String.IsNullOrEmpty(value)和&key==“QnAAuthKey”)
{
value=ConfigurationManager.AppSettings[“QnASubscriptionKey”];//QnASubscriptionKey与QnAMaker的向后兼容性(预览)
}
返回值;
}
}
//QnAMaker预览服务对话框
[可序列化]
公共类BasicQnAMakerPreviewDialog:QnAMakerDialog
{
//去https://qnamaker.ai 并提供数据、培训和发布您的QnA知识库。
//QNAMAKERSERSERVICE的参数为:
//必需:subscriptionKey、knowledgebaseId、,
//可选:defaultMessage,scoreThreshold[范围0.0–1.0]
public BasicQnAMakerPreviewDialog():base(新的QnAMakerService(新的QnAMakerAttribute(RootDialog.GetSetting(“QnAAuthKey”)、ConfigurationManager.AppSettings[“QnAKnowledgebaseId”]、“常见问题解答中没有很好的匹配”,0.5)))
{ }
}
//QnAMaker GA服务对话框
[可序列化]
公共类BasicQnAMakerDialog:QnAMakerDialog
{
//去https://qnamaker.ai 并提供数据、培训和发布您的QnA知识库。
//QNAMAKERSERSERVICE的参数为:
//必需:qnaAuthKey、knowledgebaseId、endpointHostName
//可选:defaultMessage,scoreThreshold[范围0.0–1.0]
public BasicQnAMakerDialog():base(新的QnAMakerService(新的QnAMakerAttribute(RootDialog.GetSetting(“QnAAuthKey”)、ConfigurationManager.AppSettings[“QnAKnowledgebaseId”]、“常见问题解答中没有很好的匹配”)、0.5、1、ConfigurationManager.AppSettings[“QnAEndpointHostName”])
{ }
}}
`


对于RootDialog-

我无法理解错误的确切位置

只是给你一个建议,你也可以这样试试

 using Microsoft.Bot.Builder.CognitiveServices.QnAMaker;
    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
        {
        }
    }
我遇到的问题是:“对象引用未设置为对象的实例。”

根据你提供的代码,我可以重现这个问题。您似乎使用问答(c#)模板创建了Bot服务,并从Azure portal下载了源代码,然后修改代码以使RootDialog继承
QnAMakerDialog
类。正如Eric Dahlvang在评论中提到的,如果检查
QnAMakerDialog
的定义,您会发现RootDialog的实现是无效的

此外,根据我的测试,如果您使用GA QnAMaker服务的QnAAuthKeyQnAKnowledgebaseId初始化QnAMakerDialog,但不提供QnaAndPointHostName,则会出现异常


注意:有关GA QnAMaker服务的更多信息,请参阅

如果要在方法外部创建任何对象,请尝试在方法内部创建对象。比如说

class1 myclass1 = new class1();

public string void MyMethod()
{

}

//above line might be an error.

//do it as



public string void MyMethod()
{
class1 myclass1 = new class1();
}
此RootDialog不是一个
class1 myclass1 = new class1();

public string void MyMethod()
{

}

//above line might be an error.

//do it as



public string void MyMethod()
{
class1 myclass1 = new class1();
}