대화 모델은 사용자가 작업에 할 수 있는 말과 작업이 사용자에게 응답하는 방식을 정의합니다. 대화 모델의 기본 구성요소는 인텐트, 유형, 장면, 프롬프트입니다. 작업 중 하나가 호출되면 Google 어시스턴트가 사용자를 해당 작업으로 넘기면 작업은 다음과 같이 대화 모델에 따라 사용자와 대화를 시작합니다.
유효한 사용자 요청 - 사용자가 작업에 말할 수 있는 내용을 정의하려면 어시스턴트 NLU를 보강하는 인텐트 컬렉션을 만듭니다. 그러면 어시스턴트 NLU가 작업과 관련된 요청을 이해할 수 있습니다. 각 인텐트는 사용자가 해당 인텐트와 일치시키기 위해 말할 수 있는 내용을 설명하는 학습 문구를 정의합니다. 어시스턴트 NLU는 유사한 문구를 포함하도록 이러한 학습 문구를 확장하며, 이러한 문구를 집계하면 인텐트의 언어 모델이 생성됩니다.
작업 로직 및 응답 - 장면은 인텐트를 처리하고, 필요한 로직을 실행하고, 사용자에게 반환할 메시지를 생성합니다.
유효한 사용자 요청 정의
사용자가 작업에 할 수 있는 말을 정의하려면 인텐트와 유형을 조합하여 사용합니다. 사용자 인텐트와 유형을 사용하면 자체 언어 모델로 어시스턴트 NLU를 보강할 수 있습니다. 시스템 인텐트 및 유형을 사용하면 사용자가 입력을 전혀 감지하지 않고 작업 또는 어시스턴트를 종료하려는 경우와 같이 내장된 언어 모델과 이벤트 감지를 활용할 수 있습니다.
사용자 인텐트 만들기
사용자 인텐트를 사용하면 사용자가 작업에 말할 수 있는 내용을 정의하는 자체 학습 문구를 정의할 수 있습니다. 어시스턴트 NLU는 이러한 문구를 사용하여 사용자가 말하는 내용을 이해하도록 학습합니다. 사용자가 사용자 인텐트의 언어 모델과 일치하는 내용을 말하면 어시스턴트는 인텐트를 일치시키고 작업을 알려 주므로 개발자는 로직을 실행하고 사용자에게 응답할 수 있습니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/console/images/builder/new-intent.png?authuser=6&hl=ko)
사용자 인텐트를 만들려면 다음 안내를 따르세요.
- Develop 탭에서 User intent > ⊕ (새 인텐트)를 클릭하고 이름을 지정한 다음 Enter를 눌러 인텐트를 만듭니다.
- 왼쪽 메뉴에서 새로 만든 인텐트를 클릭합니다. 인텐트 편집기가 표시됩니다.
- 인텐트에 학습 문구를 추가합니다. 어시스턴트 NLU를 학습시키려면 학습 문구를 최대한 많이 추가해야 합니다.
- 선택사항: 학습 문구에 주석을 달아 어시스턴트 NLU가 지정된 유형과 일치하는 유형이 지정된 매개변수를 사용자 입력에서 파싱하고 추출하도록 지시합니다.
- 새 매개변수 추가 필드에 매개변수의 이름을 입력합니다.
- 드롭다운 메뉴에서 시스템 유형을 선택하거나 맞춤 유형을 만듭니다.
- 매개변수가 목록인지 여부를 지정합니다. 이렇게 하면 매개변수가 동일한 유형의 여러 값을 수집할 수 있습니다.
- 학습 문구 추가 섹션에서 유형을 적용할 텍스트를 강조표시합니다. 이렇게 하면 어시스턴트 NLU에 강조 표시된 텍스트를 매개변수로 처리하도록 지시합니다. 사용자가 유형과 일치하는 무언가를 말하면 NLU는 그 값을 매개변수로 추출합니다.
시스템 인텐트 만들기
시스템 인텐트를 사용하면 사용자가 작업을 종료하려고 하거나 사용자 입력 시간이 초과될 때와 같은 일반적인 이벤트에 사전 정의된 언어 모델이 있는 인텐트를 활용할 수 있습니다. 시스템 인텐트를 만들려면 다음 안내를 따르세요.
- 개발 탭에서 시스템 인텐트를 클릭합니다. NO_MATCH, NO_INPUT, CANCEL과 같은 시스템 인텐트 세트를 사용할 수 있습니다.
- 각 시스템 인텐트에는 각 시스템 인텐트 유형에 맞게 맞춤설정할 수 있는 자체 핸들러가 있습니다. 예를 들어 시스템 인텐트를 사용하면 웹훅 이벤트를 트리거하고 이벤트가 발생할 때 정적 프롬프트를 전송할 수 있습니다.
커스텀 유형 만들기
커스텀 유형을 사용하면 자체 유형 사양을 만들어 NLU가 단일 키에 매핑해야 하는 값 집합을 이해하도록 학습시킬 수 있습니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/console/images/builder/type-options.png?authuser=6&hl=ko)
맞춤 유형을 만들려면 다음 단계를 따르세요.
- 개발 탭에서 유형 > CirclePlus; (새 유형)를 클릭합니다.
이 유형이 지원하는 값의 종류 섹션에서 유형 값을 제공하는 방법을 선택합니다.
- 단어 및 동의어를 사용하면 여러 값을 단일 키에 매핑할 수 있으며 이를 항목이라고 합니다. 유형에는 하나 이상의 항목이 포함될 수 있습니다. 이 옵션을 선택하면 다음 NLU 설정을 사용 설정할 수도 있습니다.
- 퍼지 일치 사용 설정 - 이 옵션을 사용하면 단어가 두 개 이상 있는 항목을 일치시킬 수 있으며, 단어가 다른 순서로 발음되는 경우에도 마찬가지입니다.
- 알 수 없는 값 허용 - 가능한 모든 값을 지정할 수 없는 경우 주변 입력 및 인텐트 학습 데이터를 기반으로 알 수 없는 단어나 구문(예: 식료품 목록에 추가될 수 있는 항목)이 허용됩니다.
- 정규 표현식을 사용하면 Google의 RE2 표준을 기반으로 정규 표현식 패턴과 유형을 일치시킬 수 있습니다.
- 자유 형식 텍스트를 사용하면 사용자가 입력하는 모든 내용과 일치하는 텍스트를 입력할 수 있습니다.
- 단어 및 동의어를 사용하면 여러 값을 단일 키에 매핑할 수 있으며 이를 항목이라고 합니다. 유형에는 하나 이상의 항목이 포함될 수 있습니다. 이 옵션을 선택하면 다음 NLU 설정을 사용 설정할 수도 있습니다.
항목 추가 섹션에 유형 값을 지정합니다. 자유 형식 텍스트를 선택하면 유형이 모든 텍스트와 일치하므로 어떠한 입력도 입력하지 않아도 됩니다.
작업 로직 및 응답 빌드
어시스턴트 NLU는 사용자 요청을 인텐트와 일치시키므로 작업이 장면에서 요청을 처리할 수 있습니다. 장면은 대화 중에 이벤트를 처리할 수 있는 강력한 로직 실행자입니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/conversational/images/scene.png?authuser=6&hl=ko)
장면 만들기
다음 섹션에서는 장면을 만들고 각 장면의 수명 주기 단계에 관한 기능을 정의하는 방법을 설명합니다.
장면을 만들려면 다음 단계를 따르세요.
- Develop 탭에서 Scenes > ⊕ (새 장면)를 클릭하고 이름을 지정한 다음 Enter를 눌러 장면을 만듭니다.
- 왼쪽 메뉴에서 새로 만든 장면을 클릭합니다. 장면 편집기가 표시됩니다.
일회성 설정 정의
장면이 처음 활성화되면 시작 시 단계에서 일회성 작업을 실행할 수 있습니다. On Enter 단계는 한 번만 실행되며 장면의 실행 루프 내에서 실행되지 않는 유일한 단계입니다.
장면 내에서 On Enter 단계를 클릭하여 기능을 지정합니다. 이 단계에서 다음 기능을 지정할 수 있습니다.
- 웹훅 호출: 웹훅을 트리거합니다. 웹훅에 대한 자세한 내용은 웹훅 문서를 참조하세요.
- 프롬프트 전송 - 사용자에게 정적 프롬프트를 지정하여 대화를 계속하는 방법을 알려줍니다. 프롬프트 지정에 대한 자세한 내용은 프롬프트 문서를 참조하세요.
그림 4. 진입 무대 장면의 예
조건 확인
조건을 사용하면 슬롯 채우기, 세션 저장소, 사용자 저장소, 홈 저장소 매개변수를 확인하여 장면 실행 흐름을 제어할 수 있습니다.
장면 내에서 Condition 스테이지의 + 아이콘을 클릭합니다. 조건 편집기가 오른쪽에 표시됩니다. 이 단계에서 다음 기능을 지정할 수 있습니다.
- 조건 - 논리를 기반으로 할 실제 조건문을 지정합니다. 구문 정보는 conditions 문서를 참조하세요.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/conversational/images/scene-condition.png?authuser=6&hl=ko)
슬롯 채우기 정의
슬롯을 사용하면 사용자 입력에서 입력된 매개변수를 추출할 수 있습니다.
장면 편집기에서 슬롯 채우기 단계의 + 아이콘을 클릭합니다. 슬롯의 편집기가 오른쪽에 표시됩니다. 슬롯의 다음 속성을 지정할 수 있습니다.
- 슬롯 이름: 슬롯의 이름을 지정합니다. 슬롯 값 매핑을 활용하려면 상응하는 인텐트 매개변수와 동일한 이름을 사용하세요.
- 슬롯 유형: 시스템 유형 또는 맞춤 유형으로 슬롯의 유형을 지정합니다.
- 이 슬롯은 필수임: 이 슬롯을 필수로 표시합니다. 사용 설정하면 이 슬롯이 채워질 때까지 슬롯 채우기가 완료되지 않습니다.
- 이 슬롯에 기본값 할당: 지정된 세션 매개변수에서 읽은 슬롯의 기본값을 지정합니다.
- 슬롯 값 다시 쓰기 맞춤설정: 슬롯 채우기가 완료된 후 슬롯 값을 유지할 세션 매개변수를 지정합니다.
- 슬롯 유효성 검사: 슬롯이 채워지면 웹훅을 트리거합니다. 이 설정은 모든 슬롯에 적용됩니다.
- 웹훅 호출 (슬롯이 필요한 경우 사용 설정됨): 웹훅을 트리거합니다. 웹훅에 대한 자세한 내용은 웹훅 문서를 참조하세요.
- 메시지 전송 (슬롯이 필요한 경우 사용 설정됨): 사용자에게 전송할 정적 메시지를 지정하여 사용자가 대화를 계속하는 방법을 알 수 있도록 합니다. 프롬프트 지정에 대한 자세한 내용은 프롬프트 문서를 참조하세요.
특정 슬롯 유형 (예: 거래 또는 사용자 참여 관련)의 경우 슬롯을 구성할 수 있는 추가 섹션이 표시됩니다. 슬롯 구성은 제공된 속성에 따라 사용자의 대화형 환경을 변경할 수 있습니다.
슬롯을 구성하려면 처리 (세션 매개변수로 참조됨) 또는 인라인 JSON 편집기에서 JSON 객체에 속성을 제공합니다.
작업 빌더 JSON 참조에서 각 슬롯 유형에 사용 가능한 속성을 찾을 수 있습니다. 예를 들어 actions.type.DeliveryAddressValue
슬롯 유형은 DeliveryAddressValue
슬롯의 참조 콘텐츠에 상응합니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/conversational/images/scene-slot.png?authuser=6&hl=ko)
슬롯 값 매핑
많은 경우 이전 인텐트 일치에는 해당하는 장면의 슬롯 값을 부분적으로 또는 완전히 채우는 매개변수가 포함될 수 있습니다. 이러한 경우 인텐트 매개변수로 채워진 모든 슬롯은 슬롯 이름이 인텐트 매개변수 이름과 일치하면 장면의 슬롯 채우기에 매핑됩니다.
예를 들어 사용자가 '커다란 바닐라 커피를 주문하고 싶어'라고 말하여 음료를 주문하는 인텐트를 매칭하는 경우 해당 장면에서 동일한 슬롯을 정의하면 크기, 맛, 음료 유형에 관한 기존 슬롯이 해당 장면에 채워진 것으로 간주됩니다.
입력 처리
이 단계에서는 어시스턴트 NLU가 사용자 입력을 인텐트와 일치시키도록 할 수 있습니다. 원하는 인텐트를 장면에 추가하여 인텐트 일치 범위를 특정 장면으로 지정할 수 있습니다. 이를 통해 특정 장면이 활성화되었을 때 어시스턴트에 특정 인텐트를 일치시키도록 지시하여 대화 흐름을 제어할 수 있습니다.
장면 내에서 사용자 인텐트 처리 또는 시스템 인텐트 처리 단계의 + 아이콘을 클릭합니다. 인텐트 핸들러의 편집기가 오른쪽에 표시됩니다. 인텐트 핸들러의 다음과 같은 기능을 지정할 수 있습니다.
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/conversational/images/scene-customintent.png?authuser=6&hl=ko)
![](https://developers-dot-devsite-v2-prod.appspot.com/static/assistant/conversational/images/scene-systemintent.png?authuser=6&hl=ko)