6장 전사문과 대화 상태를 분리한다
전사문은 관찰 데이터이고, 대화 상태는 업무 판단이다. “다음 주 화요일”이라는 전사문을 바로 2026-08-11로 저장하면 기준 날짜와 시간대를 잃는다.
{
"transcript": "다음 주 화요일 오후요",
"candidate": {"date":"2026-08-11","period":"afternoon"},
"confidence": "needs_confirmation",
"timezone": "Asia/Seoul"
}
원문, 해석 후보, 확인 상태를 구분하면 사용자가 수정할 수 있다. 모델이 새 turn에서 다른 날짜를 제시하면 조용히 덮어쓰지 않고 변경을 확인한다.
세션 상태는 작게 유지한다.
collecting → awaiting_confirmation → completed
↘ cancelled
↘ handoff_requested
모델의 자유로운 문장과 상태 전이를 분리한다. 허용된 이벤트만 도메인 함수에 넘기고, 함수가 다음 상태를 결정한다.

왼쪽 대화는 자연어이고 오른쪽 카드는 업무 상태다. 사용자가 “네, 맞아요”를 선택하기 전 상태가 awaiting_confirmation인지, 실제 예약이 아니라는 경고가 보이는지 함께 확인한다.