Связать запрос на получение данных (с сервера SQL) с LUIS Intent.Проблема с кодом - PullRequest
0 голосов
/ 20 мая 2018

Я хочу получить данные из таблицы данных сервера SQL и связать каждый запрос на получение с определенным намерением LUIS.

На рисунке ниже я пытаюсь извлечь данные из таблицы данных о мощности по контракту.

[Serializable]
public class BasicLuisDialog : LuisDialog<object>
{

    public BasicLuisDialog() : base(new LuisService(new LuisModelAttribute(
        ConfigurationManager.AppSettings["LuisAppId"],
        ConfigurationManager.AppSettings["LuisAPIKey"],
        domain: ConfigurationManager.AppSettings["LuisAPIHostName"])))
    {
    }
    //Constants

    // Intents
    public const string IntentContractualPower = "SearchContractualPower";
    public const string IntentNone = "None";

    // Entities
    public const string EntityEAN = "EAN";
    public const string EntityBeginDate = "BeginDate";

    // Entities found in result
    public string BotEntityRecognition(LuisResult result)
    {
        StringBuilder entityResults = new StringBuilder();

        if (result.Entities.Count > 0)
        {
            foreach (EntityRecommendation item in result.Entities)
            {
                entityResults.Append(item.Type + "=" + item.Entity + ",");
            }
            // remove last comma
            entityResults.Remove(entityResults.Length - 1, 1);
        }

        return entityResults.ToString();
    }

    [LuisIntent("SearchContractualPower")]
    public async Task ContractualPowerIntent(IDialogContext context, LuisResult result)
    {
        await ContractualPower(context, result);
    }

    private Task ContractualPower(IDialogContext context, LuisResult result)
    {
        throw new NotImplementedException();
    }

    private void ContractualPower(object sender, EventArgs e)
    {
        try
        {
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = "X";
            builder.UserID = "X";
            builder.Password = "X";
            builder.InitialCatalog = "ChatBot_EDWErrors";

            using (SqlConnection connection = new SqlConnection(builder.ConnectionString))
            {

                connection.Open();
                StringBuilder sb = new StringBuilder();
                sb.Append("SELECT ErrorDescription FROM [err].[ErrorFactContractualPower]");
                sb.Append(" WHERE EAN = ");
                sb.Append(EntityEAN);
                sb.Append(" AND BeginDate = ");
                sb.Append(EntityEAN);

                String sql = sb.ToString();

                using (SqlCommand command = new SqlCommand(sql, connection))
                {
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            Console.WriteLine("{0}", reader.GetString(0));
                        }
                    }
                }
            }
        }
        catch (SqlException exception)
        {
            Console.WriteLine(exception.ToString());
        }
        Console.ReadLine();

    }

    [LuisIntent("None")]
    public async Task NoneIntent(IDialogContext context, LuisResult result)
    {
        await this.ShowLuisResult(context, result);
    }

    private async Task ShowLuisResult(IDialogContext context, LuisResult result)
    {
        // get recognized entities
        string entities = this.BotEntityRecognition(result);

        // round number
        string roundedScore = result.Intents[0].Score != null ? (Math.Round(result.Intents[0].Score.Value, 2).ToString()) : "0";

        await context.PostAsync($"**Query**: {result.Query}, **Intent**: {result.Intents[0].Intent}, **Score**: {roundedScore}. **Entities**: {entities}");
        context.Wait(MessageReceived);
    }
}

Пока я не могу заставить его работать см. Рисунок .К вашему сведению, я пишу код непосредственно в онлайн-редакторе кода в приложении для веб-ботов, последний построен на платформе Microsoft Azure.

Как это исправить?

Спасибо

...