Microsoft Bot Composer 中 DialogStack 的用途是什么以及如何重置它?

What is the purpose of DialogStack in Microsoft Bot Composer and how to reset it?

我遇到了对话框堆栈变得太大的问题,我找到了 clean/reset 但使用 TypeScript 而不是 C# 的方法,这正是我需要的。我希望清除对话框堆栈的原因是因为我想避免 newtonsoft json 抱怨深度太大时出现问题(默认情况下它设置为 64 并希望它保持这种状态)。它需要大量的对话跳跃,所以它很不常见,但足够普遍,值得阻止它。我还想知道这是否会在内部与机器人逻辑混淆。

每个机器人,无论是 BotFramework 机器人还是其他人的机器人,都有某种对话堆栈。它的目的是记录机器人在遍历对话流时的来源。它允许机器人备份到以前的对话点,以防止发生中断(以及随后 return 到发生中断的对话点),跟踪状态、变量等等。

您对 'reset' 这个词的使用有点含糊。您可以使用 'Cancel all active dialogs' 操作 'reset' 对话框堆栈。这将从堆栈中删除所有子对话框,并且 return 用户返回到主对话框。

如果您的意思是 re-instantiate 对话框堆栈,不,这是不可能的 out-of-the-box。您可能 能够通过使用自定义运行时或自定义操作来实现此目的。但是,由于上述原因,这不是推荐的最佳做法。

如果您实施下面建议的更改,则可以完全避免您所述的问题。我与 BotFramework 开发人员保持着密切联系,这是他们建议的行动方案:

Newtonsoft,v13,引入了 'max depth' 默认值。 BotFramework dotnet SDK 依赖于 v12,它没有 属性。但是,如果您的解决方案或项目在其中的任何地方使用 v13,那么该版本将覆盖其他地方使用的 v12。

您有两种选择来解决这个问题:

  1. 在您的 solution/project.
  2. 中将 newtonsoft 降级到 v12
  3. 从 newtonsoft 切换到 System.Text.Json,如本 MS doc 中所述。 System.Text.Json 也有一个默认的最大深度,但是它也允许您传入一个新配置以覆盖默认的最大深度。