장면

장면은 인텐트와 함께 대화 모델의 다른 주요 구성 요소입니다. 장면은 대화의 개별 상태를 나타내며 주요 목적은 대화를 논리적 청크로 구성하고 작업을 실행하며 사용자에게 메시지를 반환하는 것입니다.

장면의 일부 기능은 다음과 같습니다.

  • 루프 실행 - 장면은 정의된 전환 기준을 충족할 때까지 루프 내에서 실행됩니다. 이를 통해 단일 장면 내에서 제어 로직 흐름을 훨씬 더 효율적으로 만들 수 있습니다.
  • 대화상자 분리 - 인텐트와 함께 장면을 사용하면 대화상자를 논리적 청크로 그룹화하여 사용자 요청 및 작업 응답 쌍을 쉽게 빌드할 수 있습니다.
  • 인텐트 일치 범위 지정 - 한 번에 하나의 장면만 활성화할 수 있으므로 선택한 장면으로 인텐트 일치 범위를 지정하고 장면이 활성 상태일 때만 일치시키도록 할 수 있습니다.
  • 슬롯 채우기 - 장면 내에서 슬롯 채우기를 사용하여 여러 인텐트를 만들지 않고도 입력된 여러 사용자 입력을 수집할 수 있습니다.
  • 장면 조건 - 웹훅을 트리거하지 않고도 슬롯, 세션, 사용자, 홈 스토리지를 확인하여 간단한 조건부 로직을 실행할 수 있습니다.

대화 모델의 일부로 장면을 커스텀 장면으로 정의할 수 있습니다. 어시스턴트의 대화 로직에는 대화를 위한 표준 기능을 제공하는 시스템 장면도 포함됩니다.

맞춤 장면

맞춤 장면은 작업의 대화 모델의 일부를 형성하는 대화 로직의 빌딩 블록입니다. 맞춤 장면에는 활성화라고 하는 활성화라고 하는 방법 및 시작 방법, 실행되는 대화 처리(실행 수명 주기라고 함), 장면 종료 방법(전환이라고 함)을 정의하는 단계가 있습니다.

  • 활성화 - 장면을 실행하려면 먼저 전역 인텐트 일치 또는 장면 전환을 통해 활성화해야 합니다.
  • 실행 - 장면이 활성화되면 슬롯 채우기, 조건부 확인, 프롬프트 생성, 웹훅 이벤트 트리거와 같은 다양한 작업을 실행할 수 있는 잘 정의된 수명 주기로 실행됩니다.
  • 전환 - 장면이 개발자가 정의한 기준(예: 인텐트 일치 또는 슬롯 채우기 완료)을 충족하면 다른 장면으로 전환하여 더 많은 로직을 실행할 수 있습니다. 또는 대화 종료 시스템 장면으로 전환하여 사용자와의 대화를 종료할 수 있습니다.
그림 1. 일반적인 장면 전환 전역 인텐트는 호출 중에 장면을 활성화하고 장면은 사용자 입력을 사용하고 인텐트를 일치시켜 다른 장면을 전환하고 활성화합니다.

실행

장면을 실행하려면 먼저 활성화되어 있어야 합니다. 언제든지 하나의 장면만 활성화할 수 있습니다. 다음과 같은 방법으로 장면을 활성화할 수 있습니다.

  • 호출 - 사용자 입력이 전역 인텐트의 언어 모델과 일치하면 장면을 활성화하여 호출을 처리할 수 있습니다.
  • 정적 장면 전환 - 장면이 전환 기준을 충족하는 경우 다른 장면으로의 전환을 정의할 수 있습니다.
  • 동적 장면 전환 - 웹훅 핸들러 내에서 프로그래매틱 방식으로 다른 장면으로 전환할 수 있습니다.

실행 수명 주기

장면이 활성화되면 설정된 전환 기준을 충족할 때까지 반복되는 잘 정의된 수명 주기 내에서 장면이 실행됩니다. 장면의 실행 수명 주기는 다음 순서로 실행되는 선택적 단계로 분리됩니다.

  1. 시작 시 - 이 단계는 장면이 활성화될 때 한 번만 실행됩니다. 웹훅을 트리거하거나 사용자에게 장면을 일회성으로 설정하라는 메시지를 표시할 수 있습니다.

  2. 조건 - 조건을 사용하면 수명 주기 단계를 진행하거나 웹훅을 트리거하거나 메시지를 보내기 전에 특정 기준을 평가할 수 있습니다. 이 단계에서는 실행 루프를 종료하기 위한 전환 기준을 정의할 수 있습니다.

  3. 슬롯 채우기 - 장면에서 모든 필수 슬롯 (입력된 데이터)을 수집할 때까지 사용자에게 자동으로 메시지를 표시할 수 있습니다. 장면은 실행 루프를 통해 매번 단일 슬롯을 요청합니다. 슬롯이 하나라도 누락되면 장면의 수명 주기는 결국 슬롯 채우기 단계로 루프백하고 다음 필수 슬롯을 묻는 메시지를 표시합니다. 이 단계에서는 실행 루프를 종료하기 위한 전환 기준을 정의할 수 있습니다.

  4. 프롬프트 - 어시스턴트가 메시지 큐를 사용자에게 전달하고 큐를 지웁니다. 프롬프트 큐는 마지막으로 이 단계가 큐를 삭제한 후 집계된 프롬프트의 병합된 모음입니다.

  5. 입력 - 어시스턴트는 사용자 입력을 소비하고 장면에 반환하므로 개발자는 사용자 입력을 처리할 수 있습니다. 여기에는 인텐트 일치 (전역 인텐트 또는 장면 내의 사용자 인텐트), 계속 슬롯 채우기 (완료되지 않은 경우), 일치 없음 또는 입력 오류 처리 등이 포함될 수 있습니다. 이 단계에서는 실행 루프를 종료하기 위한 전환 기준을 정의할 수 있습니다. 전환이 이루어지지 않으면 실행 루프가 조건 단계로 돌아갑니다.

그림 2. 장면 실행 수명 주기

다음 섹션에서는 각 수명 주기 단계를 자세히 설명합니다.

진입 시

Enter(시작 시)는 장면의 실행 루프에서 실행되지 않는 유일한 스테이지입니다. 다음 순서로 장면을 1회 초기화합니다.

  • 어시스턴트 런타임이 이전에 일치된 인텐트에서 슬롯을 채울 수 있는 경우 이제 슬롯 채우기 단계를 위해 장면을 준비합니다. 예를 들어 일부 사용자 입력은 인텐트를 일치시키고 슬롯을 제공할 수 있습니다. 이 인텐트 일치는 장면을 활성화하고 슬롯 이름이 일치하면 장면의 슬롯을 채울 수 있습니다.
  • 웹훅이 사용 설정된 경우 이벤트를 동기식으로 트리거하고 웹 서비스가 응답을 반환할 때까지 기다립니다.
  • 런타임이 웹훅 응답을 수신하면 프롬프트의 매개변수 참조를 분석하고 사용자 노출 영역에 따라 프롬프트 후보를 선택한 다음 후보가 나중에 사용자에게 전송할 대안을 하나 선택합니다.
  • 웹훅 응답에 프롬프트가 포함되어 있으면 프롬프트 대기열에 추가합니다. 정적 프롬프트도 존재하는 경우 웹훅 프롬프트가 먼저 프롬프트 큐에 병합되고 이어서 정적 프롬프트가 병합됩니다.
  • 웹훅 응답에 전환이 포함되어 있으면 지금 포함합니다. 그렇지 않으면 장면은 슬롯 채우기 단계로 계속 진행됩니다.

조건

조건을 사용하면 조건이 참인지 세션, 사용자 또는 슬롯 데이터를 확인할 수 있습니다. 예를 들어 모든 슬롯이 채워졌는지 확인하고 슬롯을 처리하기 위해 다른 장면으로 전환하는 기준으로 이를 설정할 수 있습니다.

  • 어시스턴트 런타임은 지정된 순서대로 각 조건을 평가합니다. true로 평가되는 첫 번째 조건은 연결된 핸들러를 실행하고 조건 평가를 중지합니다.
  • 슬롯 채우기를 실행하면 else if scene.slots.status = "FINAL" 조건이 조건 목록에 자동으로 추가됩니다. 이 선택적 조건은 슬롯 채우기가 완료되었는지 확인하고 웹훅을 트리거하거나 프롬프트 대기열에 메시지를 추가할 수 있습니다.

조건 평가 후 장면에서 전환을 정의하지 않으면 계속해서 슬롯 채우기가 진행됩니다.

슬롯 채우기

이 단계에서는 채워지지 않은 단일 필수 슬롯에 대한 슬롯 프롬프트를 추가합니다. 장면에 슬롯을 정의하지 않으면 이 단계에서는 아무 작업도 실행하지 않습니다.

  • 어시스턴트 런타임은 채워지지 않은 첫 번째 슬롯을 선택하고 이에 상응하는 메시지를 프롬프트 대기열에 추가합니다. 장면의 실행 루프가 있기 때문에 채워지지 않은 추가 슬롯은 나중에 실행 루프가 이 단계로 돌아올 때 처리됩니다.
  • 현재 활성 슬롯에는 장면의 입력 단계에 정의된 항목보다 우선하는 오류 처리 프롬프트가 있을 수 있습니다.
  • 사용자가 슬롯을 채우면 웹훅을 트리거하여 웹 서비스에서 유효성을 검사할 수 있습니다.

프롬프트

어시스턴트 런타임은 사용자에게 메시지 대기열을 전달하고, 대기열을 지우고, 사용자 입력을 사용합니다.

입력

어시스턴트 런타임은 입력을 인텐트 또는 슬롯에 일치시키려고 시도합니다.

  • 사용자 인텐트 일치의 경우 장면에서 연결된 인텐트 핸들러 (사용자 또는 시스템 인텐트)를 실행합니다. 장면의 인텐트 핸들러는 모든 전역 인텐트보다 우선합니다. 전환을 정의하지 않은 경우 장면 실행은 조건 단계를 루프백합니다.
  • 슬롯 일치의 경우 장면이 슬롯 채우기 단계로 돌아갑니다.
  • 시스템 인텐트 일치의 경우 (예: 입력 없음 또는 일치 없음) 프롬프트 대기열에 메시지를 추가하거나 웹훅을 트리거하거나 전환을 실행할 수 있습니다. 일치하는 없음 프롬프트가 여러 개 정의된 경우 어시스턴트 런타임은 슬롯 채우기, 장면, 전역 없음 일치 프롬프트 순서로 가장 관련성이 높은 메시지를 선택합니다. 연속된 일치 항목이 없으면 해당 이벤트가 생성됩니다.

    • no_match_1
    • no_match_2
    • no_match_final

    각 일치 수준 (슬롯 채우기, 장면, 전역)은 웹훅 이벤트를 트리거할 수 있습니다. 기본적으로 세 번째이자 마지막 일치 항목 없음으로 대화가 종료됩니다.

전환

전환은 다음 단계에서 발생할 수 있습니다.

  • 조건 - 정의한 조건에 따라 다른 장면으로 전환할 수 있습니다. 일반적인 확인 조건은 슬롯 채우기를 완료하는 것입니다.
  • 입력 (사용자 인텐트 일치) - 인텐트가 일치하면 다른 장면으로의 전환을 트리거할 수 있습니다.
  • 입력 (시스템 인텐트 일치) - 시스템 인텐트 일치 이벤트 중에 웹훅을 트리거할 수 있습니다. 일치 항목 및 입력 이벤트가 없는 경우 장면은 기본적으로 세 번 발생한 후 대화 종료 장면으로 전환됩니다.

시스템 장면

시스템 장면을 사용하면 어시스턴트에서 제공하는 기본 제공 대화 로직을 사용할 수 있습니다. 이를 통해 사용자 환경에 표준 대화 흐름을 추가할 수 있습니다. 예를 들어 계정 연결 시스템 장면에서는 어시스턴트가 잠시 인계받아 계정 연결 흐름을 실행하고 실제로 사용자의 계정을 연결하는 데 필요한 정보를 반환합니다. 시스템 장면은 표준 장면 수명 주기를 따르지 않습니다.

다음 목록은 지원되는 시스템 장면과 사용 방법을 설명합니다.

  • 대화 종료 - 마이크를 닫고 사용자와의 대화를 종료합니다. 어시스턴트는 이 장면이 실행된 후 사용자 환경 제어 권한을 되돌립니다.
  • 계정 연결 - 사용자에게 계정 연결 흐름을 안내하고 백엔드 서버의 사용자 계정을 사용자의 Google 계정과 연결하는 데 필요한 정보를 작업에 제공합니다. 이 장면을 사용하는 방법에 관한 자세한 내용은 계정 연결 문서를 참고하세요.
  • 일일 업데이트 - 사용자의 일일 업데이트에 작업을 추가하는 확인 흐름을 통해 사용자에게 안내합니다. 이 장면을 사용하는 방법에 관한 자세한 내용은 일일 업데이트 문서를 참고하세요.
  • 알림 - 작업에서 알림을 받을 수 있도록 확인 흐름을 통해 사용자를 안내합니다. 이 장면을 사용하는 방법에 관한 자세한 내용은 푸시 알림 문서를 참고하세요.