봇에서 사람으로 대화 전환

적용 대상: SDK v4

봇이 보유한 인공 지능의 양에 관계없이 여전히 대화를 인간에게 전달해야 할 수도 있습니다. 봇이 사용자를 이해하지 못하거나(AI 제한으로 인해) 요청을 자동화할 수 없고 사용자 작업이 필요한 경우 이러한 핸드오프가 필요할 수 있습니다. 이러한 경우 봇은 대화를 전달하고 사용자에게 원활한 전환을 제공해야 하는 시기를 인식해야 합니다.

Microsoft Bot Framework는 개발자가 다양한 에이전트 참여 플랫폼과 통합할 수 있는 개방형 플랫폼입니다.

핸드오프 통합 모델

Microsoft Bot Framework는 에이전트 참여 플랫폼과 통합하기 위한 두 가지 모델을 지원합니다. 핸드오프 프로토콜은 두 모델에 대해 동일 하지만 온보딩 세부 정보는 모델과 에이전트 참여 플랫폼 간에 다릅니다.

목표는 고객의 시스템과 통합하기 위한 범용 솔루션을 제공하는 것이 아니라 루프에서 인간과 대화형 AI 시스템을 빌드할 수 있는 봇 개발자 및 시스템 통합자에게 공통 언어 및 모범 사례를 제공하는 것입니다.

에이전트로서의 봇

에이전트로 봇이라고 하는 첫 번째 모델에서 봇은 에이전트 허브에 연결된 라이브 에이전트의 순위를 조인하고 다른 Bot Framework 채널에서 요청이 온 것처럼 사용자 요청에 응답합니다. 사용자와 봇 사이의 대화는 인간 에이전트로 에스컬레이션될 수 있으며, 이때 봇은 활성 대화에서 분리됩니다.

이 모델의 기본 장점은 단순성입니다. 최소한의 노력으로 에이전트 허브에 기존 봇을 추가할 수 있으며 에이전트 허브는 메시지 라우팅의 복잡성을 처리합니다.

Diagram of an agent hub that can direct messages to a bot or human agents.

프록시로 봇

두 번째 모델을 프록시봇이라고 합니다. 사용자는 봇이 인간 에이전트의 도움이 필요하다고 결정할 때까지 봇과 직접 대화합니다. 봇의 메시지 라우터 구성 요소는 대화를 에이전트 허브로 리디렉션하여 적절한 에이전트로 디스패치합니다. 봇은 루프에서 유지되고 대화의 기록을 수집하거나 메시지를 필터링하거나 에이전트와 사용자 모두에게 추가 콘텐츠를 제공할 수 있습니다.

유연성과 제어는 이 모델의 기본 장점입니다. 봇은 여러 채널을 지원하고 사용자, 봇 및 에이전트 허브 간에 대화를 에스컬레이션하고 라우팅하는 방법을 제어할 수 있습니다.

Diagram of a bot that can route messages to an agent hub.

핸드오프 프로토콜

프로토콜은 시작에 대한 이벤트를 중심으로 하고, 봇에서 채널로 전송하고, 채널에서 봇으로 보내는 업데이트를 상태.

핸드오프 시작

핸드오프 시작 이벤트는 핸드오프를 시작하기 위해 봇에 의해 생성됩니다.

이벤트에는 다음이 포함될 수 있습니다.

  • 대화를 적절한 에이전트로 라우팅하기 위한 핸드오프 요청의 컨텍스트입니다.
  • 에이전트가 핸드오프가 시작되기 전에 고객과 봇 간에 일어난 대화를 읽을 수 있도록 대화의 대본입니다.

다음은 일반적인 핸드오프 시작 이벤트 속성입니다.

  • 이름: 필수 요소입니다. 이름 속성은 "handoff.initiate"로 설정해야 합니다.

  • 대화: 필수 대화 속성은 활동이 존재하는 대화를 설명합니다. 대화에는 대화Id가 포함되어야 합니다.

  • 값: 선택 사항으로, 속성은 허브가 대화를 관련 에이전트로 라우팅하는 데 사용할 수 있는 에이전트 허브별 JSON 콘텐츠를 포함할 수 있습니다.

  • 첨부 파일: 선택 사항인 첨부 파일 속성은 대본을 첨부 파일로 포함할 수 있습니다. Bot Framework는 기록 첨부 파일 형식을 정의합니다. 첨부 파일은 인라인(크기 제한에 따라 다함) 또는 오프라인으로 보낼 수 있습니다 ContentUrl.

    handoffEvent.Attachments = new List<Attachment> {
        new Attachment {
            Content = transcript,
            ContentType = "application/json",
            Name = "Transcript",
        }
    };
    

    참고 항목

    에이전트 허브는 이해하지 못하는 첨부 파일 형식을 무시 해야 합니다.

봇이 에이전트에 대화를 전달해야 할 필요성을 감지하면 핸드오프 시작 이벤트를 전송하여 의도를 알립니다. C#용 SDK에는 유효한 핸드오프 시작 이벤트를 만드는 메서드가 포함되어 CreateHandoffInitiation 있습니다.

var activities = GetRecentActivities();
var handoffContext = new { Skill = "credit cards" };
var handoffEvent =
    EventFactory.CreateHandoffInitiation(
        turnContext, handoffContext, new Transcript(activities));
await turnContext.SendActivityAsync(handoffEvent);

핸드오프 상태

핸드오프 상태 이벤트는 에이전트 허브에 의해 봇으로 전송됩니다. 이 이벤트는 시작된 핸드오프 작업의 상태 대해 봇에 알릴 수 있습니다.

참고 항목

봇은 핸드오프 상태 이벤트를 처리할 필요는 없습니다. 그러나 이를 거부해서는 안 됩니다.

다음은 이벤트 필드에 상태 일반적인 핸드오프입니다.

  • 이름: 필수 요소입니다. 이름 속성은 "handoff.상태"로 설정해야 합니다.

  • 대화: 필수 대화 속성은 활동이 존재하는 대화를 설명합니다. 대화에는 대화Id가 포함되어야 합니다.

  • 값: 필수 요소로, 핸드오프 작업의 현재 상태 설명하는 값 속성입니다. 값에는 다음과 같은 속성이 있습니다.

    • 상태: 필수 상태 속성은 다음 값 중 하나를 가질 수 있습니다.

      의미
      "수락됨" 에이전트가 요청을 수락하고 대화를 제어했습니다.
      "실패" 핸드오프 요청이 실패했습니다. 메시지 속성에는 오류와 관련된 추가 정보가 포함될 수 있습니다.
      "completed" 핸드오프 요청이 완료되었습니다.
    • 메시지: 선택 사항인 메시지 속성은 에이전트 허브에서 정의한 개체입니다.

    다음은 몇 가지 값 개체 예제입니다.

    { "state" : "completed" }
    
    { "state" : "failed", "message" : "Can't find agent with requested skill" }
    

핸드오프 라이브러리

핸드오프 라이브러리핸드오프를 지원하는 Bot Framework v4 SDK를 보완하기 위해 만들어졌습니다. 특히 다음과 같습니다.

  • 에이전트에 대한 전달(에스컬레이션이라고도 함 )을 지원하기 위해 Bot Framework SDK에 추가된 항목을 구현합니다.
  • 신호 전달 작업에 대한 세 가지 이벤트 형식의 정의를 포함합니다.

참고 항목

특정 에이전트 허브와의 통합은 라이브러리의 일부가 아닙니다.

추가 리소스