Administrer tilstand

Tilstand i en agent følger de samme paradigmene som moderne webapplikasjoner. Agents SDK tilbyr noen abstraksjoner for å gjøre tilstandshåndtering enklere.

På samme måte som webapplikasjoner er en agent iboende tilstandsløs. En annen forekomst av agenten kan håndtere en gitt runde i samtalen. For noen agenter er denne enkelheten å foretrekke—agenten kan enten fungere uten tilleggsinformasjon, eller nødvendig informasjon er garantert å finnes i den innkommende meldingen. For andre er tilstand (for eksempel hvor samtalen ble avsluttet, eller tidligere mottatt data om brukeren) nødvendig for at agenten skal kunne føre en meningsfull samtale.

Hvorfor trenger jeg tilstanden?

Ved å opprettholde tilstand kan agenten din føre mer meningsfulle samtaler ved å huske bestemte opplysninger om en bruker eller samtale. f.eks., hvis du tidligere har hatt en samtale med en bruker, kan du lagre informasjon du allerede har fått om dem, slik at du ikke trenger å spørre om det på nytt. Tilstanden beholder også data lenger enn den nåværende runden, slik at agenten kan bevare informasjon gjennom en samtale med flere runder.

Når det gjelder agenter, finnes det flere lag i bruken av tilstand: lagringslaget, tilstandshåndtering og AgentApplication.

Lagringslag

Startende i backend, hvor tilstandsinformasjonen faktisk lagres, er lagringslaget. Du kan tenke på dette som din underliggende lagring, for eksempel i minnet, Azure eller en tredjepartsserver.

Agents SDK inkluderer noen implementasjoner for lagringslaget:

Minnelagring gir lagring i minnet for testformål. Lagring i minnet er bare beregnet for lokal testing, siden denne lagringen er flyktig og midlertidig. Dataene slettes hver gang agenten starter på nytt.

Azure Blob Storage kobler til en Azure Blob Storage objektdatabase.

Azure Cosmos DB partisjonert lagring kobles til en partisjonert Cosmos DB NoSQL-database.

For instruksjoner om hvordan du kobler til andre lagringsalternativer, se Agents SDK Storage Overview

Tilstandshåndtering

Tilstandshåndtering automatiserer lesing og skriving av agentens tilstand til det underliggende lagringslaget. Tilstand lagres som tilstandsegenskaper, som i praksis er nøkkel-verdi-par agenten din kan lese og skrive ved hjelp av tilstandshåndteringsobjektet, uten å måtte bekymre seg for den spesifikke underliggende implementeringen. Disse tilstandsegenskapene definerer hvordan informasjonen lagres. F.eks., når du henter en egenskap som du har definert som en spesifikk klasse eller objekt, vet du hvordan dataene vil være strukturert.

Disse tilstandsegenskapene er samlet i «bøtter», som brukes til å organisere disse egenskapene. SDK-en inkluderer tre av disse "bøttene":

  • Brukertilstand
  • Diskusjonstilstand

Alle disse samlingene er underklasser av agenttilstand-klassen, som kan avledes for å definere andre typer samlinger med ulike omfang.

Disse forhåndsdefinerte samlingene har ulik synlighet, avhengig av samlingstypen:

  • Brukertilstand er tilgjengelig i enhver interaksjon der agenten kommuniserer med den brukeren på den kanalen, uavhengig av hvilken samtale det gjelder
  • Samtaletilstand er tilgjengelig i enhver interaksjon i en spesifikk samtale, uavhengig av bruker, for eksempel i gruppesamtaler

Brukertilstand og samtaletilstand er avgrenset etter kanal. Den samme personen som bruker forskjellige kanaler for å få tilgang til agenten din, fremstår som forskjellige brukere – én for hver kanal, og hver med en egen brukertilstand.

Nøklene som brukes for hver av disse predefinerte samlingene er spesifikke for brukeren, samt samtalen eller agenten. Når du setter verdien for din tilstandsegenskap, blir nøkkelen definert for deg internt, basert på informasjon som finnes i turn context, slik at hver bruker eller samtale plasseres i riktig samling og egenskap. Nøklene er definert som følger:

  • Brukertilstanden oppretter en nøkkel ved å bruke kanal-ID og from ID. Eksempel: {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName
  • Samtaletilstanden oppretter en nøkkel ved å bruke kanal-ID-en og samtale-ID-en. Eksempel: {Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName

Når hver type tilstand skal brukes

Samtaletilstand brukes til å holde oversikt over konteksten i samtalen, for eksempel:

  • Om agenten stilte brukeren et spørsmål, og hvilket spørsmål det var
  • Hva det aktuelle samtaleemnet er, eller hva det forrige var
  • Opptak av chathistorikk

Brukertilstand egner seg godt til å spore informasjon om brukeren, for eksempel:

  • Ikke-kritisk brukerinformasjon, som navn og preferanser, en alarminnstilling eller en varslingspreferanse
  • Informasjon om den siste samtalen brukeren hadde med agenten
    • For eksempel kan en produktsupportagent holde oversikt over hvilke produkter brukeren har etterspurt informasjon om.

AgentApplication

  • Route-handlere du legger til vil få en instans av TurnState. Få tilgang til samtaletilstand eller brukertilstand fra denne instansen.
  • Tilstanden lastes og lagres automatisk.