2017-09-17 25 views
1

我想讓我的機器人支持德語語言。所以,我爲德語創建了一個獨立的模型,其模型與English模型中的意圖和實體相同。如何根據用戶語言在運行時間中選擇特定型號。顯然,我可以要求用戶選擇他們的語言偏好,保存在Bot數據包中,然後在此基礎上設置文化「en」或「de」。但是,如何在運行時選擇德語/英語模式?我有跟隨德國和英國模型鑰匙的Luis模型作爲屬性。 P.S.我已閱讀其他相關帖子,他們是關於兩種不同意圖和實體的模型。我有兩個不同地區的模型。如何在Bot框架(C#SDK)中的單個Luis Dialog中集成多個Luis languge模型

[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) 
    { 

    } 
} 
+0

但每個應用程序路易​​斯的話語在不同的語言權利:

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

d)在你的代碼如下使用它?所以,它應該自動處理,或者那不是你所看到的? LUIS模型將返回具體的意圖..然後這將是一個得分的問題,一個在英語的話語可能會比德語的得分多 –

+0

@EzequielJadib,是的說法是在不同的語言。那麼,Luis對話框會向兩個應用發送請求並獲得響應,其中一個將被收取費用,因爲沒有共振?我想根據語言環境僅向一個應用發送請求。另外,我不想在代碼中爲每種語言添加多個luis對話框。 –

+0

@EhsanUlHaq您創建了一個抽象超類,其中包含所有邏輯,並且每個子類都將其擴展並在Luis註釋中添加所需的Luis信用。我正在忙。但我會在稍後完成答案。 – rinormaloku

回答

2

解決辦法有兩個:

  1. 控制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提供路易斯憑證的目的。

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

C)往往你需要重複。

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()); 
} 
+0

@ rinomaloku,非常感謝:) –