gpt4 book ai didi

c# - 如何从 Microsoft Bot Framework 中的 PromptValidator 获取 stepContext?

转载 作者:太空宇宙 更新时间:2023-11-03 14:45:25 25 4
gpt4 key购买 nike

我正在使用 DialogPromptBot sample .示例中有以下代码:

// Create the dialog set and add the prompts, including custom validation.
_dialogSet = new DialogSet(_accessors.DialogStateAccessor);
_dialogSet.Add(new NumberPrompt<int>(PartySizePrompt, PartySizeValidatorAsync));
_dialogSet.Add(new ChoicePrompt(LocationPrompt));
_dialogSet.Add(new DateTimePrompt(ReservationDatePrompt, DateValidatorAsync));

// Define the steps of the waterfall dialog and add it to the set.
WaterfallStep[] steps = new WaterfallStep[]
{
PromptForPartySizeAsync,
PromptForLocationAsync,
PromptForReservationDateAsync,
AcknowledgeReservationAsync,
};
_dialogSet.Add(new WaterfallDialog(ReservationDialog, steps));

它设置一些提示,验证用户的输入并保存他们的响应。我不喜欢代码的工作方式,因为用户的输入会在下一步中保存(即派对人数保存在位置提示中,位置保存在日期提示中)。我想在相应的验证步骤中保存用户的输入。这将消除请求之间的纠缠,并允许我在不进行大量无关更改的情况下重新排列问题。它还允许我对相同类型的问题使用相同的验证器。

如何从提示验证器访问 WaterfallStepContext?一旦我确定它是有效的,这将允许我保存用户的输入。此外,ChoicePrompt 也应该采用 Prompt Validator,但我似乎无法让它工作。它似乎有内置验证,但我也想在那里保存用户的输入。

最佳答案

不建议在执行提示值验证时存储任何状态。相反,提示的调用者有责任使用该值执行某些操作。具体来说,在使用 WaterfallDialog 时,推荐的模式是“下一步”始终负责存储上一步的结果。

想象一下,有一个数字提示可以确保选择 1 到 100 之间的值:

Add(new NumberPrompt<int>("myNumberPrompt", async (pvc, ct) => pvc.Succeeded && pvc.Recognized.Value > 1 && pvc.Recognized.Value < 100); 

然后是一些利用该提示的瀑布式步骤:

private async Task<DialogTurnResult> FirstStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return await stepContext.PromptAsync("myNumberPrompt", new PromptOptions { Prompt = MessageFactory.Text("Please pick a number between 1 and 100") }, cancellationToken);
}

private async Task<DialogTurnResult> SecondStep(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
// Get the result of the previous step which will be the value from the NumberPrompt<int>
var chosenNumber = (int)stepContext.Result;

// Store the value into the WaterfallStepContext's Values dictionary
stepContext.Values["ChosenNumber"] = chosenNumber;

await stepContext.Context.SendActivityAsync($"Ok, {chosenNumber}, got it.");

// ... more code here, maybe prompt for other values, whatever ...
}

关于c# - 如何从 Microsoft Bot Framework 中的 PromptValidator 获取 stepContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com