gpt4 book ai didi

c# - Bot Framework 陷入对话循环

转载 作者:行者123 更新时间:2023-11-30 12:56:38 25 4
gpt4 key购买 nike

我正在为我的一个项目使用 Bot Framework。它似乎在处理来自 PromptDialog.Confirm 函数的回复时陷入循环。

namespace Genome
{
public class InitiateDialog : IDialog<object>
{
public async Task StartAsync(IDialogContext context)
{
context.Wait(ConversationStarted);
}

public async Task ConversationStarted(IDialogContext context, IAwaitable<IMessageActivity> message)
{
await context.PostAsync("Hi!");
PromptDialog.Confirm(
context: context,
resume: ResumeAndPromptPlatformAsync,
prompt: "Would you like to upload the document?",
retry: "I didn't understand. Please try again."
);
}

public async Task ResumeAndPromptPlatformAsync(IDialogContext context, IAwaitable<bool> result)
{
await context.PostAsync("Input Received");
}
}
}

此代码的执行永远不会到达 ResumeAndPromptPlatformAsync 函数。每次我在 PromptDialog.Confirm() 中选择 Yes/No 时,Bot Emulator 都会循环回到从 ConversationStarted() 开始并再次询问相同的问题。

最佳答案

我认为您当前的代码是正确的,但您之前的代码中可能存在导致循环的错误。由于 bot 框架会自动保存状态,您仍然无法使用旧代码。

如果您使用的是 facebook channel ,请键入“/deleteprofile”以重置状态并开始使用您的新代码。如果您使用的是模拟器,请单击“删除数据”或与新用户开始新对话。

此外,您的 ResumeAndPromptPlatformAsync 方法必须以 context.Waitcontext.Done 结束,否则您将引发异常也可能是问题的原因。

更新:我已经运行了您的代码,并且在我添加了 context.Done(this); 之后,它按预期工作。我正在使用模拟器。

public async Task ResumeAndPromptPlatformAsync(IDialogContext context, IAwaitable<bool> result)
{
await context.PostAsync("Input Received");
context.Done(this);
}

关于c# - Bot Framework 陷入对话循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40177633/

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