콘텐츠로 이동

자유 대화 Dialog Act

dm/scenario/general_conversation.json과 현재 공통 runtime 기준입니다. 전체 enum은 Dialog act 정의를 참고합니다.

Scenario condition 사용 여부

현재 JSON의 condition은 nlu.intent만 사용합니다.

항목 현재 상태
Dialog act를 사용하는 scenario condition 없음
종료 condition nlu.intent == user_wants_to_end
Closure 재개 condition 없음

Dialog act는 scenario condition에 없더라도 Global policy, fallback, NLG domain rule에서 계속 사용됩니다.

전체 act별 현재 동작

Act 자유 대화에서의 역할
inform 일반 정보·의견에 자연스럽게 응답
affirm 앞선 질문이나 말에 대한 긍정으로 응답
confirm 확인 발화로 응답
deny, negate 부정 의사를 존중하고 종료 intent 모순 보정에 사용
correct 앞선 정보의 정정을 우선 반영
question 사용자의 질문에 직접 답함
request 사용자 요청을 먼저 처리
request_alt 다른 방법이나 대안을 제시
repeat 직전 질문 또는 설명을 반복·재표현
help 도움 요청에 직접 응답
greeting 인사에 자연스럽게 응답
thank 감사에 응답
goodbye 작별 화법 적용; 현재 JSON에서는 intent가 다르면 closure 이동 미보장
silence FallbackPolicy의 무응답 처리
null FallbackPolicy의 이해 불가 처리

FallbackPolicy

Act Fallback 종류 동작
silence no_input 사용자 탓 없이 짧게 반응하고 현재 node 유지
null not_understood 아는 척하지 않고 짧게 확인

두 경우 모두 FallbackPolicy가 LLM을 먼저 호출합니다. 이 시나리오는 별도 no_input·not_understood 문구가 없으므로, 공통 문구는 LLM 호출 실패 때만 쓰는 안전망입니다.

conversationmax_fallback_retries를 선언하지 않으므로 공통 기본값 3을 사용합니다. Scenario에 명시적인 fallback_exhausted 전이는 없지만 terminal node가 있으므로 runtime이 첫 terminal node를 대상으로 기본 종료 전이를 보충합니다.

Spoken input의 silence 보정

사용자가 실제 텍스트를 입력했는데 NLU가 silence를 반환하면 null로 보정합니다.

조건 결과
user_message가 비어 있지 않음 + dialogue_act=silence dialogue_act=null

말한 사용자를 무응답으로 처리하는 것을 방지합니다.

NLG speech-act rules

자유 대화 화법은 시나리오 prompts.bot이 담당합니다. dialog act별 기본 대응은 그대로 붙습니다.

Act 분류 NLG 원칙
질문 화제를 돌리지 않고 먼저 직접 답함
요청 요청 내용을 무시하지 않음
정정 앞선 내용을 고집하지 않고 수정
감사 불필요한 새 질문보다 감사에 응답
부정 거부한 제안이나 진행을 계속 밀지 않음
작별 종료 의도를 존중하는 표현 사용
이해 불가 이해한 척하지 않음

Scenario의 prompts.bot은 직전 봇 말에 물음표가 있으면 이번은 평서문으로만 끝내라고 둡니다.

Closure에서의 dialog act

conversation_closure는 runtime end node이므로 NLG는 공통 closing acknowledgement 집합을 참고할 수 있습니다.

분류 Act
마무리 수긍 affirm, goodbye, thank, silence
그 외 대화를 이어가려는 발화로 해석 가능

그러나 현재 closure에는 outgoing transition이 없습니다. 따라서 NLG가 새 발화를 대화 재개로 해석하더라도 graph는 conversation으로 돌아가지 않고 terminal 판정으로 완료됩니다.

SeniMate처럼 closure 재개를 지원하려면 system.conversation_resuming을 조건으로 하는 node-local transition이 필요합니다.

종료 intent와 goodbye act

현재 종료 condition:

Field
nlu.intent user_wants_to_end

현재 condition에 포함되지 않은 공통 종료 신호:

Field 현재 보장
nlu.dialogue_act goodbye 단독으로 closure 이동 보장 안 됨
nlu.end_signal true 단독으로 closure 이동 보장 안 됨

NLU가 작별 발화를 user_wants_to_end intent로 함께 분류하면 정상적으로 closure로 이동합니다.

Safety

SafetyPolicy는 자유 대화에서도 executor보다 먼저 실행됩니다.

신호 동작
강한 안전 신호 short-circuit 안전 안내
약한 안전 신호 safety_watch를 기록하고 node가 확인

안전 short-circuit 턴에는 일반 executor와 node routing을 실행하지 않습니다.

관련 문서