자유 대화 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에서는 보통 빈 객체로 유지됩니다.
이는 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을 추가해야 하는 경우¶
사용자 정보를 구조화하여 이후 조건·개인화·외부 서비스에 사용하려면 다음을 함께 설계해야 합니다.
- 최상위
slotsregistry에 정의 - 수집 node의
collect_slots에 연결 - required/optional 정책 결정
- NLU 의미와 enum 값 정의
- routing condition과 회귀 테스트 추가
conversation에 collect_slots를 추가하면 executor가 TaskOrientedExecutor로 바뀝니다. 이는 자유 대화의 실행 성격을 바꾸므로 단순 metadata 용도로 추가하면 안 됩니다.