我想用.net框架构建一个智能的LUIS机器人,该机器人可以用C#理解英语以外的其他语言。由于LUIS不支持我的母语,因此我想实现翻译API,以便在LUIS生成输入之前将输入翻译为英语。到目前为止,我只有一个简单的LUIS机器人,并且可以使用翻译API的密钥,但是由于对编程非常陌生,因此我发现很难将其实现到该机器人。感谢代码示例对进一步构建代码的帮助。
编辑:到目前为止,这就是我所掌握的内容,当使用另一种语言编写时,我仍然在模拟器中遇到post 500错误。换句话说,LUIS API运行良好,这是翻译器API存在的问题。这是我的BasicLuisDialog.cs和RootDialog.cs:
BasicLuisDialog:
namespace Microsoft.Bot.Sample.LuisBot {
[Serializable]
public class BasicLuisDialog : LuisDialog<object>
{
public BasicLuisDialog() : base(new LuisService(new LuisModelAttribute(
ConfigurationManager.AppSettings["appid"],
ConfigurationManager.AppSettings["key"],
domain: ConfigurationManager.AppSettings["hostname"])))
{
}
[LuisIntent("None")]
public async Task NoneIntent(IDialogContext context, LuisResult result)
{
string message = $"Beklager, jeg forsto ikke '{result.Query}'. Skriv 'hjelp' om du trenger assistanse.";
await context.PostAsync(message);
context.Wait(this.MessageReceived);
}
[LuisIntent("Greeting")]
public async Task GreetingIntent(IDialogContext context, LuisResult result)
{
await context.PostAsync($"Velkommen til vår nye chatbot! Hva kan vi hjelpe deg med?");
context.Wait(this.MessageReceived);
}
[LuisIntent("Bot")]
public async Task BotIntent(IDialogContext context, LuisResult result)
{
await context.PostAsync($" Jeg er laget av Microsoft sin teknologi innenfor Bot Framework og kunstig intelligens. Jeg er ikke så smart enda, men vil bli smartere for hver dag!");
context.Wait(this.MessageReceived);
}
[LuisIntent("Hjelp")]
public async Task HelpIntent(IDialogContext context, LuisResult result)
{
await context.PostAsync("Hei! Prøv å spørre meg om 'priser' eller 'support' ");
context.Wait(this.MessageReceived);
}
}
}
RootDialog:
namespace LuisBot.Dialogs {
[Serializable]
public class RootDialog
{
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var activity = await result;
var MesInEn = await TranslateToEn(activity.Text);
activity.Text = MesInEn;
await context.Forward(new BasicLuisDialog(), AfterLuis, activity, CancellationToken.None);
context.Wait(MessageReceivedAsync);
}
private async Task<string> TranslateToEn(string text)
{
var uri = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=en";
var key = "translator_key";
System.Object[] body = new System.Object[] { new { Text = text } };
var requestBody = JsonConvert.SerializeObject(body);
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(uri);
request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
request.Headers.Add("Ocp-Apim-Subscription-Key", key);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
dynamic jsonResponse = JsonConvert.DeserializeObject(responseBody);
var textinen = jsonResponse[0]["translations"][0]["text"].Value;
return textinen;
}
}
private async Task AfterLuis(IDialogContext context, IAwaitable<object> result)
{
context.Wait(MessageReceivedAsync);
}
}
}
答案 0 :(得分:0)
到目前为止,我只有一个简单的LUIS机器人,并且可以使用翻译API的密钥,但是由于对编程非常陌生,因此我发现很难将其实现到该机器人。
似乎您具有Translator Text API的密钥并创建了一个简单的LUIS机器人项目,将translate user inputs转换为英语并将其传递给LUIS对话框,您可以参考以下代码示例。
在RootDialog中:
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var activity = await result;
var MesInEn = await TranslateToEn(activity.Text);
activity.Text = MesInEn;
await context.Forward(new BasicLuisDialog(), AfterLuis, activity, CancellationToken.None);
context.Wait(MessageReceivedAsync);
}
private async Task<string> TranslateToEn(string text)
{
var uri = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=en";
var key = "{your_key}";
System.Object[] body = new System.Object[] { new { Text = text } };
var requestBody = JsonConvert.SerializeObject(body);
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(uri);
request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
request.Headers.Add("Ocp-Apim-Subscription-Key", key);
var response = await client.SendAsync(request);
var responseBody = await response.Content.ReadAsStringAsync();
dynamic jsonResponse = JsonConvert.DeserializeObject(responseBody);
var textinen = jsonResponse[0]["translations"][0]["text"].Value;
return textinen;
}
}
private async Task AfterLuis(IDialogContext context, IAwaitable<object> result)
{
context.Wait(MessageReceivedAsync);
}
测试结果:
注意:文本翻译的测试请求和回复