Один из образцов в Microsoft Botframework do tnet образцы репозитория, # 49.QnABot-All-Features , предназначен для обработки различных функций, предлагаемых разработчиком QnA, включая активное обучение и контекст. -только. В частности, класс диалога в примере QnAMakerBaseDialog
наследуется от QnAMakerDialog
.
В родительском QnAMakerDialog
есть метод, который проверяет многооборотный контекст:
private async Task<DialogTurnResult> CheckForMultiTurnPromptAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
var dialogOptions = ObjectPath.GetPathValue<QnAMakerDialogOptions>(stepContext.ActiveDialog.State, Options);
if (stepContext.Result is List<QueryResult> response && response.Count > 0)
{
// -Check if context is present and prompt exists
// -If yes: Add reverse index of prompt display name and its corresponding QnA ID
// -Set PreviousQnAId as answer.Id
// -Display card for the prompt
// -Wait for the reply
// -If no: Skip to next step
var answer = response.First();
if (answer.Context != null && answer.Context.Prompts.Count() > 0)
{
var previousContextData = ObjectPath.GetPathValue(stepContext.ActiveDialog.State, QnAContextData, new Dictionary<string, int>());
foreach (var prompt in answer.Context.Prompts)
{
previousContextData[prompt.DisplayText] = prompt.QnaId;
}
ObjectPath.SetPathValue(stepContext.ActiveDialog.State, QnAContextData, previousContextData);
ObjectPath.SetPathValue(stepContext.ActiveDialog.State, PreviousQnAId, answer.Id);
ObjectPath.SetPathValue(stepContext.ActiveDialog.State, Options, dialogOptions);
// Get multi-turn prompts card activity.
var message = QnACardBuilder.GetQnADefaultResponse(answer, dialogOptions.ResponseOptions.DisplayPreciseAnswerOnly);
await stepContext.Context.SendActivityAsync(message, cancellationToken).ConfigureAwait(false);
return new DialogTurnResult(DialogTurnStatus.Waiting);
}
}
return await stepContext.NextAsync(stepContext.Result, cancellationToken).ConfigureAwait(false);
}
Это часть внутреннего водопада получения ответа QnA от QnAMaker.ai. Он ищет контекст в if (answers.Context != null ...
.
QnAResponseContext QueryResult.Context определение изображения при наведении
В QueryResult.cs контекст определяется как:
/// <summary>
/// Gets or sets context for multi-turn responses.
/// </summary>
/// <value>
/// The context from which the QnA was extracted.
/// </value>
[JsonProperty(PropertyName = "context")]
public QnAResponseContext Context { get; set; }
Итак, чтобы ответить на ваш вопрос, чтобы получить результат тега isContextOnly в C#, выполните отладку результатов из запрос QnAMaker, и вы найдете атрибут с именем Context
. Это то, что вы ищете.