【问题标题】:Organising LUIS intents to apart classes组织 LUIS 意图以分隔类
【发布时间】:2019-01-21 22:27:19
【问题描述】:

我正在努力将 LUIS 意图实现拆分为不同的类。我现在将 LUIS 意图的所有代码放在 LuisDialog 类中,这使我的代码难以阅读(在一个类中肯定有数千个代码)。 那么我该怎么做才能将每​​个 LUIS 意图实现拆分为不同的类。

我想在一个单独的类中进一步处理“CreateTodo”意图,并保持 LuisDialog 类简单易读。我可以使用哪种语法? 上下文调用?我看到了一个类似的问题,使用部分类有帮助。那么任何人都可以为我展示一个示例模式吗?提前致谢。:)

[Serializable]
public class LuisDialog : LuisDialog<object>
{
    [LuisIntent("")]
    [LuisIntent("None")]
    public async Task NoneIntent(IDialogContext context, LuisResult result)

    [LuisIntent("CreateTodo")]
    public async Task CreateTodoIntent(IDialogContext context, LuisResult 
    result)

    //...more intents
}

【问题讨论】:

    标签: c# botframework azure-language-understanding


    【解决方案1】:

    看起来您正在使用 botframework 的 v3。所以你可以使用context.Callcontext.Forwardcontext.Call 将启动新对话,然后等待收到新消息。 context.Forward 会将当前消息发送到新对话框。

    如果您有一个名为 CreateTodoDialog 的对话框并且您想要启动该对话框,您可以使用 context.Call(new CreateTodoDialog(), AfterCreateTodoDialog) 其中AfterCreateTodoDialog 是您想要在新对话框之后运行的内容。

    我设置 luis 对话框的方式是为每个意图设置一个方法,然后执行逻辑以提取任何 luis 实体(如果有),然后为每个意图调用或转发到对话框。然后我有了一个在子对话框之后使用的方法。

    【讨论】:

    • 嗨。我正在尝试使用 context.call 或 context.forward,但我仍然不明白如何使用我的 CreateTodoDialog。它还应该实现 LuisDialog 吗?如果有任何实体,我可以在 CreateTodoDialgo 类中处理实体,还是应该在 LuisDialog 类中这样做?你能放一些示例代码吗?非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多