【问题标题】:How to integrate multiple Luis languge models in single Luis Dialog in Bot Framework (C# SDK)如何在 Bot Framework (C# SDK) 中的单个 Luis Dialog 中集成多个 Luis 语言模型
【发布时间】:2017-09-19 05:24:14
【问题描述】:

我希望我的机器人支持 德语 语言。因此,我为德语创建了一个单独的模型,其意图和实体与 English 模型中的相同。如何根据用户语言在运行时选择特定模型。显然,我可以要求用户选择他们的语言偏好,将其保存在 Bot Databag 中,然后基于此设置文化“en”或“de”。但是,如何在运行时选择德语/英语模型?我使用德语和英语模型键作为属性来关注 Luis 模型。 附言我已经阅读了其他相关帖子,它们是关于两个具有不同意图和实体的模型。我有两个具有不同语言环境的模型。

[LuisModel("LuisID", "English Model-Key")]
[LuisModel("LuisID", "German Model-Key")]
[Serializable]
public class LUISDialogClass : LuisDialog<object>
{
    public LUISDialogClass(params ILuisService[] services) : base(services)
        {

        }
    [LuisIntent("A")]
    public async Task A(IDialogContext context, LuisResult result)
    {

    }
    [LuisIntent("B")]
    public async Task B(IDialogContext context, LuisResult result)
    {

    }
}

【问题讨论】:

  • 但是每个 luis 应用程序的语言都是不同的,对吧?所以,它应该自动处理或者这不是你所看到的? LUIS 模型将返回特定意图.. 然后这将是一个评分问题,英语的话语可能会比德语的话语得分更高
  • @EzequielJadib ,是的,话语使用不同的语言。那么,Luis 对话框将向这两个应用程序发送请求并获得响应,其中一个将免费收取费用?我想根据语言环境仅向一个应用程序发送请求。此外,我不想在我的代码中为每种语言添加多个 luis 对话框。
  • @EhsanUlHaq 您创建了一个包含所有逻辑的抽象超类,每个子类都对其进行扩展并在 Luis 注释中添加所需的 Luis 凭据。我正在忙。但我稍后会完成答案。
  • @rinormaloku ,当然,期待。谢谢

标签: c# botframework azure-language-understanding


【解决方案1】:

有两种解决方案:

  1. Control Rest 自己调用 LUIS。
  2. 创建两个对话框 LUISDialogClassDe 和 LUISDialogClassUs。

阐述第二个解决方案:

a) 实现抽象类中的所有逻辑:

[Serializable]
public abstract class LUISDialogClass : LuisDialog<object>
{
    public LUISDialogClass(params ILuisService[] services) : base(services)
    {

    }

    [LuisIntent("A")]
    public async Task A(IDialogContext context, LuisResult result)
    {

    }

    [LuisIntent("B")]
    public async Task B(IDialogContext context, LuisResult result)
    {

    }
}

b) 创建一个扩展抽象类的具体类,其唯一目的是提供 Luis 凭据。

[Serializable]
[LuisModel("key_DE", "programmatic_key_DE")]
public class LUISDialogClassDe : LUISDialogClass
{
}

c) 根据需要多次重复。

[Serializable]
[LuisModel("key_US", "programmatic_key_US")]
public class LUISDialogClassUs : LUISDialogClass
{
}

d) 在您的代码中使用它,如下所示:

var state = activity.GetStateClient();
var userdata = state.BotState.GetUserData(activity.ChannelId, activity.From.Id);
var cultureInfo = userdata.GetProperty<CultureInfo>("lang");

if (cultureInfo.Equals(new CultureInfo("de-DE")))
{
    await Conversation.SendAsync(activity, () => new LUISDialogClassDe());
}
else
{
    await Conversation.SendAsync(activity, () => new LUISDialogClassUs());
}

【讨论】:

  • @rinomaloku,非常感谢 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2023-04-07
  • 2020-02-29
  • 2022-02-24
  • 2017-03-16
  • 2019-03-17
相关资源
最近更新 更多