- 인쇄
- PDF
태스크 사용
- 인쇄
- PDF
Classic/VPC 환경에서 이용 가능합니다.
태스크를 사용하면 사용자의 질문을 이해하여 최적의 답변을 제공하는 것에서 끝나는 것이 아니라, 사용자와의 대화를 통해서 추가 정보를 수집하고, 수집된 정보를 기반으로 사용자 포인트 조회나 택배 반품 처리와 같은 복잡한 대화를 수행할 수 있습니다.
태스크 기능을 활용하면 한층 더 세련된 대화를 구현할 수 있으나 매우 정교한 엔티티 설계가 필요하고 실행 제약에 조건이 있으므로 세심하게 제작해야 합니다.
태스크 개요
태스크를 설계하기 전에 알아야 할 개념을 설명합니다.
1. 슬롯과 엔티티 개념
슬롯은 사용자가 채워야 하는 빈칸을 의미합니다. 챗봇이 사용자에게 물어보는 슬롯(빈칸)을 사용자가 모두 채워주어야 태스크를 수행하기 위한 준비가 완료됩니다.
엔티티는 슬롯에 담을 내용을 정해두는 것을 의미합니다. 엔티티는 슬롯과 매핑됩니다.
예를 들어 피자 주문 시나리오에서 ‘수량’이라는 슬롯과 엔티티는 1판, 2판, 3판과 같은 사전형 데이터가 등록된 @피자수량단위 엔티티가 매핑되어 있다면 사용자의 발화에서 ‘@피자수량단위’ 엔티티를 분석하여 ‘수량’ 슬롯에 채웁니다. 따라서 태스크에서 3개의 슬롯을 설정한 경우, 3개의 슬롯에 담길 엔티티도 3개가 정의되어야 합니다.
2. 태스크 동작 방식
슬롯을 모두 채워서 태스크를 수행하기 위한 필수 슬롯이 모두 충족되어야 태스크를 수행할 수 있으므로, 챗봇은 슬롯이 모두 채워질 때까지 사용자에게 반복 질문을 합니다. 슬롯이 모두 충족되었다면, 챗봇은 최종 답변을 응답하며 태스크를 수행할 수 있습니다.
만약 미리 설정한 질문 횟수를 초과할 때까지 슬롯이 채워지지 않은 경우, 챗봇은 태스크를 수행할 수 없게 되므로 최종 답변을 응답하지 못하고 되묻기 초과 메시지를 응답하며 태스크를 종료합니다. 반대로 사용자가 더 이상 태스크를 수행하고 싶지 않다는 의사를 밝힐 경우에도 태스크를 종료할 수 있습니다(태스크 종료 키워드와 메시지를 설정된 경우).
3. 태스크와 일반 대화 사이의 흐름
태스크의 슬롯을 채우는 과정 중에 사용자가 다른 질문을 하게 될 수 있습니다. 예를 들어 피자를 주문하는 상황에서 배달료는 어떻게 책정되는지, 어떤 피자가 있는지, 대량 주문도 가능한지 등에 대한 질문이 대화 중간에 갑자기 인입될 수 있습니다. 만약 사용자가 슬롯을 채우는 것과 관련 없는 질문을 하는 경우, 잠시 해당 태스크에서 이탈해서 다른 대화로 이동하여 문의를 해결해준 후, 다시 태스크로 돌아오도록 설계하는 것도 가능합니다.
4. 이전 슬롯 유지
챗봇이 이전 대화를 기억하는 컨텍스트 기능을 활용한 태스크 설계도 가능합니다. 만약 사용자가 ''오늘 서울의 날씨''를 물어본 다음, "내일은?" 이라고 물었을 경우, 사용자에게 지역 정보를 다시 물어보지 않고 방금 사용자가 말한 "서울"이라는 지역 정보를 기억하여 추가 질문 없이 내일의 서울 날씨를 말해줄 수 있습니다. 이렇게 설계하기 위해서는 컨텍스트로 연결된 이전의 태스크에서 "지역" 슬롯 정보를 유지해서 가져오면 됩니다.
태스크 설계
챗봇의 시나리오에 따라, 대화 종류를 일반 대화와 태스크 중에 선택할 수 있습니다. 만약 피자 주문이나 택배 반품과 같이 사용자와의 인터렉티브한 대화를 통해 여러 정보를 수집하는 챗봇을 개발해야 할 경우에는 태스크를 활용하는 것을 권장합니다.
태스크를 통해 사용자에게 슬롯에 채울 정보를 받고, 필수 슬롯이 모두 채워지면 챗봇은 최종 답변을 응답합니다. 슬롯의 값 표현식을 활용하여 사용자 발화를 활용한 답변을 응답할 수 있습니다.
예를 들어, 피자 주문 시나리오에서 사용자에게 피자 종류, 피자 크기, 음료수에 대한 값을 받아야 할 경우, 받아야 할 정보를 엔티티로 생성한 후, 태스크 생성 시 슬롯에 해당 엔티티를 연결합니다. 챗봇은 피자 주문에 필요한 모든 슬롯이 채워질 때까지 사용자에게 입력을 받고 슬롯이 모두 채워지면 해당 정보를 토대로 주문을 접수할 수 있습니다.
태스크 생성
태스크를 생성하는 방법은 다음과 같습니다.
- 대화 정보 입력을 참고하여 대화를 생성해 주십시오.
- 대화 정보 영역 상단의 [고급 설정] 버튼 > [대화 종류] 탭에서 대화 종류를 태스크로 변경해 주십시오.
- 질문을 등록해 주십시오.
- 태스크를 실행할 수 있는 질문입니다. 사용자가 해당 질문을 입력하거나, 챗봇이 판단했을 때 유사한 질문이라고 결정되면 해당 태스크가 실행됩니다.
- 만약 사용자의 발화에 이미 슬롯을 채울 정보가 있는 경우, 챗봇은 해당 슬롯을 자동으로 채운 후에 태스크를 시작합니다. 예를 들어, 피자 종류, 피자 크기, 음료수 슬롯을 채워야 하는 태스크에서 사용자가 “포테이토 피자 주문해줘”라는 질문을 입력했을 경우, 피자 종류 슬롯을 자동으로 채운 후에 피자 크기와 음료수 슬롯만 채우게 됩니다.
- 슬롯 정보를 입력해 주십시오.
챗봇은 슬롯이 등록된 순서대로 슬롯의 정보를 채웁니다. 하지만 챗봇이 채우려는 슬롯의 순서와 상관없이, 사용자가 다른 순서의 슬롯을 먼저 응답하거나 여러 개의 슬롯을 한 번에 응답할 경우, 챗봇은 이미 응답한 슬롯에 대해 사용자에게 묻지 않고 다음 슬롯을 채우도록 유도합니다.- 필수: 필수 체크 박스를 클릭하면 해당 슬롯이 채워지지 않을 경우 태스크 수행에 실패하고 최종 답변을 응답하지 않습니다. 필수 체크 박스를 클릭하지 않으면, 해당 정보가 채워지지 않더라도 태스크가 계속 진행됩니다.
- 슬롯: 슬롯의 이름을 입력합니다. 해당 태스크 안에서 중복되지 않는 값으로 입력합니다.
- 엔티티: 슬롯과 매핑할 엔티티를 선택합니다. 도메인 엔티티와 시스템 엔티티 모두 사용할 수 있습니다.
- 값: 사용자가 채운 슬롯의 값을 최종 답변에 삽입하여 답변할 수 있습니다. 채워진 슬롯의 값을 사용하기 위한 표현식을 입력합니다.
- 되묻기 질문: 슬롯을 채우기 위해 물어볼 질문을 입력합니다. 챗봇은 나열된 슬롯 순서대로 되묻기 질문을 수행하여 슬롯을 채워 나갑니다.
- 슬롯 정보 입력이 완료되면 [추가] 버튼을 클릭해 주십시오.
- 슬롯의 세부 설정을 지정하려면 기타 설정 아이콘을 클릭해 주십시오.
- 슬롯 기타 설정을 참조해 주십시오.
- 최종 답변을 등록해 주십시오.
- 답변을 등록하는 방법은 답변 입력을 참조해 주십시오.
- 답변을 등록하는 방법은 답변 입력을 참조해 주십시오.
- 태스크 종료 메시지를 설정해 주십시오.
- 태스크 진행 도중 사용자가 즉시 대화를 중단하고 싶은 상황이 발생할 때 사용자가 강제로 태스크를 멈추는 것이 가능하도록 태스크 종료 키워드 및 메시지를 설정합니다.
- 태스크 종료 메시지를 설정하는 방법은 태스크 종료 메시지 등록을 참조해 주십시오.
최종 답변에서 액션 메소드V1.0을 호출하는 경우
해당 태스크에서 채워진 엔티티들을 X-KAA-USERENTITY 헤더에 포함하여 함께 전달합니다. X-KAA-USERENTITY 헤더에 엔티티의 key값을 포함하여 UTF-8로 URL 인코딩하여 전달하게 되는데, 이 때 인코딩 되기 전의 엔티티의 key 값은 다음의 형식을 따릅니다.
"엔티티 이름 = 사용자가 입력한 단어"
최종 답변에서 액션 메소드V2.0을 호출하는 경우
해당 태스크에서 출현한 엔티티들을 userInfo.taskEntities에 담아 전달합니다.
"userInfo": {
"id": "사용자id",
"key": "사용자key",
"query": "사용자가입력한질문",
"entities": {
"엔티티코드1": "사용자가입력한단어1",
"엔티티코드2": "사용자가입력한단어2"
},
"taskEntities": {
"엔티이이름1": "사용자가입력한단어1",
"엔티이이름2": "사용자가입력한단어2"
}
슬롯 기타 설정
기타 설정 창에서 슬롯에 대한 구체적인 설정을 변경할 수 있습니다.
선택지 설정 탭
슬롯을 채우기 위한 선택지를 Quick reply 형태로 노출할 수 있습니다. 최대 10개의 선택지를 노출할 수 있습니다.
- 대표어 선택: 엔티티 대표어 리스트를 불러와 선택지로 노출
- 텍스트 입력: 선택지를 직접 텍스트로 입력하여 선택지로 노출
- 기존 되묻기 선택지: 다른 태스크의 선택지를 불러와서 선택지로 노출
슬롯 설정 탭
사용자가 응답한 엔티티를 해당 슬롯에 채우기 전에 슬롯 설정 탭에 입력된 URL을 통해 검증합니다. 검증에 성공한 경우에만 슬롯을 채울 수 있으며, 검증에 실패한 경우에는 슬롯을 채우지 않습니다.
슬롯 검증 요청 형식은 다음과 같습니다.
{
"userInput": "사용자가 입력한 발화입니다",
"represent": "사용자가 입력한 값의 대표어입니다",
"filledEntity": {
"지금까지 채워진 엔티티 이름1": "엔티티1",
"지금까지 채워진 엔티티 이름2": "엔티티2"
},
"userKey": "사용자 구분을 위해 해시된 키 값입니다. 액션 메소드에서 호출할 때 헤더에 담긴 userKey와 동일합니다"
}
슬롯 검증 응답 형식은 다음과 같습니다.
- valid: 검증 성공(true), 실패(false) 여부입니다. 검증에 성공한 값만 슬롯에 채울 수 있습니다.
- Recover: 만약 슬롯 검증에 실패한 경우에 되묻기 횟수를 차감할지 여부를 설정합니다. true일 경우 되묻기 횟수를 차감하지 않습니다.
{
"message": "사용자에게 응답할 메시지입니다.",
"valid": true,
"recover": false
}
되묻기 설정 탭
- 되묻기 질문: 되묻기 횟수가 초과된 경우 대신 응답할 메시지를 입력해 주십시오. 필수 슬롯의 경우 되묻기 횟수가 초과되고 슬롯을 채우지 못하면 최종 답변을 응답하지 않습니다. 대신 [되묻기 설정] 탭에 입력된 되묻기 횟수 초과 메시지를 응답합니다. 만약 되묻기 횟수 초과 메시지가 입력되지 않은 경우, 현재 사용자 발화에 매칭된 답변 또는 실패 메시지를 응답합니다.
- 되묻기 횟수: 되묻기 질문을 응답할 횟수를 지정할 수 있습니다. 챗봇은 슬롯을 채우기 위해 설정된 되묻기 횟수만큼 사용자에게 질문을 반복합니다.
값 유형
사용자가 채운 슬롯의 값을 최종 답변 또는 되묻기 질문에 불러와 사용할 때 어떤 방식으로 사용할 지 선택할 수 있습니다.
- 대표어 치환 값: 사용자가 응답한 값이 아닌 대표어로 치환한 값을 불러와 사용합니다. 대표어 치환값은 사전형 엔티티인 경우에만 사용 가능합니다.
- 사용자 응답 값: 사용자가 응답한 값을 그대로 불러와 사용합니다.
예를 들어 ‘@피자’ 엔티티에 ‘대표어: 콤비네이션 피자', 유사어:** '콤비네이션', '콤비 피자'**’를 등록하고, 기타 설정 > 값 유형 설정 탭에서 ‘대표어 치환’을 선택한 경우, 사용자가 '콤비 피자'라고 응답하여 피자 슬롯을 채우면 챗봇은 최종 답변으로 “'콤비 피자'를 주문하셨습니다” 대신에 “'콤비네이션 피자'를 주문하셨습니다.”라고 응답할 수 있습니다.
기본값: 기본값은 필수 슬롯인 경우에만 활성화됩니다. 사용자가 필수 슬롯을 채우지 못한 경우에 태스크를 실패하지 않고, 입력된 기본값으로 대신 슬롯을 채울 수 있습니다. 예를 들어 ‘@피자개수’ 엔티티에 기본값으로 **"1판"**이 등록된 상태에서, 사용자가 피자 개수 슬롯을 채우지 못한 경우에는 슬롯에 기본값인 "1판"으로 자동 저장됩니다.
이전 대화의 슬롯 유지 탭
슬롯을 모두 채운 후 컨텍스트가 유지되었다면, 챗봇은 채워진 슬롯 정보를 삭제하지 않고 기억하여 다른 태스크에 활용할 수 있습니다. 컨텍스트로 이어진 대화에 등록된 슬롯만 유지할 수 있습니다. 따라서 유지하고 싶은 슬롯이 등록된 대화가 컨텍스트로 이어질 수 있도록 설계되어야 합니다.
태스크 종료 메시지
사용자가 태스크를 진행하는 중에 태스크 종료 키워드를 입력한 경우, 즉시 해당 태스크를 종료하고 태스크 종료 메시지를 응답하도록 설정할 수 있습니다. 태스크 종료 키워드는 태스크 진행 중에만 동작하며, 일반 대화 중에는 동작하지 않습니다. 최대 10건의 종료 키워드를 등록할 수 있으며, exact로 동일한 질문이 입력된 경우에만 동작합니다.
태스크 설계 예시
피자 주문 태스크 수행 중 FAQ 답변을 응답
피자 주문 태스크를 진행하는 도중에 사용자가 FAQ 대화에 등록된 질문을 입력했을 때 잠시 해당 태스크에서 이탈하여 FAQ 대화에서 대답을 찾아 응답한 후 다시 태스크로 복귀하는 시나리오를 구성할 수 있습니다. FAQ 답변 대화와 피자 주문 태스크 대화를 생성한 후, 피자 주문 태스크에는 태스크 이탈을 활성화하고 FAQ 대화에는 태스크 끼어들기와 태스크 복귀하기를 활성화합니다.
엔티티 생성하기
피자, 피자사이즈, 피자개수, 음료수 엔티티를 생성해 주십시오.
- 엔티티 생성 방법은 엔티티를 참조해 주십시오.
액션 메소드 생성하기
사용자에 의해 채워진 슬롯 정보를 담아서 호출할 액션 메소드를 생성해 주십시오.
- 액션 메소드 생성 방법은 액션 메소드를 참조해 주십시오.
- 이 시나리오에서는 슬롯 정보를 받아 피자를 주문하는 액션 메소드를 생성합니다.
태스크 만들기
엔티티와 액션 메소드를 활용한 대화를 생성합니다.
- 대화 정보 등록을 참고하여 대화를 생성해 주십시오.
- 대화 정보 영역의 고급 설정 버튼을 클릭한 후 [대화 종류] 탭에서 대화 종류를 태스크로 변경해 주십시오.
- 피자 주문 의도를 가진 질문을 입력해 주십시오.
- <예시> 피자 주문할래요, 피자 뭐 있어요 등
- 태스크 영역에 피자, 피자사이즈, 피자종류, 음료수 엔티티를 활용하여 슬롯을 추가해 주십시오.
- 피자, 피자사이즈, 피자개수 엔티티는 필수 슬롯으로 지정
- 음료수 엔티티는 선택 슬롯으로 지정
- 되묻기 질문에는 해당 슬롯을 채우기 위해 사용자에게 질문할 문장을 입력
- 각 슬롯의 기타 설정 아이콘을 클릭하여 선택지 설정, 되묻기 설정 등을 챗봇 서비스에 맞게 설정해 주십시오.
- [고급 설정] 버튼 > [태스크 흐름] 탭에서 태스크 이탈하기를 활성화해 주십시오.
- 사용자가 태스크와 관련 없는 메시지를 입력할 경우, 해당 태스크에서 벗어나 다른 대화에서 답변을 찾아 응답하는 설정
- 최종 답변 등록 시 객관식 답변 유형으로 선택하고, "네" 선택지의 답변 부분에 ${피자주문} 액션 메소드를 호출하도록 지정해 주십시오.
FAQ 대화 만들기
배달비를 문의하는 의도의 대화를 생성합니다.
- 새로운 대화를 생성하여 질문과 답변을 입력해 주십시오.
- [고급 설정] 버튼 > [태스크 흐름 설정] 탭에서 태스크 끼어들기와 태스크 복귀하기를 활성화해 주십시오.
- 태스크 진행 중에 사용자가 배달료와 관련된 문의를 할 경우, 해당 대화에서 답변을 찾아 응답한 후, 다시 태스크로 돌아가는 설정
빌드 및 테스트
챗봇을 빌드하고 테스트를 진행합니다.
피자 주문 태스크를 진행하다가 배달비 질문을 할 경우, 배달비에 대해 답변하고 다시 피자 주문 태스크로 돌아가는지 테스트하는 방법은 다음과 같습니다.
- 대화 모델 빌드를 클릭하여 빌드를 완료해 주십시오.
- 빌드가 완료되면 수동 테스트를 클릭해 주십시오.
- 피자 주문 태스크를 테스트해 주십시오.
이전 대화의 슬롯을 유지하여 날씨 정보 응답
만약 사용자가 "오늘의 서울 날씨 알려줘"라고 질문하여 슬롯을 모두 채워 챗봇의 답변을 들었다고 가정합니다. 사용자가 "내일은?" 이라고 물어본 경우, 챗봇이 지역 정보를 다시 물어보지 않고 이전 슬롯에서 채운 지역 슬롯을 기억하고 활용한다면 사용자에게 다시 묻지 않고 자연스럽게 해당 지역의 내일 날씨를 대답해 줄 수 있습니다.
컨텍스트를 활용해서 이전 대화의 슬롯을 유지하는 대화 예시입니다.
엔티티 생성하기
날짜, 도시 엔티티를 생성해 주십시오.
액션 메소드 만들기
사용자가 채운 슬롯 정보를 담아서 호출할 액션 메소드를 생성해 주십시오.
태스크 만들기
- 대화 정보 입력을 참고하여 대화를 생성해 주십시오.
- [고급 설정] 버튼 > 대화 종류를 태스크로 설정해 주십시오.
- [고급 설정] 버튼 > 컨텍스트 설정 탭에서 Output 컨텍스트에 지역별 날씨를 입력해 주십시오.
- 날씨 확인 의도를 가진 질문을 입력해 주십시오.
- 앞 단계에서 만들어진 날짜, 지역 엔티티를 활용하여 태스크 영역에 슬롯을 추가해 주십시오.
- 날짜, 도시 엔티티를 필수 슬롯으로 지정해 주십시오.
- 기타 설정 아이콘을 클릭하여 선택지 설정, 되묻기 설정 등을 설정해 주십시오.
- 최종 답변으로 날씨 액션 메소드를 호출하도록 지정해 주십시오.
또 다른 태스크 만들기
- 새로운 태스크를 생성하여 Input 컨텍스트에 지역별 날씨를 입력해 주십시오.
- "서울은?", "뉴욕은?"과 같이 도시 정보만을 담은 질문을 입력해 주십시오.
- 앞 단계에서 만들어진 날짜, 도시 엔티티를 활용하여 슬롯을 추가해 주십시오.
- 날짜, 도시 엔티티를 필수 슬롯으로 지정합니다.
- 되묻기 질문과 횟수, 되묻기 선택지 등 여러 슬롯 정보들을 의도한 챗봇 서비스에 맞게 입력해 주십시오.
- ‘날짜’ 슬롯의 기타 설정 창에서 이전 대화의 슬롯을 유지하도록 설정해 주십시오.
{height="" width=40%"} - 최종 답변에 ${날씨} 액션 메소드를 호출해 주십시오.
- 학습을 완료한 뒤, 완성된 날씨 태스크를 테스트해 주십시오.