[英]Multi-language bot using LUIS
我试图通过检测语言并选择适当的LUIS键和字符串集来创建一个多语言机器人。 我的问题是,我的LuisDialog进行了序列化,并且不再调用MakeRoot方法。
我的代码(大致):
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
var languageData = DetectLanguage(activity); // here I have the keys, strings etc.
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog(languageData));
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
我试着与中间对话框,选择语言和context.Forward
一切的LuisDialog,但我有管理该挣扎。 如果这是一个好的策略,我可以共享更多代码。 我也在考虑得分。
您必须制定一种方法来按语言获取每个LUIS参数,并且随着您对DetectLanguage
,选择正确的语言。
然后将它们传递给LuisDialog,如下所示:
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type == ActivityTypes.Message)
{
var languageData = DetectLanguage(activity); // here I have the keys, strings etc.
var luisService = new LuisService(new LuisModelAttribute("yourLuisAppIdGivenTheLanguageData", "yourLuisAppKeyGivenTheLanguageData", domain: "yourLuisDomainGivenTheLanguageData"));
await Conversation.SendAsync(activity, () => new Dialogs.RootDialog(luisService));
}
else
{
HandleSystemMessage(activity);
}
var response = Request.CreateResponse(HttpStatusCode.OK);
return response;
}
您的RootDialog应该看起来像这样:
public class RootDialog : LuisDialog<object>
{
public RootDialog(params ILuisService[] services) : base(services)
{
}
我们实施了一个复杂的项目,允许随时切换语言。 由于这种可能性,即使您在处理开始时将其覆盖,也无法完全信任活动的语言环境字段。
该策略如下:
Post
方法中检测用户的语言 然后:
您将需要一个中间的RootDialog来处理此LUIS语言切换,并且您必须在每次检测后完成LuisDialog(或在LuisDialog上收到每个MessageReceive之前检查语言)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.