Как добавить Bing Spellcheck в LuisRecognizerMiddleware? - PullRequest
0 голосов
/ 13 мая 2018

Хорошо, вот как настроено мое приложение LUIS в моем боте.
На веб-сайте LUIS я могу добавить проверку орфографии Bing, чтобы исправить типичные орфографические ошибки и улучшить соответствие intent и entity.

Все, что требуется, - это добавить ключ API BING в строку запроса LUIS.Но где я могу настроить это в LuisRecognizerMiddleware?

Я даже не уверен, что это правильное место.Но я предполагаю, что он объединяет URI.

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.AddBot<MyBot>(options =>
    {
        options.CredentialProvider = new ConfigurationCredentialProvider(_configuration);

        options.Middleware.Add(new CatchExceptionMiddleware<Exception>(async (context, exception) =>
        {
            await context.TraceActivity("MyBotException", exception);
            await context.SendActivity("Sorry, it looks like something went wrong!");
        }));

        IStorage dataStore = new MemoryStorage();

        options.Middleware.Add(new ConversationState<MyBotConversationState>(dataStore));

        // Add LUIS recognizer as middleware
        // see https://docs.microsoft.com/en-us/azure/bot-service/bot-builder-howto-v4-luis?view=azure-bot-service-4.0&tabs=cs
        (string modelId, string subscriptionKey, Uri url) = GetLuisConfiguration(_configuration);
        LuisModel luisModel = new LuisModel(modelId, subscriptionKey, url);
        options.Middleware.Add(new LuisRecognizerMiddleware(luisModel));
    });
}

private static (string modelId, string subscriptionKey, Uri url) GetLuisConfiguration(IConfiguration configuration)
{
    string modelId = configuration.GetSection("Luis-ModelId")?.Value;
    string subscriptionKey = configuration.GetSection("Luis-SubscriptionId")?.Value;
    string url = configuration.GetSection("Luis-Url")?.Value;
    Uri baseUri = new Uri(url);

    return (modelId, subscriptionKey, baseUri);
}

Все, что я пока получаю, это ...

GET https://westeurope.api.cognitive.microsoft.com/luis/v2.0/apps/?subscription-key=&q=test234&log=True HTTP / 1.1

То, что я ожидаю, является чем-то среди этих строк (скопировано с веб-портала LUIS)

GET https://westeurope.api.cognitive.microsoft.com/luis/v2.0/apps/?subscription-key=&spellCheck=true&bing-spell-check-subscription-key=&verbose=true&timezoneOffset=0&q=test234

1 Ответ

0 голосов
/ 13 мая 2018

Я только что взглянул на исходный код и понял, что ILuisOptions - это то, что я ищу. Для этого не было конкретной реализации. Я думаю, это "катайся сам" ...

public class MyLuisOptions : ILuisOptions
{
    public bool? Log { get; set; }
    public bool? SpellCheck { get; set; }
    public bool? Staging { get; set; }
    public double? TimezoneOffset { get; set; }
    public bool? Verbose { get; set; }
    public string BingSpellCheckSubscriptionKey { get; set; }
}

... и, конечно, вы должны передать это LuidRecognizerMiddleware.

options.Middleware.Add(new LuisRecognizerMiddleware(luisModel, new LuisRecognizerOptions { Verbose = true }, new MyLuisOptions { SpellCheck = true, BingSpellCheckSubscriptionKey = "test123" }));
...