![](/img/trans.png)
[英]C# Microsoft Bot Framework -Integrate LUIS + QNA +Graph API
[英]How to integrate multiple Luis languge models in single Luis Dialog in Bot Framework (C# SDK)
我希望我的機器人支持德語 。 因此,我為德語創建了一個單獨的模型,其意圖和實體與英語模型相同。 如何根據用戶語言在運行時選擇特定模型。 顯然,我可以要求用戶選擇他們的語言首選項,然后將其保存在Bot Databag中,然后基於此設置區域性“ en ”或“ de ”。 但是,如何在運行時選擇德語/英語模型? 我遵循了Luis模型,並將德語和英語模型鍵均作為屬性。 PS我讀過其他相關文章,它們是關於兩個具有不同意圖和實體的模型。 我有兩個具有不同語言環境的模型。
[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)
{
}
}
有兩種解決方案:
闡述第二種解決方案:
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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.