c# - 如何在 Bot Framework (C# SDK) 中的单个 Luis 对话框中集成多个 Luis 语言模型

标签 c# botframework azure-language-understanding

我希望我的机器人支持德语语言。因此,我为德语创建了一个单独的模型,其意图和实体与英语 模型中的相同。如何根据用户语言在运行时选择特定模型。显然,我可以要求用户选择他们的语言偏好,将其保存在 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)
    {

    }
}

最佳答案

有两种解决方法:

  1. 自己控制对 LUIS 的 Rest 调用。
  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());
}

关于c# - 如何在 Bot Framework (C# SDK) 中的单个 Luis 对话框中集成多个 Luis 语言模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46262949/

相关文章:

botframework - Microsoft Bot Framework 何时支持 Facebook 聊天扩展

azure - 使用创作资源 F0 在门户中进行测试时,LUIS 给出 403 错误 “Out of call volume quota.”

c# - Button 的 ControlTemplate 的 ContentPresenter 的 Textblock 的前景没有改变

c# - c# 表达式上的奇怪类型转换

javascript - botConnection.activity$ node.js BOT

c# - 在 Visual Studio 2017 中加载机器人框架模板

c# - 如何避免 Microsoft Bot Framework 中的 "Sorry, my bot code is having an issue"

node.js - 微软路易斯聊天机器人: Extracting custom entity in the middle of conversation

c# - 使用非管理员组成员的用户登录时无法加载文件或程序集 'Microsoft.CSharp'

c# - 如何在不使用自定义渲染器的情况下使用 Xamarin Forms C# 在中心绘制带有文本的圆圈?