콘텐츠로 이동

카드 발급 신청 Intent

dm/scenario/card_issuance.json과 현재 공통 runtime 기준의 intent 설계입니다.

Registry

Scenario v2에는 별도의 intent registry가 없습니다. Intent 이름은 다음 위치에서 발견됩니다.

  1. graph.global_transitions
  2. Node의 next_nodes[].condition
  3. prompts.nlu
  4. 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은 추가되지 않습니다.

nlu.intent == user_wants_to_end
OR nlu.dialogue_act == goodbye
OR nlu.end_signal == true

현재 카드 시나리오에서 종료 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으로 결정됨

관련 문서