gpt4 book ai didi

c# - FormFlow:使用重复问题添加多个实体

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

我一直在玩弄机器人框架并创建一个聊天机器人来取乐,它可以让您详细介绍您的家庭成员/宠物。

有没有办法重复同一组问题,直到用户满意为止?示例代码如下:

    [Prompt("What is your family name?")]
public string familyName{ get; set; }

[Prompt("What is your postcode?")]
public string postcode { get; set; }

[Prompt("Would you like to add a family member? {||}")]
public bool AddPerson { get; set; }

[Prompt("What is their name?")]
public string PersonName { get; set; }

[Prompt("How old are they?")]
public string PersonAge{ get; set; }

[Prompt("How are they related to you?")]
public string PersonRelation{ get; set; }

[Prompt("Would you like to add another family member? {||}")]
public bool addAnotherPerson { get; set; }

public IForm<Family> BuildForm()
{
return new FormBuilder<GetQuoteDialog>()
.Field(nameof(familyName))
.Field(nameof(postcode))

//Choose to add a person to the family
.Field(nameof(AddPerson))

//Details of that person.
.Field(new FieldReflector<Family>(nameof(PersonName))
.SetActive((state) => state.AddPerson== true))
.Field(new FieldReflector<Family>(nameof({PersonAge))
.SetActive((state) => state.AddPerson== true))
.Field(new FieldReflector<Family>(nameof({PersonRelation))
.SetActive((state) => state.AddPerson== true))

//Prompts the user to add another if they wish
//Recurs to the PersonName field and lets them go through the
//process of adding another member
.Field(new FieldReflector<Family>(nameof({AddAnotherMember))
.SetActive((state) => state.AddPerson== true))


.Confirm("Is this your family? {*}")
.Build();
}
}

有没有人知道如何实现这个?

我这样称呼表单流:

public async Task confirmAdd(IDialogContext context, IAwaitable<bool> result)
{
if (await result)
{
// builds and calls the form from here
var myform = new FormDialog<BuildFamily>(new BuildFamily(), BuildForm, FormOptions.PromptInStart, null);
context.Call<BuildFamily>(myform, End);
}
}

private async Task End(IDialogContext context, IAwaitable<BuildFamily> result)
{
BuildFamily data = null;
try
{
data = await result;
await context.PostAsync("Nice family you got there :)");
}
catch (OperationCanceledException)
{
await context.PostAsync("You canceled the form!");
return;
}
}

最佳答案

我不确定如何在 FormFlow 对话框中“重复询问同一组问题,直到用户满意为止”。但是,您可以向用户询问“您想添加更多家庭成员吗?”这个问题。在通话对话中,实现同类型的对话流程。删除 PostalCode 和 FamilyName 类型的问题,并将它们放在单独的对话框中。然后,在添加家庭成员对话框中执行如下操作:

[Serializable]
public class AddFamilyMembersDialog : IDialog<object>
{
List<Family> _familyMembers = new List<Family>();

public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);

return Task.CompletedTask;
}

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
PromptAddMembers(context);
}

private void PromptAddMembers(IDialogContext context)
{
PromptDialog.Text(context, AfterPromptAdd, "Would you like to add more family members?", null, 1);
}

private async Task AfterPromptAdd(IDialogContext context, IAwaitable<string> result)
{
var yesno = await result;

if (yesno.ToLower() == "yes")
{
await context.Forward(FormDialog.FromForm(Family.BuildForm), AfterAdded, null, CancellationToken.None);
}
else
{
//_familyMembers contains everyone the user wanted to add
context.Done(true);
}
}

private async Task AfterAdded(IDialogContext context, IAwaitable<Family> result)
{
var member = await result;
if (member != null)
_familyMembers.Add(member);

PromptAddMembers(context);
}

[Serializable]
public class Family
{
[Prompt("What is their name?")]
public string PersonName { get; set; }

[Prompt("How old are they?")]
public string PersonAge { get; set; }

[Prompt("How are they related to you?")]
public string PersonRelation { get; set; }

public static IForm<Family> BuildForm()
{
return new FormBuilder<Family>()
.AddRemainingFields()
.Build();
}
}

}

关于c# - FormFlow:使用重复问题添加多个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037451/

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