我的聊天机器人使用QnAMaker来回答用户的问题。最近,当我在Bot框架仿真器中测试时,它停止了工作。然而,这个机器人在网络聊天中运行得很好。我认为当我尝试从我的QnAMaker知识库生成答案时,会出现此问题:
var response = await botServices.QnAServices[QnAMakerName].GetAnswersAsync(stepContext.Context, qnaMakerOptions);这是我在控制台中得到的输出:
fail: Microsoft.BotBuilderSamples.QnABot[0]
Exception caught : System.Threading.Tasks.TaskCanceledException: The operation was canceled. ---> System.IO.IOException: Unable to read data from the transport connection: The I/O operation has been aborted because of either a thread exit or an application request. ---> System.Net.Sockets.SocketException: The I/O operation has been aborted because of either a thread exit or an application request
--- End of inner exception stack trace ---
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.FixedSizeReader.ReadPacketAsync(Stream transport, AsyncProtocolRequest request)
at System.Net.Security.SslState.ThrowIfExceptional()
at System.Net.Security.SslState.InternalEndProcessAuthentication(LazyAsyncResult lazyResult)
at System.Net.Security.SslState.EndProcessAuthentication(IAsyncResult result)
at System.Net.Security.SslStream.EndAuthenticateAsClient(IAsyncResult asyncResult)
at System.Net.Security.SslStream.<>c.<AuthenticateAsClientAsync>b__47_1(IAsyncResult iar)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.CreateConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(ValueTask`1 creationTask)
at System.Threading.Tasks.ValueTask`1.get_Result()
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
at Microsoft.Bot.Builder.AI.QnA.HttpRequestUtils.ExecuteHttpRequestAsync(String requestUrl, String payloadBody, QnAMakerEndpoint endpoint) in d:\a\1\s\libraries\Microsoft.Bot.Builder.AI.QnA\Utils\HttpRequestUtils.cs:line 64
at Microsoft.Bot.Builder.AI.QnA.GenerateAnswerUtils.QueryQnaServiceAsync(Activity messageActivity, QnAMakerOptions options) in d:\a\1\s\libraries\Microsoft.Bot.Builder.AI.QnA\Utils\GenerateAnswerUtils.cs:line 212
at Microsoft.Bot.Builder.AI.QnA.GenerateAnswerUtils.GetAnswersRawAsync(ITurnContext turnContext, IMessageActivity messageActivity, QnAMakerOptions options) in d:\a\1\s\libraries\Microsoft.Bot.Builder.AI.QnA\Utils\GenerateAnswerUtils.cs:line 87
at Microsoft.Bot.Builder.AI.QnA.QnAMaker.GetAnswersRawAsync(ITurnContext turnContext, QnAMakerOptions options, Dictionary`2 telemetryProperties, Dictionary`2 telemetryMetrics) in d:\a\1\s\libraries\Microsoft.Bot.Builder.AI.QnA\QnAMaker.cs:line 198
at Microsoft.Bot.Builder.AI.QnA.QnAMaker.GetAnswersAsync(ITurnContext turnContext, QnAMakerOptions options, Dictionary`2 telemetryProperties, Dictionary`2 telemetryMetrics) in d:\a\1\s\libraries\Microsoft.Bot.Builder.AI.QnA\QnAMaker.cs:line 158
at X.Dialogs.QnAMakerDialog.CallGenerateAnswer(WaterfallStepContext stepContext, CancellationToken cancellationToken) in C:\Users\X\Desktop\X\Dialogs\QnAMakerDialog.cs:line 239
at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.OnStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder.Dialogs\WaterfallDialog.cs:line 175
at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.RunStepAsync(DialogContext dc, Int32 index, DialogReason reason, Object result, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder.Dialogs\WaterfallDialog.cs:line 197
at Microsoft.Bot.Builder.Dialogs.WaterfallDialog.BeginDialogAsync(DialogContext dc, Object options, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder.Dialogs\WaterfallDialog.cs:line 82
at Microsoft.Bot.Builder.Dialogs.DialogContext.BeginDialogAsync(String dialogId, Object options, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder.Dialogs\DialogContext.cs:line 170
at Microsoft.BotBuilderSamples.QnABot.DispatchToTopIntentAsync(ITurnContext turnContext, IList`1 intent, RecognizerResult recognizerResult, CancellationToken cancellationToken) in C:\Users\X\Desktop\X\QnAMaker\QnABot.cs:line 171
at Microsoft.BotBuilderSamples.QnABot.OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken) in C:\Users\X\Desktop\X\QnAMaker\QnABot.cs:line 136
at Microsoft.Bot.Builder.BotFrameworkAdapter.TenantIdWorkaroundForTeamsMiddleware.OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder\BotFrameworkAdapter.cs:line 1252
at Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder\MiddlewareSet.cs:line 55
at Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken) in d:\a\1\s\libraries\Microsoft.Bot.Builder\BotAdapter.cs:line 200到目前为止,在仿真器中的测试一直运行良好。有人知道怎么解决吗?
发布于 2020-03-11 10:40:25
如果您的开发配置与您的Azure配置不同,则可能会导致此问题。请比较你的QnAEndpointHostName、QnAEndpointKey和QnAKnowledgebaseId,看看它们在本地和Azure之间是否不同。
如果您最近对本地配置做了任何不同的操作,请验证这些凭据来自何处。例如ASP.NET appSettings、secrets或环境。
此外,由于一些堆栈跟踪是使用SSL类型的,因此您可能需要仔细检查您的QnAEndpointHostName是否具有https协议前缀。
https://stackoverflow.com/questions/60527779
复制相似问题