콘텐츠로 이동

자유 대화 Slot

dm/scenario/general_conversation.json 기준의 슬롯 설계입니다.

Slot schema

이 시나리오는 최상위 slots를 선언하지 않습니다.

항목 현재 상태 의미
전역 slots registry 없음 정의된 도메인 slot이 없음
conversation.collect_slots 없음 수집할 정보가 없음
conversation_closure.collect_slots 없음 수집할 정보가 없음
params.completion_slots 없음 slot 완료 힌트가 없음

Node별 executor

Node collect_slots Executor
greeting 없음 GeneralResponseExecutor
conversation 없음 GeneralResponseExecutor
conversation_closure 없음 GeneralResponseExecutor

Executor resolver는 node 이름이나 description이 아니라 유효한 collect_slots 유무를 봅니다.

Slot 수집 pipeline

이 시나리오에서는 다음 task 전용 단계가 실행되지 않습니다.

단계 실행 여부 이유
TaskOrientedExecutor 실행 안 함 collect_slots 없음
TaskPolicyPipeline 실행 안 함 General executor 선택
SlotUpdatePolicy 실행 안 함 Task pipeline 미실행
MissingSlotPolicy 실행 안 함 수집 대상 없음
ImplicitAnswerPolicy 실행 안 함 추론할 slot 없음

NLU가 entities를 반환하더라도 이 scenario의 General executor 경로는 이를 task slot update로 commit하지 않습니다.

all_slots_filled의 의미

수집 대상이 없는 node에서는 all_slots_filled=true를 전환 신호로 사용하면 안 됩니다.

공통 NLU prompt는 slot이 없는 node에서 다음 값을 요구합니다.

NLU field 권장 값 이유
missing_slots [] 수집 대상이 없음
all_slots_filled false “slot 없음”을 “수집 완료 후 이동”으로 오인하지 않음

NLG domain rule도 collect_slots가 없는 node에서는 slot 완료 progress와 handoff를 추가하지 않습니다.

상태 저장

DialogueState.slots는 모델상 항상 존재하지만 이 scenario에서는 보통 빈 객체로 유지됩니다.

{
  "slots": {}
}

이는 runtime 응답 예시이며 별도의 scenario slot schema 선언은 아닙니다.

Context와의 구분

자유 대화에서도 runtime context는 사용합니다.

Context 예 역할
conversation_history 최근 user/assistant 발화
last_bot_question 직전 시스템 질문
last_system_dialog_act 직전 응답 행위
node_turns 현재 node 체류 턴
fallback counters 연속 무응답·이해 불가 처리

이 값들은 사용자 도메인 정보인 slot이 아니라 대화 실행 context입니다.

Slot을 추가해야 하는 경우

사용자 정보를 구조화하여 이후 조건·개인화·외부 서비스에 사용하려면 다음을 함께 설계해야 합니다.

  1. 최상위 slots registry에 정의
  2. 수집 node의 collect_slots에 연결
  3. required/optional 정책 결정
  4. NLU 의미와 enum 값 정의
  5. routing condition과 회귀 테스트 추가

conversationcollect_slots를 추가하면 executor가 TaskOrientedExecutor로 바뀝니다. 이는 자유 대화의 실행 성격을 바꾸므로 단순 metadata 용도로 추가하면 안 됩니다.

관련 문서