목차

태스크 사용가이드

태스크 주요 개념

챗봇을 설계할 때 고급 기능으로 태스크 기능을 활용하여 설계할 수 있습니다.

태스크를 사용하면 사용자의 질문을 이해하여 최적의 답변만을 제공하는 것이 아니라, 사용자의 포인트 조회나 택배 반품 처럼 사용자와의 인터랙티브한 대화를 통해서 정보를 수집, 수집된 정보를 기반으로 한층 더 세련된 대화를 할 수 있습니다. 아래는 태스크를 설계하기 앞서서 알아두면 좋은 개념들입니다.

1. 슬롯과 엔티티 개념

그러나 태스크는 좋은 기능임에도 불구하고 매우 정교한 엔티티 설계가 필요하며, 실행 제약조건등이 존재합니다. 먼저, 태스크에는 사용자가 채워야 하는 빈칸을 의미하는 '슬롯'이라는 개념이 있습니다. 스무고개를 하는 상황처럼 챗봇이 물어보는 슬롯(빈칸)을 모두 사용자가 채워주어야 태스크를 수행하기 위한 준비가 완료되는 것이죠.

슬롯은 엔티티와 매핑되어 있습니다. 슬롯이라는 빈칸에 어떤 내용을 담을 것인지 엔티티를 통해 정해두는 것이라고 볼 수 있는데요. 만약 "수량"이라는 슬롯에 "1판, 2판, 3판"과 같은 사전형 데이터가 등록된 @피자수량단위 엔티티가 매핑되어있다면, 사용자의 발화 속에서 @피자수량단위 엔티티를 분석하여 "수량"슬롯이라는 빈칸에 채우게 됩니다. 따라서 태스크에서 3개의 슬롯을 설정한 경우, 3개의 슬롯에 담길 엔티티도 3개가 정의되어야 합니다.

2. 태스크 동작 방식

슬롯을 모두 채워서 태스크를 수행하기 위한 필수적인 슬롯(빈칸)들이 모두 충족되어야 태스크를 수행할 수 있으므로, 챗봇은 슬롯이 모두 채워질때까지 반복하여 사용자에게 질문을 합니다. 슬롯들이 모두 충족되었다면, 챗봇은 최종답변을 응답하며 태스크를 수행할 수 있게됩니다.

만약 설정된 횟수를 초과할때까지 사용자가 슬롯을 채워주지 못한다면 챗봇은 태스크를 수행할 수 없겠죠. 이 경우 챗봇은 최종답변을 응답하지 못하고 되묻기 초과 메시지를 응답하며 태스크 수행에 실패하게 됩니다. 반대로 사용자가 더이상 태스크를 수행하고 싶지 않다는 의사를 밝히는 경우도 있을텐데요. 태스크 종료 키워드와 메시지를 설정해두었다면, 사용자가 태스크 종료 키워드를 발화한 경우 슬롯을 채우는 작업을 중단하게 됩니다.

3. 태스크와 일반 대화 사이의 흐름

사용자는 태스크의 슬롯을 채우는 과정 중에 여러 의문들이 발생할 수 있습니다. 예를들어 피자를 주문하는 상황에서 배달료는 어떻게 책정되는지, 피자 종류는 무엇이 있는지, 대량 주문도 가능한지 등 태스크 수행중에도 다양한 문의가 챗봇에게 들어올 수 있습니다. 사용자가 슬롯을 채우는 것과 관련이 없는 발화를 하는 경우 잠시 태스크에서 이탈해서 다른 대화로 끼어들어 문의를 해결해준 후, 다시 태스크로 돌아오도록 설계한다면 더욱 스마트한 태스크 설계가 가능해집니다.

4. 이전 슬롯 유지

조금 더 고난이도의 기능으로, 챗봇이 이전 대화를 기억하는 컨텍스트 기능을 활용한 태스크 설계도 가능합니다. 사용자가 ''오늘 서울의 날씨''를 물어본 다음, "내일은?" 이라고 물었을경우 다시 사용자에게 지역정보를 물어봐야할까요? 아니면 방금 사용자가 "서울"이라는 지역정보를 말해주었으니, 이 내용을 챗봇은 기억한채로 답변을 줄 수 있을까요? 컨텍스트로 연결된 이전의 태스크에서 "지역"슬롯 정보를 유지해서 가져올 수 있다면 사용자에게 추가 질문 없이 한번의 대화를 줄여 더욱 세련된 대화가 가능해집니다.

태스크 설계

챗봇의 서비스 시나리오에 따라 일반 대화 또는 태스크를 선택할 수 있습니다. 만약 피자 주문이나 택배 반품과 같이 사용자와의 인터렉티브한 대화를 통해 여러 정보를 수집해야한다면 태스크를 활용하는 것을 권장합니다. 아래는 태스크 대화 설계 예시입니다.

chatbot-03-080.png

1. 대화 이름을 입력하여 대화를 생성합니다.

chatbot-03-081.png

2. 고급 설정대화 종류탭에서 태스크를 선택하여 대화 종류를 변경해줍니다.

chatbot-03-082.png

3. 질문을 등록합니다. 등록된 질문 또는 모델이 판단한 유사한 질문이 인식되면 태스크가 실행됩니다. 만약 사용자의 발화 안에 이미 슬롯을 채울 정보가 존재했다면, 챗봇은 해당 슬롯을 먼저 채우고 태스크를 시작하게 됩니다.

chatbot-03-083.png

4. 슬롯정보를 입력합니다.

챗봇은 순서대로 슬롯을 채워나갑니다. 하지만 챗봇이 채우는 슬롯의 순서와 상관없이 사용자는 다른 순서의 슬롯을 응답하거나, 복수의 슬롯을 응답하여 한번에 채울 수도 있습니다. 이렇게 채워진 슬롯에 대해서 챗봇은 더이상 사용자에게 해당 슬롯에 대해 묻지 않고 다음 슬롯을 채우도록 유도하게 됩니다.

  • 슬롯 종류 : 체크 박스를 클릭하여 필수 슬롯과 선택 슬롯 설정을 전환할 수 있습니다. 필수 슬롯이 채워지지 않은 태스크는 수행에 실패하게되고, 최종 답변을 응답하지 않습니다. 반면에 선택 슬롯은 사용자가 정보를 채워주지 않더라도 태스크를 실패하지 않고 수행할 수 있습니다.
  • 슬롯 이름 : 슬롯의 이름을 입력합니다. 슬롯의 이름은 해당 태스크 안에서 중복되지 않는 값으로 입력합니다.
  • 엔티티 : 슬롯으로 받을 엔티티를 선택합니다. 도메인 엔티티와 시스템 엔티티 모두 활용 가능합니다.
  • 값 : 사용자가 채운 슬롯의 값을 최종 답변에 삽입하여 답변할 수 있습니다. 채워진 슬롯의 값을 사용하기 위한 표현식을 입력해주세요.
  • 되묻기 질문 : 슬롯을 채우기 위해 되물을 질문을 입력해주세요. 챗봇은 나열된 슬롯 순서대로 되묻기 질문을 응답하여 슬롯을 채워나갑니다.
  • 기타 설정 : 슬롯의 세부 사항을 설정할 수 있습니다.

chatbot-03-084.png

  • 선택지 설정 : 슬롯을 채우기 위한 선택지를 Quick reply 형태로 노출할 수 있습니다. 최대 10개의 선택지를 노출할 수 있습니다.
    • 대표어 선택 : 엔티티 대표어 리스트를 불러와 선택지로 노출합니다.
    • 텍스트 입력 : 선택지를 직접 텍스트로 입력하여 선택지로 노출합니다.
    • 기존 선택지 : 다른 태스크의 선택지를 불러와서 선택지로 노출합니다.

chatbot-03-084a.png

  • 슬롯 검증 : 사용자가 응답한 엔티티를 해당 슬롯에 채우기 전에 입력된 URL을 통해 검증합니다. 검증에 성공한 경우에만 슬롯을 채울 수 있으며, 검증에 실패한 경우에는 슬롯을 채우지 않습니다.

  • 슬롯 검증 요청 형식입니다.

    {
      "userInput": "사용자가 입력한 발화입니다",
      "represent": "사용자가 입력한 값의 대표어입니다",
      "filledEntity": {
        "지금까지 채워진 엔티티 이름1": "엔티티1",
        "지금까지 채워진 엔티티 이름2": "엔티티2"
      },
      "userKey": "사용자 구분을 위해 해시된 키 값입니다. 액션메소드에서 호출할때 헤더에 담긴 userKey와 동일합니다"
    }
    
  • 슬롯 검증 응답 형식입니다.

    • valid : 검증 성공(true), 실패(false) 여부입니다. 검증에 성공한 값만 슬롯에 채울 수 있습니다.
    • Recover : 만약 슬롯 검증에 실패한 경우에 되묻기 횟수를 차감할지 여부를 설정합니다. true일 경우 되묻기 횟수를 차감하지 않습니다.
    {
      "message": "사용자에게 응답할 메시지입니다.",
      "valid": true,
      "recover": false
    }
    

chatbot-03-085.png

  • 되묻기 횟수 : 되묻기 질문을 응답할 횟수를 지정할 수 있습니다. 설정된 횟수만큼 챗봇은 사용자에게 슬롯을 채우기 위해 질문을 반복합니다.
  • 되묻기 횟수 초과 메시지 : 되묻기 횟수가 초과된 경우 대신 응답할 메시지를 입력합니다. 필수 슬롯의 경우 되묻기 횟수가 초과되면 슬롯 필링 실패로 인해 최종답변을 응답하지 않습니다. 대신 입력된 되묻기 횟수 초과 메시지를 응답합니다. 만약 입력된 되묻기 횟수 초과 메시지가 없다면 현재 사용자 발화에 매칭된 답변 또는 실패메시지가 응답되게 됩니다.

chatbot-03-086.png

  • 값 유형 : 사용자가 채운 슬롯의 값을 최종 답변 또는 되묻기 질문에 불러와 사용할 때 어떤 방식으로 사용할 지 선택할 수 있습니다.
    • 대표어 치환 값 : 사용자가 응답한 값이 아닌 대표어로 치환한 값을 불러와 사용합니다. 대표어 치환값은 사전형 엔티티인 경우에만 사용가능합니다.
    • 사용자 응답 값 : 사용자가 응답한 값을 그대로 불러와 사용합니다.
    • 예를들어 @피자 엔티티에 대표어 '콤비네이션 피자' - 유사어 '콤비네이션', '콤비 피자'가 등록되어 있었다고 가정할 수 있습니다. 만약 대표어 치환 값으로 설정하였다면, 사용자가 '콤비 피자'라고 응답하여 피자 슬롯을 채운 경우 챗봇은 최종답변으로 '콤비 피자'를 주문하셨습니다. 대신에 '콤비네이션 피자'를 주문하셨습니다. 라고 응답할 수 있습니다.
    • 기본값 : 기본값은 필수 슬롯인 경우에만 설정할 수 있습니다. 사용자가 필수 슬롯을 채우지 못한 경우에 태스크를 실패하지 않고, 입력된 기본값으로 대신 슬롯을 채울 수 있습니다.
    • 예를들어 @피자개수 엔티티에 기본값으로 "1판"이 등록되어있다고 가정할 수 있습니다. 만약 사용자가 피자 개수 슬롯을 채우지 못했다면 기본값인 "1판"으로 슬롯이 저장됩니다.

chatbot-03-087.png

  • 이전 대화의 슬롯 유지 : 슬롯을 모두 채운 후 컨텍스트가 유지되었다면, 챗봇은 채워진 슬롯 정보를 삭제하지 않고 기억하여 다른 태스크에 활용할 수 있습니다.
  • 컨텍스트로 이어진 대화에 등록된 슬롯만 유지할 수 있습니다. 따라서 유지하고 싶은 슬롯이 등록된 대화가 컨텍스트로 이어질 수 있도록 설계되어야합니다.

5. 최종 답변을 등록합니다.

chatbot-03-088.png

  • 필수 슬롯이 모두 채워지면 챗봇은 최종 답변을 응답합니다.

  • 이때 슬롯의 값 표현식을 활용하여 사용자 발화를 활용한 답변을 응답할 수 있습니다. 값을 답변 입력창에 그대로 입력하면 사용자가 채운 슬롯을 그대로 불러와 챗봇이 응답하게 됩니다.

  • 만약 최종 답변에서 액션 메소드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"
        }
    

6. 태스크 종료 메시지를 설정합니다.

태스크 진행 도중 사용자가 즉시 대화를 중단하고 싶은 상황이 발생할 수 있습니다. 하지만 사용자가 슬롯과 관계없는 말을 해도 챗봇은 슬롯을 채우기 위해 되묻기 질문을 계속하게 됩니다. 이런 상황에서 태스크 종료 키워드와 메시지를 활용하여 사용자는 강제적으로 태스크를 멈출 수 있습니다.

chatbot-03-017g.png

  • 태스크 종료 메시지
    • 사용자가 태스크 진행 도중 태스크 종료 키워드를 입력하였다면, 즉시 태스크를 중지하고 등록된 태스크 종료 메시지를 응답합니다.
  • 태스크 종료 키워드
    • 태스크 종료 키워드는 태스크 진행 중에만 동작합니다.
    • 최대 10건의 키워드를 등록할 수 있으며, exact로 동일한 질문이 입력된 경우에만 동작합니다.

태스크 설계 예시1 : 피자 주문 태스크 수행 중 FAQ 답변을 응답

1. 엔티티 생성하기

chatbot-03-069.png

- 피자, 피자사이즈, 피자개수, 음료수 엔티티를 만듭니다.

2. 액션메소드 만들기

chatbot-03-072.png

채워진 슬롯 정보를 담아서 호출할 액션 메소드를 만듭니다.

3. 태스크 만들기

(1) 피자 주문 의도를 가진 질문을 입력합니다.

chatbot-03-082.png

(2) 앞 단계에서 만들어진 피자, 피자사이즈, 피자종류, 음료수 엔티티를 활용하여 슬롯을 추가합니다.

chatbot-03-083.png

  • 피자, 피자사이즈, 피자개수 엔티티는 필수 슬롯으로 지정합니다.
  • 음료수 엔티티는 선택 슬롯으로 지정합니다.
    • 되묻기 질문과 횟수, 되묻기 선택지 등 여러 슬롯정보들을 의도한 챗봇 서비스에 맞게 입력합니다.

(3)고급설정의 태스크 흐름설정에서 태스크 이탈하기를 활성화합니다.

  • 이제 사용자가 태스크와 관련없는 말을 하게 된다면, 다른 대화를 찾아 답변을 응답할 수 있게 됩니다.

chatbot-03-089.png

(4) 최종 답변으로 객관식 답변 유형을 선택하여 "네" 선택지의 답변 부분에 ${피자 결제} 액션메소드를 호출하도록 지정합니다.

chatbot-03-091.png

  1. FAQ 대화 만들기

(1) 배달료를 문의하는 의도의 대화를 생성하여 질문과 답변을 입력합니다.

chatbot-03-090.png

(2) 고급설정의 태스크 흐름설정에서 태스크 끼어들기와 복귀하기를 활성화합니다.

  • 이제 태스크 수행 도중 사용자가 배달료 관련한 문의를 하게된다면 해당 대화로 매칭되어 답변을 응답한 후, 다시 태스크로 돌아갈 수 있게 설정되었습니다.

chatbot-03-091.png

5. 학습을 완료한 뒤, 완성된 피자 주문 태스크를 테스트합니다.

chatbot-03-092.png

태스크 설계 예시2 : 이전 대화의 슬롯을 유지하여 날씨정보를 응답

만약 사용자가 "오늘서울 날씨 알려줘"라고 질문하여 슬롯을 모두 채워 챗봇의 답변을 들었다고 가정해봅시다. 다시 사용자가 "내일은?" 이라고 물어본 경우에 챗봇이 지역 정보를 다시 물어본다면, 똑똑한 챗봇이라는 인상을 주기 어려울 것입니다. 따라서 이전 슬롯에서 채운 지역 슬롯을 다시 유지할 수 있어야하는데요. 아래는 컨텍스트를 활용해서 이전 대화의 슬롯을 유지하는 대화 예시입니다.

1. 엔티티 생성하기

chatbot-03-093.png

  • 날짜, 도시 엔티티를 만듭니다.

2. 액션메소드 만들기

chatbot-03-094.png

  • 채워진 슬롯 정보를 담아서 호출할 액션 메소드를 만듭니다.

3. 태스크 만들기

(1) 태스크를 생성한 후 Output 컨텍스트에 지역별날씨를 입력합니다.

chatbot-01-023.png

(2) 날씨 확인 의도를 가진 질문을 입력합니다.

chatbot-03-096.png

(3) 앞 단계에서 만들어진 날짜, 지역 엔티티를 활용하여 슬롯을 추가합니다.

chatbot-03-097.png

  • 날짜, 도시 엔티티를 필수 슬롯으로 지정합니다
  • 되묻기 질문과 횟수, 되묻기 선택지 등 여러 슬롯정보들을 의도한 챗봇 서비스에 맞게 입력합니다.

(4) 최종 답변으로 날씨 액션메소드를 호출하도록 지정합니다.

chatbot-03-098.png

4. 또 다른 태스크 만들기

(1) 새로운 태스크를 생성한 후 Input 컨텍스트에 지역별날씨를 입력합니다.

chatbot-03-099.png

(2) "서울은?", "뉴욕은?"과 같이 도시 정보만을 담은 질문을 입력합니다.

chatbot-03-100.png

(3) 앞 단계에서 만들어진 날짜, 도시 엔티티를 활용하여 슬롯을 추가합니다.

chatbot-03-101.png

  • 날짜, 도시 엔티티를 필수 슬롯으로 지정합니다.
  • 되묻기 질문과 횟수, 되묻기 선택지 등 여러 슬롯정보들을 의도한 챗봇 서비스에 맞게 입력합니다.

(4) 날짜 슬롯은 이전 대화의 슬롯을 유지하도록 설정합니다.

chatbot-03-102.png

(5) 최종 답변으로 ${날씨} 액션메소드를 호출하도록 지정합니다.

chatbot-03-103.png

5. 학습을 완료한 뒤, 완성된 날씨 태스크를 테스트합니다.

chatbot-03-104.png

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...