자유 대화 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가 짧은 부정·주제 접기와 종료를 구분합니다.goodbyeact만으로 closure 이동이 보장되지 않습니다.nlu.end_signal=true만으로 closure 이동이 보장되지 않습니다.- 종료 intent가 아닌 모든 값은 node-local
not_equals조건으로 stay합니다.