에이전트 내의 상태는 최신 웹 애플리케이션과 동일한 패러다임을 따릅니다. 에이전트 SDK는 상태 관리를 더 쉽게 하기 위한 몇 가지 추상화 기능을 제공합니다.
웹 앱과 마찬가지로 에이전트는 기본적으로 상태 비지정입니다. 에이전트의 다른 인스턴스는 지정된 대화 턴을 처리할 수 있습니다. 일부 에이전트의 경우 이러한 단순성을 선호합니다. 에이전트는 추가 정보 없이 작동할 수 있거나 필요한 정보가 들어오는 메시지 내에 있도록 보장됩니다. 다른 사용자의 경우 에이전트가 유용한 대화를 하려면 상태(예: 대화가 중단된 위치 또는 사용자에 대해 이전에 받은 데이터)가 필요합니다.
상태가 필요한 이유는 무엇인가요?
상태를 유지 관리하면 에이전트가 사용자 또는 대화에 대한 특정 항목을 기억하여 더 의미 있는 대화를 할 수 있습니다. 예를 들어 이전에 사용자와 대화한 적이 있는 경우 이전 정보를 저장하여 다시 요청할 필요가 없도록 할 수 있습니다. 또한 상태는 현재 턴보다 더 오래 데이터를 유지하므로 에이전트는 다중 턴 대화 과정에서 정보를 유지합니다.
에이전트와 관련하여 상태를 사용하는 데는 스토리지 계층, 상태 관리 및 AgentApplication과 같은 몇 가지 계층이 있습니다.
스토리지 계층
상태 정보가 실제로 저장되는 백 엔드부터 스토리지 계층입니다. 이를 메모리 내, Azure 또는 타사 서버와 같은 실제 스토리지로 간주할 수 있습니다.
에이전트 SDK에는 스토리지 계층에 대한 몇 가지 구현이 포함되어 있습니다.
메모리 스토리지는 테스트를 위해 메모리 내 스토리지를 구현합니다. 메모리 내 데이터 스토리지는 휘발성이고 일시적이므로 로컬 테스트용입니다. 에이전트가 다시 시작될 때마다 데이터가 지워집니다.
Azure Blob Storage는 Azure Blob Storage 개체 데이터베이스에 연결합니다.
Azure Cosmos DB 분할된 스토리지는 분할된 Cosmos DB NoSQL 데이터베이스에 연결됩니다.
다른 스토리지 옵션에 연결하는 방법에 대한 지침은 에이전트 SDK 스토리지 개요를 참조하십시오.
상태 관리
상태 관리는 기본 스토리지 계층에 대한 에이전트 상태 읽기 및 쓰기를 자동화합니다. 상태는 상태 속성으로 저장되며, 이는 에이전트가 특정 기본 구현에 대해 걱정하지 않고 상태 관리 개체를 통해 읽고 쓸 수 있는 사실상 키-값 쌍입니다. 이러한 상태 속성은 해당 정보가 저장되는 방법을 정의합니다. 예를 들어 특정 클래스 또는 개체로 정의한 속성을 검색할 때 해당 데이터가 어떻게 구성되는지 알 수 있습니다.
이러한 상태 속성은 범위가 지정된 "버킷"으로 일괄화되며 이러한 속성을 구성하는 데 도움이 되는 컬렉션일 뿐입니다. SDK에는 다음 세 가지 "버킷"이 포함됩니다.
- 사용자 상태
- 대화 상태
이러한 버킷은 모두 에이전트 상태 클래스의 하위 클래스이며, 서로 다른 범위의 다른 유형의 버킷을 정의하기 위해 파생될 수 있습니다.
이러한 미리 정의된 버킷들은 버킷에 따라 특정 가시성으로 제한됩니다.
- 사용자 상태는 대화에 관계없이 에이전트가 해당 채널에서 해당 사용자와 대화하는 순서로 사용할 수 있습니다.
- 대화 상태는 그룹 대화와 같이 사용자에 관계없이 특정 대화에서 언제든지 사용할 수 있습니다.
사용자 상태 및 대화 상태는 채널별로 범위가 지정됩니다. 에이전트에 액세스하기 위해 서로 다른 채널을 사용하는 동일한 사용자가 각 채널에 대해 하나씩, 각각 고유한 사용자 상태를 가진 다른 사용자로 표시됩니다.
이러한 미리 정의된 각 버킷에 사용되는 키는 사용자 및 대화 또는 에이전트에 따라 다릅니다. 상태 속성의 값을 설정할 때 각 사용자 또는 대화가 올바른 버킷 및 속성에 배치되도록 턴 컨텍스트에 포함된 정보와 함께 키가 내부적으로 정의됩니다. 특히 키는 다음과 같이 정의됩니다.
- 사용자 상태는 채널 ID 및 ID를 사용하여 키를 만듭니다. 예를 들어
{Activity.ChannelId}/users/{Activity.From.Id}#YourPropertyName - 대화 상태는 채널 ID 및 대화 ID를 사용하여 키를 만듭니다. 예를 들어
{Activity.ChannelId}/conversations/{Activity.Conversation.Id}#YourPropertyName
각 상태 유형을 사용해야 하는 경우
대화 상태는 다음과 같이 대화의 컨텍스트를 추적하는 데 적합합니다.
- 에이전트가 사용자에게 질문을 했는지 여부 및 해당 질문
- 대화의 현재 주제 또는 마지막 항목이 무엇인지
- 채팅 기록 녹음/녹화
사용자 상태는 다음과 같은 사용자 정보를 추적하는 데 적합합니다.
- 이름 및 기본 설정, 경보 설정 또는 경고 기본 설정과 같은 중요하지 않은 사용자 정보
- 에이전트와의 마지막 대화에 대한 정보
- 예를 들어 제품 지원 에이전트는 사용자가 요청한 제품을 추적할 수 있습니다.
AgentApplication
- 추가하는 경로 처리기는
TurnState인스턴스와 함께 제공됩니다. 이 인스턴스에서 대화 또는 사용자 상태에 액세스합니다. - 상태가 자동으로 로드되고 저장됩니다.