콘텐츠로 이동

자유 대화 Intent

dm/scenario/general_conversation.json과 현재 공통 runtime 기준입니다.

Registry

Scenario v2에는 intent registry가 없습니다. 이 시나리오에서 intent 이름은 다음 위치에서 발견됩니다.

위치 역할
graph.global_transitions 모든 node의 종료 routing
conversation.next_nodes 종료 또는 stay 결정
prompts.nlu 짧은 부정·주제 접기와 종료 구분
공통 NLU/runtime 코드 fallback, 종료 보정

Routing에 직접 사용하는 intent

현재 scenario condition이 직접 사용하는 intent는 하나입니다.

Intent 위치 조건 결과
user_wants_to_end Global transition conversation_closure로 이동
user_wants_to_end conversation.next_nodes equals conversation_closure로 이동
user_wants_to_end 이외 conversation.next_nodes not_equals 현재 node 유지

종료 흐름

flowchart LR
    USER["사용자 종료 발화"] --> NLU["intent = user_wants_to_end"]
    NLU --> RESPONSE["conversation 응답 생성"]
    RESPONSE --> ROUTE["global transition"]
    ROUTE --> CLOSE["conversation_closure"]
    CLOSE --> COMPLETE["terminal 판정"]

종료 intent를 받았다고 executor가 즉시 세션을 닫는 것은 아닙니다. 현재 node가 응답을 만든 뒤 TransitionEngine이 closure 이동을 결정합니다.

명시적 종료 transition의 범위

현재 선언:

Field Operator Value
nlu.intent equals user_wants_to_end

Runtime은 scenario에 종료 전이가 없을 때 다음 신호를 보는 기본 전이를 만들 수 있습니다.

종료 신호 의미
nlu.intent == user_wants_to_end NLU 종료 intent
nlu.dialogue_act == goodbye 공통 작별 행위
nlu.end_signal == true 명시적인 종료 keyword 안전망

이 scenario는 종료 전이를 직접 선언하므로 기본 전이가 자동 보충되지 않습니다. 따라서 goodbye act나 nlu.end_signal만 있고 intent가 다른 경우에는 현재 JSON만으로 closure 이동이 보장되지 않습니다.

NLU prompt

경로 현재 상태
prompts.nlu 선언
공통 NLU prompt 사용

짧은 부정(아니, 없어)은 현재 질문에 대한 negate이고, 이 얘기 그만은 지금 주제만 접는 deny입니다. 대화 전체를 끝내는 말만 user_wants_to_end입니다.

종료 intent 보정

NLU가 종료 intent를 반환했더라도 다음 조건이면 user_wants_to_continue로 보정할 수 있습니다.

조건
intent user_wants_to_end
dialogue_act deny 또는 negate
명시적 종료 keyword 없음

예를 들어 "아니, 가지 마"를 작별 수긍으로 해석하지 않도록 하는 경로입니다.

공통 runtime intent

Intent 소비 위치 현재 시나리오에서의 영향
empty FallbackPolicy 무응답 처리
unknown NLU 장애 fallback dialogue_act=null과 함께 이해 불가 처리
user_wants_to_continue 종료 intent 보정 종료 routing 방지, conversation stay
affirm, deny DialogAct.from_intent() dialog act 누락 시 fallback 추론

자유 대화 범위

conversation에는 collect_slots가 없습니다. 사용자를 정해진 주제로 되돌리는 scenario 조건도 없으며, 최신 사용자 입력에 직접 응답하는 것이 기본입니다.

현재 주의점

  • 종료 routing은 intent 문자열 하나에 의존합니다.
  • prompts.nlu가 짧은 부정·주제 접기와 종료를 구분합니다.
  • goodbye act만으로 closure 이동이 보장되지 않습니다.
  • nlu.end_signal=true만으로 closure 이동이 보장되지 않습니다.
  • 종료 intent가 아닌 모든 값은 node-local not_equals 조건으로 stay합니다.

관련 문서