Splitting LuisDialog metoder (LuisIntents) i flere filer eller kategorier

stemmer
2

Jeg jobber på en Microsoft bot rammeverk prosjekt der jeg lage en LuisDialogtil å samhandle med brukeren. Jeg sannsynligvis kommer til å ha mange forskjellige hensikter som kan sorteres inn i flere kategorier.

Hva er den beste måten å organisere dette?

  • Bør jeg gjøre en stor LuisDialogklasse med alle LuisIntentmetoder?

    Dette virker litt uorganisert for meg.

  • Bør jeg lage flere LuisDialogklasser for hver kategori?

    Dette kan gi en masse problemer. Hva om jeg har en intensjon som bør dekkes av alle kategorier? Hvordan kan jeg være sikker på at brukeren meldingen er kontrollert av hver LuisDialog? Dette er sannsynligvis ikke en god idé.

  • Bør jeg gjøre en stor LuisDialogklasse som liksom 'inkluderer' metoder fra andre filer / klasser, hvor hver fil / klassen representerer en kategori?

    Dette virker som en god idé, men jeg har ingen anelse om hvordan du gjør dette i C #

Hvis du har andre forslag, vennligst gi meg beskjed, takk på forhånd!

Publisert på 06/08/2016 klokken 12:26
kilden bruker
På andre språk...                            


3 svar

stemmer
1

For alle som lurer på om det kan være en bedre løsning;

Ved hjelp av partialklasser i C # ser ut til å være den beste løsningen her, kan du lese denne for mer informasjon.

Svarte 10/08/2016 kl. 19:40
kilden bruker

stemmer
1

EDIT :

Takk skal du ha! Dette virker som en grei løsning, men hvordan kan jeg gjøre context.Wait (MessageReceived) hvis MessageReceived metoden er ikke tilgjengelig fra en categoryXHandler klasse (beskyttet)?

Hva jeg gjør er jeg vil la CategoryHandlerretur aktiviteten jeg ønsker å legge til bruker. Vennligst se min kode prøven ( HandleCategoryAmetode ).


Forutsatt at du har

  1. category-Asom har Intent1, Intent2, Intent3,Intent4
  2. category-Bsom har Intent1,Intent2
  3. category-C som har Intent1

Jeg tror den beste måten å gjøre er fortsatt å ha en enkelt LuisDialog, definere 3 metoder for å håndtere hver kategori.

public class MyDialog : LuisDialog<string>
{
    [LuisIntent(CategoryA.Intent1)]
    [LuisIntent(CategoryA.Intent2)]
    [LuisIntent(CategoryA.Intent3)]
    [LuisIntent(CategoryA.Intent4)]
    public async Task HandleCategoryA(IDialogContext context, LuisResult result)
    {
        var returnActivity = CategoryAHandler.Handle(result); // your business logic will be put inside this method

        await context.PostAsync(returnActivity);
        context.Wait(MessageReceived);
    }

    [LuisIntent(CategoryB.Intent1)]
    [LuisIntent(CategoryB.Intent2)]
    public async Task HandleCategoryB(IDialogContext context, LuisResult result)
    {
        CategoryBHandler.Handle(result); // your business logic will be put inside this method
    }

    [LuisIntent(CategoryC.Intent1)]
    public async Task HandleCategoryC(IDialogContext context, LuisResult result)
    {
        CategoryCHandler.Handle(result); // your business logic will be put inside this method
    }
}

Håper det hjelper.

Svarte 08/08/2016 kl. 09:48
kilden bruker

stemmer
0

Jeg faktisk gjorde dette på en annen måte.

Jeg har en hoved Luis Dialog, med den hensikt påvisning av alle praktiske. Basert på hensikten jeg videresende meldingen til min andre dialog LUIS. Dette fanger relaterte hensikter og en tom streng hensikt å "fange alle de andre"

Hvis jeg får til "alle de andre", jeg setter context.DOne, tilbake til mitt rot LUIS dialog, som gjenfortolker LuisResult mottatt fra andre en og håndterer det.

Et eksempel er 'vær' hensikter. Det blir å LuisDialog1 jeg gjør en context.forward (ny LuisDialog2 (), ResumeAfter ...)

LuisDialog2 () håndterer også den 'vær' hensikt, men for eksempel også 'MoreWeather' Hvis ingen av disse er detektert, blir det i det LuisDialog2 [LuisIntent ( "")] håndterer metode. Dette setter en context.Done (luisresultobject) returnerer til LuisDialog1 ResumeAfter metode hvor denne kode er bosatt

var lLuisResult = await result as LuisResult;
IntentRecommendation lRecommendation = this.BestIntentFrom(lLuisResult);
await DispatchToIntentHandler(context, null, lRecommendation, lLuisResult);

Fortsatt ikke sikker på om null parameter, men det virker som den skal i alle mine tester så langt

Håper det er klart :(

Svarte 08/12/2017 kl. 09:45
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more