Hantera tillstånd

Tillståndet i en agent följer samma paradigm som moderna webbappar. Agent-SDK:et innehåller några abstraktioner som gör tillståndshanteringen enklare.

Precis som med webbappar är en agent i sig tillståndslös. En annan instans av din agent kan hantera en viss konversation. För vissa agenter är den här enkelheten att föredra – agenten kan antingen fungera utan ytterligare information eller garanteras det att informationen som krävs finns i det inkommande meddelandet. För andra är tillstånd (till exempel var konversationen slutade eller data som tidigare tagits emot om användaren) nödvändiga för att agenten ska ha en användbar konversation.

Varför behöver jag tillstånd?

Genom att underhålla tillstånd kan din agent ha mer meningsfulla konversationer genom att komma ihåg vissa saker om en användare eller konversation. Till exempel, om du har pratat med en användare tidigare, kan du spara tidigare information om dem, så att du slipper be om det igen. Tillståndet behåller också data längre än den aktuella omgången, så att agenten behåller information under en konversation med flera omgångar.

När det gäller agenter finns det några lager för där tillstånd kan används: lagringslagret, tillståndshantering och AgentApplication.

Lagringslager

Med början i serverdelen, där tillståndsinformationen faktiskt lagras, finns lagringslagret. Du kan se det här som din fysiska lagring, till exempel i minnet, Azure eller en server från tredje part.

Agent-SDK innehåller vissa implementeringar för lagringslagret:

Minneslagring implementerar lagring i minnet för testning. Datalagring i minnet är bara avsett för lokal testning eftersom lagringen är instabil och tillfällig. Data rensas varje gång agenten startas om.

Azure Blob Storage ansluter till en Azure Blob Storage-objektdatabas.

Azure Cosmos DB-partitionerad lagring ansluter till en partitionerad Cosmos DB NoSQL-databas.

Anvisningar om hur du ansluter till andra lagringsalternativ finns i Översikt över lagring för agent-SDK

Tillståndshantering

Tillståndshantering automatiserar läsning och skrivning av agentens tillstånd till det underliggande lagringslagret. Tillståndet lagras som tillståndsegenskaper, vilket i praktiken är nyckel/värde-par som agenten kan läsa och skriva via tillståndshanteringsobjektet utan att behöva bekymra sig om den specifika underliggande implementeringen. Dessa tillståndsegenskaper definierar hur den informationen lagras. Till exempel, när du hämtar en egenskap som du definierat som en specifik klass eller objekt, vet du hur data kommer att struktureras.

Dessa tillståndsegenskaper klumpas ihop i begränsade grupper, som bara är samlingar för att organisera dessa egenskaper. SDK:n innehåller tre av dessa "buckets":

  • Användarens tillstånd
  • Konversationstillstånd

Alla dessa grupper är underklasser av agenttillståndsklassen, som kan härledas för att definiera andra typer av grupper med olika omfång.

Dessa fördefinierade grupper är begränsade till en viss synlighet, beroende på gruppen:

  • Användartillståndet är tillgängligt i alla former som agenten samtalar med användaren via kanalen, oavsett konversation
  • Konversationstillstånd är tillgängligt i varje interaktion i en specifik konversation, oavsett användare, till exempel i gruppkonversationer

Användartillstånd och konversationstillstånd begränsas av kanalen. Samma person som använder olika kanaler för att komma åt din agent visas som olika användare, en för varje kanal och var och en med ett distinkt användartillstånd.

De nycklar som används för var och en av dessa fördefinierade grupper är specifika för användaren och konversationen, eller agenten. När du anger värdet för din tillståndsegenskap definieras nyckeln internt, med information som finns i omgångens sammanhang för att säkerställa att varje användare eller konversation placeras i rätt grupp och egenskap. Nycklarna definieras enligt följande:

  • Användartillståndet skapar en nyckel med hjälp av kanal-ID och från ID. Till exempel {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName.
  • Konversationstillståndet skapar en nyckel med hjälp av kanal-ID:t och konversations-ID:t. Till exempel {Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName.

När man ska använda varje typ av tillstånd

Konversationstillstånd är bra för att hålla reda på konversationens kontext, till exempel:

  • Om agenten ställde en fråga till användaren och vilken fråga det var
  • Vad det aktuella ämnet för samtalet är, eller vad det senaste ämnet var.
  • Spela in chatthistorik

Användartillstånd är bra för att hålla reda på information om användaren, såsom:

  • Icke-kritisk information om användaren, såsom namn och preferenser, larminställningar eller varningspreferenser
  • Information om den senaste konversationen de hade med agenten
    • En produktsupportagent kan till exempel spåra vilka produkter som användaren har frågat om.

AgentApplication

  • Routningshanterare som du lägger till får en TurnState-instans. Åtkomst till konversations- eller användartillstånd från den här instansen.
  • Tillståndet läses in och sparas automatiskt.