Správa stavu

Stav v rámci agenta se řídí stejnými paradigmaty jako moderní webové aplikace. Sada Agents SDK poskytuje několik abstrakcí, které usnadňují správu stavu.

Stejně jako u webových aplikací je agent ze své podstaty bezstavový. Jiná instance vašeho agenta může zpracovat jakýkoliv závrat konverzace. U některých agentů je tato jednoduchost upřednostňovaná – agent může pracovat bez dalších informací nebo je zaručeno, že požadované informace budou v příchozí zprávě. Pro ostatní je potřeba, aby měl agent užitečnou konverzaci (například kde konverzace skončila nebo data o uživateli dříve přijatá).

Proč potřebuji stav?

Udržování stavu umožňuje agentům mít smysluplnější konverzace tím, že si zapamatuje určité věci o uživateli nebo konverzaci. Pokud jste například dříve mluvili s uživatelem, můžete o něm uložit předchozí informace, abyste je nemuseli znovu žádat. Stav také uchovává data po delší dobu, než je aktuální obrat, takže váš agent uchovává informace v průběhu více konverzací.

Vzhledem k tomu, že se týká agentů, existuje několik vrstev použití stavu: vrstva úložiště, správa stavu a AgentApplication.

Vrstva úložiště

Na back-endu, kde se informace o stavu skutečně ukládají, je vrstva úložiště. Můžete si to představit jako fyzické úložiště, jako je například v paměti, Azure nebo server třetí strany.

Sada Agents SDK obsahuje některé implementace vrstvy úložiště:

Úložiště paměti implementuje úložiště v paměti pro účely testování. Úložiště dat v paměti je určené pro místní testování pouze proto, že toto úložiště je nestálé a dočasné. Data se vymažou při každém restartování agenta.

Azure Blob Storage se připojuje k objektové databázi služby Azure Blob Storage.

Dělené úložiště Azure Cosmos DB se připojuje k dělené databázi NoSQL služby Cosmos DB.

Pokyny k připojení k dalším možnostem úložiště najdete v tématu Přehled služby Agents SDK Storage.

Správa stavu

Správa stavu automatizuje čtení a zápis stavu agenta do podkladové vrstvy úložiště. Stav je uložen jako vlastnosti stavu, což jsou efektivně dvojice klíč-hodnota, které agent může číst a zapisovat prostřednictvím objektu správy stavu, aniž by se museli starat o konkrétní základní implementaci. Tyto vlastnosti stavu definují způsob uložení těchto informací. Když například načtete vlastnost, kterou jste definovali jako konkrétní třídu nebo objekt, víte, jak budou tato data strukturována.

Stavové vlastnosti jsou seskupeny do definovaných "bloků", které slouží k uspořádání těchto vlastností. Sada SDK obsahuje tři z těchto částí.

  • Stav uživatele
  • Stav konverzace

Všechny tyto kontejnery jsou podtřídy třídy stavu agenta, které lze odvodit k definování jiných typů kbelíků s různými obory.

Tyto předdefinované kontejnery jsou vymezeny na určitou viditelnost v závislosti na kontejneru:

  • Stav uživatele je k dispozici pokaždé, když agent konverzuje s tímto uživatelem v tomto kanálu bez ohledu na konverzaci.
  • Stav konverzace je k dispozici v jakékoli konverzaci bez ohledu na uživatele, například ve skupinových konverzacích.

Stav uživatele a stav konverzace jsou vymezeny podle kanálu. Stejná osoba, která používá různé kanály pro přístup k vašemu agentovi, se zobrazí jako různí uživatelé, jeden pro každý kanál a každý s odlišným stavem uživatele.

Klíče používané pro každý z těchto předdefinovaných kontejnerů jsou specifické pro uživatele a konverzaci nebo agenta. Při nastavování hodnoty stavové vlastnosti je klíč interně definován s informacemi obsaženými v kontextu konverzace, aby se zajistilo, že každý uživatel nebo konverzace je umístěn do správného sektoru a vlastnosti. Konkrétně jsou klíče definovány takto:

  • Stav uživatele vytvoří klíč pomocí ID kanálu a z ID. Například {Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName
  • Stav konverzace vytvoří klíč pomocí ID kanálu a ID konverzace. Například {Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName

Kdy použít každý typ stavu

Stav konverzace je vhodný pro sledování kontextu konverzace, například:

  • Zda agent požádal uživatele o otázku a o jakou otázku se jedná
  • Jaké je aktuální téma konverzace nebo jaké bylo to poslední.
  • Záznam historie chatu

Stav uživatele je vhodný pro sledování informací o uživateli, například:

  • Nekritické informace o uživateli, například jméno a předvolby, nastavení alarmu nebo předvolba upozornění
  • Informace o poslední konverzaci, kterou měli s agentem
    • Agent podpory produktů může například sledovat, na které produkty se uživatel ptal.

AgentApplication

  • Obslužné rutiny tras, které přidáte, budou k dispozici s instancí TurnState. Přístup ke konverzaci nebo stavu uživatele z této instance
  • Stav se automaticky načte a uloží.