카드 발급 신청 Intent¶
dm/scenario/card_issuance.json과 현재 공통 runtime 기준의 intent 설계입니다.
Registry¶
Scenario v2에는 별도의 intent registry가 없습니다. Intent 이름은 다음 위치에서 발견됩니다.
graph.global_transitions- Node의
next_nodes[].condition prompts.nlu- Runtime 공통 intent
Routing에 직접 사용하는 intent¶
| Intent | 의미 | 위치 | Target |
|---|---|---|---|
user_wants_to_cancel |
카드 신청 취소 | Global, final_confirmation |
application_cancelled |
user_wants_to_end |
서비스 대화 종료 | Global, final_confirmation |
application_cancelled |
{
"name": "user_wants_to_cancel",
"target": "application_cancelled",
"condition": {
"field": "nlu.intent",
"operator": "equals",
"value": "user_wants_to_cancel"
}
}
Global transition은 모든 node에서 먼저 평가되므로 개인정보, 소득, 주소 수집 중에도 즉시 취소할 수 있습니다.
취소 intent¶
prompts.nlu가 취소로 분류하도록 지시하는 표현:
단순한 부정이나 정정은 취소 intent가 아닙니다.
| 사용자 발화 | 직전 질문 | 해석 |
|---|---|---|
| “아니요, 골드 말고 일반이요” | 카드 선택 | 카드 정정 |
| “아니요” | 약관 동의 | terms_agreed=no |
| “신청 안 할래요” | 어느 단계든 | user_wants_to_cancel |
| “그만 얘기하죠” | 어느 단계든 | user_wants_to_end |
약관·신청 거부¶
약관과 신청 진행의 부정은 intent가 아니라 slot으로도 표현됩니다.
| Node | 부정 값 | Routing |
|---|---|---|
final_confirmation |
terms_agreed=no |
취소 |
process_application |
application_confirmed=no |
취소 |
이 구조는 NLU가 명시적인 취소 intent 대신 직전 질문의 부정 entity를 반환해도 안전하게 취소하도록 합니다.
낮은 소득은 intent가 아님¶
낮은 연소득 또는 짧은 근무기간을 별도 종료 intent로 사용하지 않습니다.
annual_income=1000
→ income_verification에서 나머지 required slot 수집
→ address_collection
→ final_confirmation
→ process_application
→ slot condition으로 completion_rejected
이전처럼 precheck_not_eligible을 global transition으로 두면 Task executor가 직장명과 근무기간을 더 물어야 하는 턴에도 global routing이 먼저 실행되어 대화가 조기 종료될 수 있습니다.
현재 NLU prompt는 소득이나 근무기간이 기준보다 낮아도 종료 intent로 분류하지 말라고 명시합니다.
승인·거절은 intent가 아님¶
간이 사전 심사 결과는 LLM intent가 아니라 누적 slot 조건으로 결정합니다.
| 결과 | 결정 근거 |
|---|---|
| 승인 | card_type, annual_income, employment_months 조건 |
| 거절 | 근무기간 또는 카드별 소득 기준 미달 |
| 취소 | 취소·종료 intent 또는 동의 slot no |
사용자나 NLU가 approved, rejected 같은 intent를 반환해도 현재 scenario condition은 사용하지 않습니다.
user_wants_to_end¶
Scenario가 user_wants_to_end global transition을 직접 선언합니다.
따라서 runtime이 자동 보충하는 다음 복합 종료 transition은 추가되지 않습니다.
현재 카드 시나리오에서 종료 routing을 확실히 발생시키는 scenario 조건은 nlu.intent입니다.
end_signal과 goodbye¶
| 신호 | Scenario가 직접 조건으로 사용 | 영향 |
|---|---|---|
nlu.intent=user_wants_to_end |
예 | 취소 node 이동 |
nlu.dialogue_act=goodbye |
아니오 | NLG 화법에는 영향, routing 보장 없음 |
nlu.end_signal=true |
아니오 | 직접 routing에 사용하지 않음 |
종료 표현에서 NLU가 intent를 정확히 반환하도록 prompt와 공통 종료 보정에 의존합니다.
공통 fallback intent¶
| Intent | 역할 |
|---|---|
empty |
무응답 fallback |
unknown |
NLU 장애 또는 이해 불가 fallback |
user_wants_to_continue |
과잉 종료 intent 보정 |
affirm, deny |
Dialog act fallback 추론 가능 |
현재 슬롯에 넣을 수 없는 발화에서는 값을 만들지 않습니다. 다시 묻는 동작은 required 슬롯의 미수집 상태가 담당합니다.
Task node별 정상 주제:
| Node | 정상 주제 |
|---|---|
collect_personal_info |
이름, 생년월일, 개인정보 수집 이유 |
select_card_type |
카드 종류, 연회비, 선언된 혜택 |
income_verification |
소득, 직장, 근무기간 |
address_collection |
주소, 우편번호, 배송 방식 |
final_confirmation |
신청 요약, 약관 동의 |
process_application |
신청 진행 여부, 간이 심사 |
사용자가 질문을 하면 무조건 off-topic으로 분류하지 않습니다. 현재 node의 정보 수집 이유나 카드 혜택을 묻는 질문은 관련 질문이며 먼저 답해야 합니다.
Intent와 dialog act 구분¶
| 표현 | Intent | Dialog act |
|---|---|---|
| “신청 취소할게요” | user_wants_to_cancel |
request 또는 inform |
| “네” | 일반적으로 별도 intent 없음 | affirm |
| “아니요” | 문맥에 따라 slot update | deny |
| “다시 말해주세요” | 일반적으로 별도 intent 없음 | repeat |
| “골드카드 혜택이 뭐예요?” | 카드 관련 intent 또는 일반 질문 | question |
Intent는 업무 목적과 routing을, dialog act는 현재 발화 행위를 표현합니다.
회귀 확인¶
- 낮은 연소득이
user_wants_to_cancel이나 종료 intent로 분류되지 않음 - “골드 말고 일반”이 취소가 아니라 정정으로 처리됨
- 약관 부정이
terms_agreed=no로 저장되어 취소됨 - 최종 신청 부정이
application_confirmed=no로 저장되어 취소됨 - 명시적 취소와 종료는 어느 node에서든 취소 node로 이동
- 승인·거절이 NLU intent가 아닌 slot condition으로 결정됨