IBM Cloud Docs
대화 플로우 제어

대화 플로우 제어

사용자가 런타임에 어시스턴트와 상호작용할 때 대화가 처리되는 방법에 대해 이해합니다. 자신에게 유리하게 대화 플로우를 사용하고 필요한 경우 플로우를 변경하는 방법을 알아보십시오.

다음 기능을 사용하여 대화 플로우에 영향을 줄 수 있습니다.

명확화

모호성 제거는 두 개 이상의 대화 노드가 고객의 입력에 응답할 수 있는 경우 어시스턴트가 고객에게 도움을 요청하도록 지시합니다. 처리할 노드를 추측하는 대신, 어시스턴트가 상위 노드 옵션 목록을 사용자와 공유하고 사용자에게 올바른 노드를 선택하도록 요청합니다.

어시스턴트가 사용자에게 설명을 요청하는 사용자와 어시스턴트 간의 대화 샘플을 표시합니다.
지원에서 설명 요청 페이지 설명 페이지 설명 기본 페이지 기본함

다음 조건이 충족되면 모호성 제거가 트리거됩니다.

  • 사용자 입력에서 발견된 2순위 인텐트의 신뢰도 점수가 최상위 인텐트의 신뢰도 점수 값에 근접합니다.
  • 최상위 인텐트의 신뢰도 점수가 0.2 이상입니다.

이 조건이 충족되는 경우에도 대화에 있는 두 개 이상의 독립 노드가 다음 기준을 충족하지 않으면 모호성 제거가 발생하지 않습니다.

  • 노드 조건에는 모호성 제거를 트리거한 인텐트 중 하나가 포함됩니다.
  • 노드 이름 필드에 노드 용도에 대한 설명이 제공됩니다. (또는 외부 노드 이름 필드에 설명이 포함될 수 있습니다.)

true로 평가되는 부울 노드 조건이 있는 노드가 모호성 제거 목록에 포함될 수 있습니다. 예를 들어 노드가 엔티티 유형을 확인하고 해당 엔티티가 사용자 입력에 언급되어 있으면 목록에 포함될 수 있습니다. 이러한 노드는 모호성 제거를 트리거하지 않지만 모호성 제거가 트리거되면 결과 모호성 제거 목록에 포함될 수 있습니다.

자세한 정보

모호성 제거 예제

예를 들어, 취소 요청을 처리하는 인텐트 조건이 포함된 두 개의 노드가 있는 대화가 있습니다. 조건은 다음과 같습니다.

  • eCommerce_Cancel_Product_Order
  • Customer_Care_Cancel_Account

사용자가 i must cancel it today 이라고 말하면 입력에서 다음과 같은 의도가 감지될 수 있습니다:

[
  {"intent":"Customer_Care_Cancel_Account","confidence":0.5602024316787719},
  {"intent":"eCommerce_Cancel_Product_Order","confidence":0.46903514862060547},
  {"intent":"Customer_Care_Appointments","confidence":0.29033891558647157},
  {"intent":"General_Greetings","confidence":0.2894785046577454},

'사용해 보기' 창에서 테스트하는 경우 눈 아이콘 위로 마우스를 가져가면 테스트 입력에서 인식된 상위 3개의 인텐트를 확인할 수 있습니다.

사용해 보기 창에서 사용자 입력에서 인식된 상위 3개의 인텐트를 표시합니다.
상위 인텐트

이 어시스턴트는 사용자의 목표가 0.5618281841278076 인텐트에 일치한다고 #Customer_Care_Cancel_Account(56%) 확신합니다. 다른 인텐트에 이 최상위 인텐트 점수에 가까운 신뢰도 점수가 있으면 모호성 제거가 트리거됩니다. 이 예제에서 #eCommerce_Cancel_Product_Order 의사는 신뢰도 점수가 46%입니다.

결과적으로 사용자가 i must cancel it today 이라고 말하면 두 대화 노드 모두 응답할 수 있는 후보로 간주될 가능성이 높습니다. 처리할 대화 노드를 판별하기 위해 어시스턴트가 사용자에게 하나를 선택하도록 요청합니다. 사용자가 이 중에서 선택하도록 지원하기 위해, 어시스턴트가 각 노드가 수행하는 작업에 대한 간단한 요약을 제공합니다. 요약 텍스트는 노드의 이름 필드에서 직접 추출됩니다. 요약 텍스트가 존재하고 설명이 추가되면 대신 외부 노드 이름 필드에서 해당 텍스트를 가져옵니다.

모호성 제거 목록에 표시되는 설명은 인텐트 일치가 발생한 분기에서 처리된 마지막 노드의 이름(또는 외부 노드 이름)으로부터 제공됩니다. 자세한 정보는 점프 대상 유틸리티 노드 사용 안함을 참조하십시오.

서비스에서는 계정 취소, 제품 주문 취소, 위 항목 없음 등의 대화 상자 옵션 목록에서 선택하라는 메시지를 표시합니다.
옵션 선택

어시스턴트는 사용자 입력에 있는 today 용어를 @sys-date 엔티티의 멘션인 날짜로 인식합니다. 대화 트리에 @sys-date 엔티티를 조건으로 하는 노드가 포함되어 있는 경우, 모호성 제거 선택 목록에 포함될 수도 있습니다. 이 이미지에서 목록에 날짜 정보 캡처 옵션으로 포함되어 표시됩니다.

서비스에서는 캡처 날짜 정보를 포함한 대화 상자 옵션 목록에서 선택하라는 메시지를 표시합니다.
캡처 날짜 정보

모호성 제거 구성 편집

모호성 제거는 모든 새 대화 스킬에서 자동으로 사용됩니다. 옵션 페이지의 모호성 제거에 자동으로 적용되는 설정을 변경할 수 있습니다.

모호성 제거 설정을 편집하려면 다음 단계를 완료하십시오.

  1. 옵션에서 모호성 제거를 클릭하십시오.

  2. 모호성 제거 메시지 필드에서 대화 노드 옵션 목록 앞에 표시할 텍스트를 추가하십시오. 예를 들어 *What do you want to do?*입니다.

  3. 기타 항목 필드에 다른 대화 상자 노드 옵션에 사용자가 원하는 내용이 반영되지 않은 경우 사용자가 선택할 수 있는 추가 옵션으로 표시할 텍스트를 추가합니다. 예를 들어 위 항목 중 없음입니다.

    메시지를 짧게 유지하여 다른 옵션과 함께 일직선으로 표시되도록 합니다. 메시지는 512자 미만이어야 합니다. 사용자가 이 옵션을 선택하는 경우 어시스턴트가 수행하는 작업에 대한 정보는 위 항목을 모두 처리하지 않음을 참조하십시오.

  4. 사용자에게 표시할 수 있는 모호성 제거 옵션의 수를 제한하려면 최대 권장 수 필드에 2 - 5 사이의 숫자를 지정하십시오.

변경사항이 자동으로 저장됩니다.

API를 사용하여 더 많은 모호성 설정을 수정할 수 있습니다. 이러한 설정에는 명확화 감도가 포함되며, 이는 명확화가 트리거되는 빈도 및 포함되는 선택사항 수에 영향을 미칩니다. 자세한 정보는 API 참조를 참조하십시오.

모호성 제거 옵션으로 표시하지 않을 노드 선택

모든 노드는 모호성 제거 목록에 포함될 수 있습니다.

  • 트리 계층 구조의 모든 레벨에 있는 노드는 포함됩니다.
  • 인텐트, 엔티티, 특수 조건, 컨텍스트 변수 또는 이러한 값의 조합을 조건으로 하는 노드는 포함됩니다.

모호성 제거 목록에서 일부 노드를 숨기십시오.

  • welcomeanything_else 조건이 있는 루트 노드 숨기기

    이러한 노드에 추가 기능을 추가하지 않는 한 일반적으로 동의어 목록에 포함하기에는 유용한 옵션이 아닙니다.

  • 점프 대상 유틸리티 노드 숨기기

    동의어 목록의 텍스트는 노드 조건이 일치하는 브랜치에서 마지막으로 처리된 노 드의 노드 이름(또는 외부 노드 이름)에서 채워집니다.

    일치하는 루트 노드의 목적을 설명하는 구문 대신 모호성 제거 목록에 유틸리티 노드 (예: 사용자에게 감사하거나, 작별 인사를 하거나, 응답 품질 피드백을 요청하는 등) 를 포함하지 마십시오.

    예를 들면, 일치 인텐트 조건 #store-location이 있는 루트 노드가 응답에 만족했는지 사용자에게 묻는 노드로 점프하는 경우가 있습니다. #check_satisfaction 노드에 노드 이름과 동의어가 있는 경우 점프한 노드의 이름이 동의어 목록에 표시됩니다. 따라서 루트 노드의 Check satisfaction 이름이 아니라 #store-locationGet store location 분기를 나타내는 데 표시됩니다.

  • 엔티티 또는 컨텍스트 변수만 조건으로 하는 루트 노드 숨기기

    일치하는 인텐트가 있는 노드만 모호성 제거를 트리거할 수 있습니다. 그러나 트리거되면 조건이 일치하는 모든 노드가 동의어 목록에 포함됩니다. 예를 들어 대화에 엔티티를 조건으로 하는 노드가 포함되어 있으면 트리 계층 구조의 노드 순서가 예기치 않은 면에서 중요해질 수 있습니다.

    • 노드의 순서는 모호성 제거가 트리거되는지 여부에 영향을 줍니다. 예를 들어, 모호성 제거를 도입하기 위해 이전에 사용된 시나리오를 살펴봅니다. @sys-date 을 조건으로 하는 노드가 #Customer_Care_Cancel_Account#eCommerce_Cancel_Product_Order 인텐트를 조건으로 하는 노드보다 대화 트리에서 더 높은 위치에 있는 경우 사용자가 i must cancel it today 을 입력해도 모호성 해제가 트리거되지 않습니다. 어시스턴트는 트리에서 해당 노드의 배치로 인해 언급된 날짜( today )가 의도 참조보다 더 중요하다고 간주합니다.

    • 노드의 순서는 명확성 옵션 목록에 포함되는 노드에 영향을 줍니다. 때때로 노드가 예상된 모호성 제거 옵션으로 나열되지 않습니다. 이는 어떤 이유로 인해 모호성 제거 목록에 포함시키기에 적절한 노드 또한 조건 값을 참조하는 경우 발생할 수 있습니다. 예를 들어, 엔티티가 대화 트리의 앞쪽에 위치하지만 명확성을 위해 활성화되지 않은 노드를 트리거할 수 있습니다. 동일한 엔티티가 모호성 해제를 사용하도록 설정된 노드의 유일한 조건이지만 트리에서 더 낮은 위치에 있는 경우에는 어시스턴트가 해당 노드에 도달하지 못하므로 모호성 옵션이 되지 않을 수 있습니다. 이전 노드와 비교하여 생략된 경우 어시스턴트가 이후의 노드를 처리하지 않습니다.

모호성 제거에서 모두 노드 숨기기

대화의 모든 노드 또는 개별 대화 노드가 모호성 제거 목록에 포함되지 않게 할 수 있습니다.

모호성 제거를 완전히 사용하지 않으려면 다음을 수행하십시오.

  1. 옵션에서 모호성 제거를 클릭하십시오.

  2. 스위치를 꺼짐으로 설정합니다.

단일 대화 노드가 모호성 제거 목록에 포함되지 않게 하려면 다음을 수행하십시오.

  1. 대화 상자 노드를 클릭하여 편집 보기에서 엽니다.

  2. 설정 을 클릭하십시오.

  3. 노드 이름 표시 스위치를 꺼짐으로 설정하십시오.

    또한 이름 필드 대신 외부 노드 이름 필드에 노드 요약 설명을 추가한 경우 이를 제거하세요.

    외부 노드 이름 필드는 두 가지 용도로 사용됩니다. 모호성 제거 목록에 포함될 때 고객에게 노드에 대한 정보를 제공합니다. 또한 대화가 사용자에게 전송될 때 서비스 데스크 에이전트와 공유되는 대화 요약의 노드를 설명합니다. 외부 노드 이름 필드는 지불 플랜 인스턴스의 일부인 스킬에서만 볼 수 있습니다. 외부 노드 이름 필드에 텍스트가 있으면 이름 필드에 텍스트가 있는지 여부에 관계없이 해당 텍스트가 사용됩니다.

각 노드의 경우, 모호성 제거 옵션 목록에 노드가 포함된 시나리오를 테스트합니다. 테스트를 통해 노드 순서나 런타임에 모호성 해제가 얼마나 잘 작동하는지에 영향을 줄 수 있는 기타 요인을 조정할 수 있습니다. 모호성 제거 테스트를 참조하십시오.

모호성 제거를 통해 노드 우선순위 지정

일부 노드는 고객에게 충분히 중요하여 어시스턴트가 해당 노드가 고객의 요구를 충족한다고 확신하는 경우 모호성 목록이 아닌 자체적으로 반환되기를 원할 수 있습니다.

예를 들어 #stolen_card 인텐트와 일치하는 노드가 있습니다. 수신 메시지에서 고객이 도난당한 신용카드를 보고하려 한다고 나타낼 때마다 모호성 제거 옵션 목록에서 어시스턴트의 응답이 누락되지 않아야 합니다. 어시스턴트가 고객이 이 긴급한 문제를 해결하는 데 도움이 되는 단 하나의 답변으로 응답하기를 원합니다.

모호성 제거보다 단위 노드의 우선순위를 높게 지정하도록 대화를 디자인하려면 다음 단계를 완료하십시오.

  1. 인텐트를 조건으로 하는 노드에서 사용자 정의 를 클릭하여 다중 조건 응답을 사용 가능하게 하십시오.

  2. 조건이 다음과 같은 조건부 응답을 추가하십시오.

    intent.confidence > n

    여기서 n은 훈련 데이터에 적합한 신뢰도 점수입니다. 예를 들어,

    intent.confidence > 0.7

  3. 조건부 응답 목록에서 첫 번째가 되도록 응답을 이동하십시오.

  4. 기어 아이콘을 클릭하여 조건부 응답을 사용자 정의하십시오.

  5. 어시스턴트가 응답 섹션에서 컨텍스트 편집기를 엽니다.

  6. 다음 컨텍스트 변수를 추가하십시오.

    컨텍스트 변수
    가변
    system {"prevent_disambiguation":true}
  7. 저장 을 클릭하십시오.

    또는 다음과 같은 조건이 있는 루트 수준 노드를 추가할 수 있습니다:

    #stolen_card && intent.confidence > 0.7

    트리에서 #stolen_card를 조건부로 하는 노드보다 높은 위치에 이 노드를 두면 모호성 제거 목록에 노드가 포함될 수 있습니다.

  8. 대화를 테스트하십시오. 적절한 신뢰도 점수 임계값이 충족되면 모호성 목록이 아니라 노드의 응답이 리턴되는지 확인하십시오.

위 항목을 모두 처리하지 않음

위 항목 중 없음 옵션을 클릭하는 경우, 어시스턴트가 메시지의 사용자 입력에서 인식된 인텐트를 제거하고 다시 제출합니다. 이 조치는 일반적으로 대화 트리의 다른 노드를 트리거합니다.

이 상황에서 리턴되는 응답을 사용자 정의하기 위해, 인식된 인텐트가 없는(인텐트가 제거됨) 사용자 입력을 확인하고 suggestion_id 특성을 포함하는 조건과 함께 루트 노드를 추가할 수 있습니다. 모호성 제거가 트리거될 때 suggestion_id 특성이 어시스턴트에 추가됩니다.

조건이 다음과 같은 루트 노드를 추가하십시오.

intents.size()==0 && input.suggestion_id

이 조건은 사용자가 목표와 일치하는 항목이 없다고 말하는 모호성 옵션 집합을 트리거하는 입력에 의해서만 충족됩니다.

제안된 옵션 중 사용자의 요구 사항을 충족하는 옵션이 없다는 사실을 알고 있는 사용자에게 적절한 조치를 취한다는 내용의 응답을 추가합니다.

트리에서 노드의 배치는 중요합니다. 사용자 입력에서 멘션된 엔티티 유형을 조건으로 하는 노드가 이 노드보다 트리에서 더 높은 경우 해당 응답이 대신 표시됩니다.

모호성 제거 테스트

테스트할 때 옵션이 나열되는 순서가 변경될 수 있습니다. 실제로 모호함 목록에 포함된 옵션 자체는 테스트마다 변경될 수 있습니다.

이 동작은 의도된 것입니다. 어시스턴트가 사용자 선택을 통해 자동으로 학습할 수 있도록 돕기 위해 진행 중인 개발의 일환으로, 동의어 목록의 선택 항목과 순서는 일부러 무작위로 지정하고 있습니다. 순서를 변경하면 모든 선택 사항을 미리 신중하게 검토하지 않고 항상 첫 번째 옵션을 선택하는 일부 사람들로 인해 발생할 수 있는 편견을 방지하는 데 도움이 됩니다.

모호성 제거를 테스트하려면 다음 단계를 완료하십시오.

  1. '사용해 보기' 창에서 모호성 해소에 적합한 테스트 발화, 즉 두 개 이상의 대화 노드가 이와 같은 발화를 처리하도록 구성되어 있는 테스트 발화를 입력합니다.

  2. 응답에 선택할 수 있는 대화 상자 노드 옵션 목록이 포함되어 있지 않은 경우 노드 이름 (또는 외부 노드 이름) 필드에 요약 정보를 추가했는지 확인하십시오.

  3. 모호성 제거가 여전히 트리거되지 않는 경우, 노드에 대한 신뢰도 점수가 예상한 값에 가깝지 않은 것일 수 있습니다.

    • 입력에서 발견된 상위 3개의 인텐트의 신뢰도 점수를 보려면 "시험 사용" 분할창의 눈 아이콘 위로 마우스를 이동하십시오.

    • 사용자 입력에서 발견된 모든 의사의 신뢰도 점수를 보려면 트리거되는 노드의 노드 응답 끝에 <? intents ?> 항목을 임시로 추가하십시오.

      이 SpEL 표현식은 사용자 입력에서 배열로 감지된 인텐트를 보여줍니다. 이 배열에는 인텐트 이름과 어시스턴트가 사용자의 의도된 목표를 반영하고 있다는 신뢰도 레벨이 포함됩니다.

    • 사용자 입력에서 어떤 엔티티가 감지되었는지 확인하려면 현재 응답을 SpEL 표현식이 포함된 단일 텍스트 응답으로 일시적으로 대체할 수 있습니다 <? entities ?>.

      이 SpEL 표현식은 사용자 입력에서 배열로 감지된 엔티티를 보여줍니다. 이 배열에는 엔티티 이름, 엔티티 멘션의 위치, 엔티티 멘션 문자열 및 해당 용어가 지정된 엔티티 유형의 멘션이라는 신뢰 수준이 포함됩니다.

    • 호출 시 컨텍스트 변수 값과 같은 기타 특성을 포함하여 모든 아티팩트에 대한 세부사항을 보려면 전체 API 응답을 검사하십시오. API 호출 세부사항 보기를 참조하십시오.

  4. 모호함 옵션으로 예상되는 노드 중 하나 이상의 이름 필드(또는 외부 노드 이름 필드)에서 설명을 일시적으로 제거합니다.

  5. 테스트 발화를 "시험 사용" 분할창에 다시 입력하십시오.

    응답에 <? intents ?> 표현식을 추가한 경우 텍스트에는 어시스턴트가 테스트 발화에서 인식한 의도 목록이 포함되며 각 의도에 대한 신뢰도 점수가 포함됩니다.

    서비스는 Customer_Care_Cancel_Account 및 eCommerce_Cancel_Product_Order 포함한 다양한 인텐트 배열을 반환합니다.
    인텐트 및 신뢰도 점수

테스트를 완료한 후 노드 응답에 추가된 모든 SpEL 표현식을 제거하거나 표현식으로 바꾼 원래 응답을 다시 추가하고, 텍스트를 제거한 모든 이름 또는 외부 노드 이름 필드를 다시 채우십시오.

디그레션

다이그레션 (Digression) 은 사용자가 하나의 목표를 처리하는 대화 상자 플로우에 있지만 다른 목표를 처리하는 대화 상자 플로우를 시작하기 위해 주제를 전환할 때 발생합니다. 대화 상자 분기의 노드가 사용자의 마지막 입력의 목표와 일치하지 않으면 대화는 루트 노드 조건에서 적절한 일치를 확인합니다. 노드 당 사용 가능한 다이그레션(digression) 설정에서 이 동작을 훨씬 더 맞춤 설정하는 기능을 제공합니다.

다이그레션(digression) 설정을 사용하면, 다이그레션이 발생했을 때 중단된 대화 플로우로 대화를 되돌릴 수 있습니다. 예를 들어, 사용자가 새 전화를 주문하고 있지만 주제를 전환하여 태블릿에 대해 질문합니다. 대화 상자에서 태블릿에 대한 질문에 답한 다음 사용자가 전화 주문을 중단한 지점으로 돌아갈 수 있습니다. 다이그레션(digression)의 발생 및 돌아가기를 허용하면 사용자는 실행 중에 대화 플로우를 보다 잘 제어할 수 있습니다. 다이그레션(digression)은 주제를 변경할 수 있고, 관련이 없는 주제에 대한 대화 플로우를 끝까지 따라갈 수 있으며, 그런 다음 전에 있었던 곳으로 돌아갈 수 있습니다. 결과는 사용자 간의 대화를 보다 면밀하게 시뮬레이션하는 대화 플로우입니다.

시작하기 전에

전체 대화를 테스트할 때 다이그레션(digression)을 허용하고 발생해서 돌아오는 시기와 위치를 결정하십시오. 다음 다이그레션(digression) 제어는 노드에 자동으로 적용됩니다.

  • 대화의 모든 루트 노드는 기본적으로 대상을 다이그레션(digression)할 수 있도록 구성됩니다. 하위 노드는 다이그레션(digression)의 대상이 될 수 없습니다.

  • 슬롯이 있는 노드는 다이그레션(digression)을 방지하도록 구성됩니다. 기타 모든 노드는 다이그레션(digression)을 허용하도록 구성됩니다. 그러나 다음과 같은 상황에서는 대화가 노드로부터 다이그레션(digression)할 수 없습니다.

    • 현재 노드의 하위 노드에 anything_else 또는 true 조건이 포함된 경우. 이러한 조건은 항상 참으로 평가한다는 점에서 특별합니다. 알려진 동작으로 인해, 대화에서 종종 상위 노드가 특정 하위 노드를 연속적으로 평가하도록 강제합니다. 기존 대화 상자 흐름 로직이 깨지는 것을 방지하기 위해 이 경우 일탈이 허용되지 않습니다. 그러한 노드로부터 다이그레션(digression)을 사용으로 설정하기 전에 하위 노드의 조건을 다른 것으로 변경해야 합니다.

    • 노드가 처리된 후 다른 노드로 이동하거나 사용자 입력을 건너뛰도록 구성된 경우. 노드의 최종 단계 섹션은 노드가 처리된 후 어떤 일이 발생하는지 지정합니다. 대화 상자가 다른 노드로 바로 이동하도록 구성된 경우, 특정 순서를 따르도록 하기 위한 경우가 많습니다. 그리고 노드가 사용자 입력을 건너뛰도록 구성된 경우, 이는 대화가 현재 노드 다음의 첫 번째 하위 노드를 연속적으로 처리하도록 하는 것과 동일합니다. 기존 대화 플로우 로직을 위반하지 않도록 하기 위해 이런 경우 다이그레션(digression)은 허용되지 않습니다. 이 노드로부터의 다이그레션(digression)을 사용으로 설정하기 전에 최종 단계 섹션에서 지정된 내용을 변경해야 합니다.

디그레션 사용자 정의

귀하는 다이그레션(digression)의 시작과 끝을 정의하지 않습니다. 사용자가 실행 중에 다이그레션(digression) 플로우를 완전히 제어합니다. 각 노드가 사용자 주도 다이그레션 (Digression) 에 포함되는 방법을 지정할 수 있습니다. 각 노드에 대해 다이그레션 (Digression) 을 구성할 수 있습니다.

  • 노드에서 시작하고 노드에서 나갑니다.
  • 다른 곳에서 시작하여 노드를 타겟팅하고 진입할 수 있습니다
  • 다른 곳에서 시작하여 노드로 들어가는 노드는 현재 대화 상자 흐름이 완료된 후 중단된 대화 상자 흐름으로 돌아가야 합니다

개별 노드의 다이그레션(digression) 동작을 변경하려면, 다음 단계를 완료하십시오.

  1. 노드를 클릭하여 편집 보기를 여십시오.

  2. 사용자 정의를 클릭하고, 다이그레션(digression) 탭을 클릭하십시오.

    구성 옵션은 편집 중인 노드가 루트 노드, 하위 노드, 하위 노드 또는 슬롯이 있는 노드인지 여부에 따라 다릅니다.

    이 노드로부터의 다이그레션(digression)

    이전에 나열된 상황이 적용되지 않으면 다음과 같은 선택을 할 수 있습니다.

    • 모든 노드 유형: 사용자가 현재 대화 분기의 끝에 도달하기 전에 현재 노드로부터 다이그레션(digression)할 수 있도록 허용할지 여부를 선택합니다.

    • 자식이 있는 모든 노드: 노드의 응답이 표시되고 그 자식 노드가 목표에 부수적인 경우 대화를 현재 노드로 돌아가도록 하려면 선택합니다. 대화가 현재 노드로 돌아가는 것을 방지하고 분기 처리를 계속하려면, 이 노드의 응답 후에 실행된 다이그레션(digression)에서 돌아오기 허용 스위치를 No로 설정하십시오.

      예를 들어 사용자가 Do you sell cupcakes? 라는 질문을 하고 주제를 변경하기 전에 We offer cupcakes in a variety of flavors and sizes 이라는 응답이 표시되는 경우 대화 상자가 중단된 지점으로 돌아가지 않도록 설정할 수 있습니다. 특히 하위 노드가 사용자의 후속 질문을 처리하고 안전하게 무시할 수 있는 경우에는 더욱 그렇습니다.

      그러나, 노드가 하위 노드에 의존하여 질문을 처리하는 경우, 강제로 대화로 돌아가고 현재 분기의 노드 처리를 계속하기를 원할 수도 있습니다. 예를 들어, 초기 응답은 We offer cupcakes in all shapes and sizes. Which menu do you want to see: gluten-free, dairy-free, or regular? 일 수 있습니다. 사용자가 주제를 변경하는 경우 사용자가 메뉴 유형을 선택하고 원하는 정보를 얻을 수 있도록 대화 상자가 다시 표시되도록 할 수 있습니다.

    • 슬롯이 있는 노드: 모든 슬롯이 채워지기 전에 사용자가 노드로부터 다이그레션(digression)할 수 있도록 허용할지 여부를 선택하십시오. 슬롯을 채우는 중에 다이그레션(digression) 허용 스위치를 Yes로 설정하여 다이그레션(digression)을 사용으로 설정하십시오.

      사용으로 설정된 경우, 대화가 다이그레션(digression)에서 돌아오면 사용자가 계속 정보를 제공할 수 있도록 채워지지 않은 다음 슬롯에 대한 프롬프트가 표시됩니다. 사용 안함으로 설정된 경우, 슬롯을 채울 수 있는 값을 포함하지 않는 사용자 입력 내용은 무시됩니다. 그러나 슬롯 핸들러를 정의하여 사용자가 노드와 상호작용하는 동안 사용자가 요청할 수 있는 원치 않는 질문을 처리 할 수 있습니다. 자세한 정보는 슬롯 추가 를 참조하십시오.

    • 슬롯이 있는 노드: 사용자가 현재 노드로 돌아갈 때 이탈을 허용할지 여부는 복귀를 허용하는 슬롯에서 노드로만 이탈 확인란을 선택하여 선택할 수 있습니다.

      선택한 경우, 대화에서 노드와 관련없는 질문에 답하는 노드를 찾으면 다이그레션(digression) 후 돌아가도록 구성되지 않은 루트 노드는 무시됩니다. 사용자가 필요한 슬롯을 다 채우기 전에 노드를 영구적으로 떠나지 못하도록 하려면 이 확인란을 선택합니다.

    이 노드에 다이그레션(digression)

    노드에 다이그레션(digression)이 작동하는 방법에 대해 다음과 같은 선택을 할 수 있습니다.

    • 사용자가 노드에 들어갈 수 없도록 합니다. 자세한 정보는 루트 노드에 다이그레션(digression) 사용 안함을 참조하십시오.

    • 노드로의 다이그레션(digression)이 사용 가능한 경우, 대화가 멀리 떨어져 있는 대화 플로우로 되돌아가야 하는지 여부를 선택합니다. 현재 노드의 브랜치 처리가 완료되면 대화 흐름은 중단된 노드로 돌아갑니다. 대화 상자가 나중에 돌아가도록 하려면 여담 후 돌아가기를 선택합니다.

  3. 적용을 클릭하십시오.

  4. "시험 사용" 분할창을 사용하여 다이그레션(digression) 동작을 테스트하십시오.

    다시 말씀드리지만, 귀하는 다이그레션(digression)의 시작과 끝을 정의할 수 없습니다. 사용자가 다이그레션(digression)이 발생하는 시기와 위치를 제어합니다. 단일 노드가 하나의 노드에 참여하는 방식을 결정하는 설정을 적용할 수 있습니다. 이탈은 예측할 수 없기 때문에 구성 결정이 전체 대화에 어떤 영향을 미치는지 알기 어렵습니다. 사용자가 작성한 선택의 효과를 확인하려면 대화를 테스트해야 합니다.

여기서 #reservation 및 #cuisine 노드는 단일 사용자 지정 다이그레션(digression)에 참여할 수 있는 두 개의 대화 분기를 나타냅니다. 각각의 개별 노드에 구성되는 다이그레션(digression) 설정은 실행 중에 이런 유형의 다이그레션(digression)을 가능하게 하는 요소입니다.

다이그레션(digression) 사용 팁

사용자 지정 복귀 메시지: 이탈한 노드에서 복귀를 활성화하는 모든 노드의 경우, 사용자에게 이전 대화 흐름에서 중단한 지점으로 복귀하는 위치를 알려주는 문구를 추가하는 것을 고려하세요. 텍스트 응답에 특수 구문을 사용하여 두 가지 버전의 응답을 추가합니다.

메시지를 추가하지 않으면 사용자가 이탈한 노드로 돌아왔음을 알리는 동일한 텍스트 응답이 두 번째로 표시됩니다. 사용자가 원래 대화 스레드로 돌아왔을 때 표시할 고유 메시지를 지정하여 사용자가 원래 대화 스레드로 돌아왔다는 사실을 더 명확하게 알릴 수 있습니다.

예를 들어, 노드의 원래 텍스트 응답이 What's the order number?인 경우 사용자가 노드로 돌아갈 때 Now let's get back to where we left off. What is the order number? 같은 메시지를 표시할 수 있습니다.

이를 수행하려면 다음 구문을 사용하여 노드 텍스트 응답을 지정하십시오.

<? (returning_from_digression)? "post-digression message" : "first-time message" ?>

예를 들어,

<? (returning_from_digression)? "Now, let's get back to where we left off.
What is the order number?" : "What's the order number?" ?>

추가하는 텍스트 응답에 SpEL 표현식이나 단축 구문을 포함할 수 없습니다. 사실은, 단축 구문을 전혀 사용할 수 없습니다. 대신, 텍스트 문자열과 전체 스핀 표현식 구문을 함께 연결해 전체 응답을 구성하여 메시지를 빌드해야 합니다.

예를 들어, 다음 구문을 사용하여 일반적으로 What can I do for you, $username? 로 지정하는 텍스트 응답에 컨텍스트 변수를 포함할 수 있습니다:

<? (returning_from_digression)? "Where were we, " +
context["username"] + "? Oh right, I was asking what can I do
for you today." : "What can I do for you today, " +
context["username"] + "?" ?>

전체 SpEL 표현식 구문에 대한 자세한 내용은 오브젝트 액세스를 위한 표현식을 참조하십시오.

돌아가기 방지: 일부 경우에는 현재 대화 플로우에서 작성하는 선택사항에 따라 중단된 대화 플로우로 돌아가지 않도록 할 수 있습니다. 특수 구문을 사용하여 특정 노드에서 돌아가지 않도록 할 수 있습니다.

예를 들어, #General_Connect_To_Agent 또는 유사한 인텐트를 조건으로 하는 노드가 있을 수 있습니다. 트리거될 때 외부 서비스로 전송하기 전에 사용자의 확인을 받으려면 Do you want me to transfer you to an agent now? 과 같은 응답을 추가할 수 있습니다. #yes#no 을 조건으로 하는 두 개의 하위 노드를 추가할 수 있습니다.

이 유형의 분기에 대한 다이그레션(digression)을 관리하는 가장 좋은 방법은 루트 노드가 다이그레션(digression) 돌아가기를 허용하도록 설정하는 것입니다. 그러나 #yes 노드에서 응답에 SpEL 표현식 <? clearDialogStack() ?> 항목을 포함시키십시오. 예를 들어,

OK. I will transfer you now. <? clearDialogStack() ?>

이 SpEL 표현식은 이 노드에서 디그레션 리턴이 발생하는 것을 방지합니다. 확인이 요청될 때 사용자가 허용하면 적절한 응답이 표시되고 중단된 대화 플로우가 재개되지 않습니다. 사용자가 허용하지 않는 경우, 사용자는 중단된 플로우로 돌아갑니다.

루트 노드에 다이그레션(Digression) 사용 안함

플로우가 루트 노드로 들어가면 해당 노드에 대해 구성된 대화 상자의 과정을 따릅니다. 플로우는 노드 분기의 끝 이전에 일련의 하위 노드를 처리한 후 인터럽트된 대화 상자 플로우로 돌아갈 수 있습니다. 테스트를 통해 루트 노드가 너무 자주, 예상치 못한 시간에 트리거되거나 대화 상자가 너무 복잡하여 사용자에게 줄되다는 것을 알 수 있습니다. 사용자가 다이그레션(digression)하는 것을 허용하지 않도록 결정한 경우 루트 노드가 다이그레션(digression)을 허용하지 않도록 구성할 수 있습니다.

루트 노드 전체에 다이그레션(digression)을 사용 안함으로 설정하려면, 다음 단계를 수행하십시오.

  1. 편집하려는 루트 노드를 클릭하여 여십시오.
  2. 사용자 정의를 클릭하고, 다이그레션(digression) 탭을 클릭하십시오.
  3. 이 노드로의 이탈 허용을 꺼짐으로 설정합니다.
  4. 적용을 클릭하십시오.

여러 루트 노드로 다이그레션(digression)을 방지하고 각 노드를 개별적으로 편집하지 않으려면 노드를 폴더에 추가 할 수 있습니다. 폴더의 사용자 지정 페이지에서 이 노드로의 일탈 허용 스위치를 꺼짐으로 설정하여 모든 노드에 구성을 적용할 수 있습니다. 자세한 정보는 폴더가 있는 대화 상자 구성 을 참조하십시오.

디자인 고려사항

대체 노드 확산 방지: 많은 대화 상자 디자이너는 사용자가 분기에 걸리지 않도록 하기 위해 모든 대화 상자 분기 끝에 true 또는 anything_else 조건이 있는 노드를 포함합니다. 이 디자인은 사용자 입력이 예상한 내용과 일치하지 않고 처리할 특정 대화 노드를 포함할 경우 일반 메시지를 리턴합니다. 그러나, 사용자는 이 접근 방식을 사용하는 대화 플로우에서 다이그레션(digression)할 수 없습니다.

이 방법을 사용하는 모든 분기를 평가하여 분기로부터의 다이그레션(digression)을 허용하는 것이 더 나은지 여부를 결정하십시오. 사용자의 입력이 예상한 것과 일치하지 않는 경우 트리에서 완전히 다른 대화 상자 흐름과 일치하는 항목을 찾을 수 있습니다. 일반 메시지에 응답하는 대신 나머지 대화를 효과적으로 사용하여 사용자의 입력을 처리할 수 있습니다. 그리고 루트 레벨 Anything else 노드는 다른 루트 노드가 처리할 수 없는 입력에 항상 응답할 수 있습니다.

닫기 노드로 점프를 다시 고려: 표준 닫기 질문(예: Did I answer your question today? 사용자가 다른 노드로 점프하도록 구성된 노드에서 벗어나도록 디그레션할 수 없음)을 요청하도록 다수의 대화 상자가 디자인되었습니다. 따라서, 모든 최종 분기 노드를 공통 종료 노드로 점프하도록 구성하면 다이그레션(digression)은 발생하지 않습니다. 메트릭 또는 다른 방법을 통해 사용자 만족 추적을 고려하십시오.

가능한 이탈 체인을 테스트합니다: 사용자가 현재 노드에서 이탈을 허용하는 다른 노드로 이탈하면, 다른 노드에서도 이탈하여 이 패턴을 반복할 수 있습니다. 다이그레션(digression) 체인의 시작 노드가 다이그레션 후 돌아가도록 구성되어 있는 경우, 사용자는 결국 현재 대화 노드로 돌아옵니다. 사실상, 돌아가지 않도록 구성된 체인의 후속 노드는 다이그레션(digression) 대상으로 간주되지 않습니다. 개별 노드가 예상대로 작동하는지 여부를 결정하기 위해 여러 번 다이그레션(digression)하는 테스트 시나리오입니다.

디그레션 반환 시 단계 조건이 재평가되지 않음: 디그레션 이전에 단계 조건이 이미 평가되었으므로 디그레션 반환 시 다시 평가되지 않습니다. 대화 흐름에서 단계 조건을 다시 평가해야 하는 경우 이탈이 시작된 동일한 단계에 다시 프롬프트를 추가합니다. 같은 단계에서 다시 메시지를 표시하지 않고 이탈이 반환되는 것을 방지하려면 다음 단계를 수행하세요:

  1. > 작업 > 내가 만든 작품으로 이동합니다.
  2. 이탈 반환을 방지할 작업을 선택합니다.
  3. 작업 설정를 클릭합니다.
  4. 대화 주제 변경에서 토글을 켜짐으로 전환합니다.
  5. 이 작업을 완료한 후 원래 작업으로 돌아가지 않습니다를 선택합니다.
  6. 저장 을 클릭하십시오.

현재 노드가 우선권을 갖습니다: 현재 흐름에서 벗어난 노드는 현재 흐름이 사용자 입력을 처리할 수 없는 경우에만 디그레션 대상으로 간주됩니다. 이탈을 허용하는 슬롯이 있는 노드에서 사용자에게 어떤 정보가 필요한지 명확히 하고, 사용자가 값을 제공한 후에 표시되는 확인 문구를 추가할 수 있습니다.

모든 슬롯은 슬롯 채우기 처리 중에 채워질 수 있습니다. 따라서, 슬롯이 사용자 입력을 캡처할 수 있습니다. 예를 들어, 저녁 식사 예약을 작성하는 데 필요한 정보를 수집하는 슬롯이 있는 노드가 포함될 수 있습니다. 슬롯 중 하나가 날짜 정보를 수집합니다. 사용자가 What's the weather meant to be tomorrow? 에 대해 질문할 수 있습니다. 사용자에게 응답할 수 있는 #forecast를 조건으로 하는 루트 노드가 있을 수 있습니다. 그러나 사용자의 입력에 tomorrow 이라는 단어가 포함되어 있고 슬롯이 있는 예약 노드가 처리 중이므로 어시스턴트는 사용자가 대신 예약 날짜를 제공하거나 업데이트하는 것으로 가정합니다. 현재 노드가 항상 우선순위를 갖습니다. 명확한 확인 문장을 정의한 경우, 예를 들어, Ok, setting the reservation date to tomorrow,, 사용자는 잘못된 의사 소통이 있었음을 깨닫고 이를 정정합니다.

사용자가 슬롯에서 예상하지 않은 값을 제공하는 경우, 사용자가 다이그레션 (digression) 하려고 하지 않은 관련되지 않은 루트 노드와 일치할 수 있습니다.

다이그레션(digression) 동작을 구성하려면 많은 테스트가 필요합니다.

슬롯 핸들러 대신 디그레션을 사용해야 하는 경우: 사용자가 물어볼 수 있는 일반적인 질문의 경우, 디그레션을 허용하는 루트 노드를 사용하여 입력을 처리한 다음 진행 중이던 흐름으로 돌아가세요. 슬롯이 있는 노드의 경우 사용자가 슬롯을 채울 때 질문할 수 있는 관련 질문의 유형을 예상하고 노드에 핸들러를 추가하여 이를 해결하세요.

예를 들어 슬롯이 있는 노드가 보험 청구를 완료하는 데 필요한 정보를 수집하는 경우 보험에 대한 일반적인 질문을 해결하는 핸들러를 추가할 수 있습니다. 그러나 도움을 받는 방법이나 스토어 위치, 회사의 역사에 대한 질문은 루트 수준 노드를 사용하세요.