AI 챗봇 대화 흐름 설계하기 - GPT 시나리오 작성 방법
자연스러운 대화의 비밀! 사용자 의도를 파악하고 적절히 응답하는 챗봇 시나리오 설계 방법을 배워봅니다.
대화는 흐름이다
"피자 주문할게요." "어떤 피자요?" "페퍼로니요." "사이즈는?" "라지로요." "음료는?" "콜라 주세요."
이게 자연스러운 대화죠. 하지만 챗봇이 이렇게 하려면?
"피자 주문하려면 이름, 주소, 전화번호, 피자 종류, 사이즈, 토핑, 음료, 결제 방법을 한 번에 말씀해주세요."
이건 아니잖아요?
오늘은 사람처럼 자연스럽게 대화하는 흐름을 설계하는 방법을 알려드릴게요.
대화 흐름이란?
대화 흐름(Conversation Flow)은 챗봇과 사용자가 주고받는 대화의 경로예요.
나쁜 대화 흐름
사용자: 여행 추천해줘
챗봇: 여행지 추천해드립니다.
파리, 도쿄, 뉴욕, 런던, 로마...
(50개 도시 나열)
좋은 대화 흐름
사용자: 여행 추천해줘
챗봇: 좋아요! 몇 가지만 여쭤볼게요.
언제쯤 가실 계획이세요?
사용자: 다음 달
챗봇: 다음 달이시군요!
국내 여행과 해외 여행 중 어떤 걸 원하세요?
사용자: 해외
챗봇: 해외 여행! 설레시겠어요 😊
어떤 스타일을 좋아하세요?
1. 휴양지에서 쉬기
2. 도시 관광
3. 액티비티/모험
사용자: 휴양지
챗봇: 완벽해요! 다음 달 휴양지라면
태국 푸켓이나 발리를 추천드려요.
날씨도 좋고 가격도 합리적이거든요.
더 자세한 정보가 필요하신가요?
느낌 차이 나죠?
대화 흐름 설계 3단계
1단계: 목표 정하기
챗봇이 달성해야 할 목표는?
예시:
- 피자 주문받기
- 여행 추천하기
- 상담 예약잡기
- 문제 해결하기
2단계: 필요한 정보 정리
목표를 위해 꼭 필요한 정보는?
피자 주문 예시:
필수 정보:
- 피자 종류
- 사이즈
- 주소
- 전화번호
선택 정보:
- 토핑 추가
- 음료/사이드
- 요청사항
3단계: 질문 순서 정하기
어떤 순서로 물어볼까?
고려사항:
- 쉬운 질문부터
- 선택을 좁혀가며
- 맥락상 자연스럽게
피자 주문 흐름:
1. 배달/포장 선택 (큰 카테고리)
2. 피자 종류 (핵심)
3. 사이즈 (상세)
4. 추가 옵션 (선택)
5. 배달 정보 (필수)
6. 확인 및 결제
플로우차트 그리기
말로만 하면 헷갈려요. 그림으로 그려보세요.
간단한 예시: 카페 주문
[시작]
↓
"어떤 음료를 원하세요?"
↓
커피 ←→ 논커피
↓ ↓
"어떤 커피?" "어떤 음료?"
- 아메리카노 - 주스
- 라떼 - 에이드
- 카푸치노 - 스무디
↓ ↓
"사이즈는?"
- 톨
- 그란데
- 벤티
↓
"따뜻하게/차갑게?"
↓
"여기서/테이크아웃?"
↓
"총 5,500원입니다"
↓
[완료]
복잡한 예시: 상담 예약
[시작]
↓
"무엇을 도와드릴까요?"
↓
┌─────┼─────┐
정보 상담 기타
↓ ↓ ↓
FAQ "어떤 상담?" 직원 연결
↓
┌──┼──┐
진로 심리 기타
↓ ↓ ↓
"선호 날짜?"
↓
"오전/오후?"
↓
"가능한 시간 3개 중 선택"
↓
"연락처 입력"
↓
"예약 확인 문자 발송"
↓
[완료]
실전: ChatGPT로 흐름 만들기
Custom GPT Instructions에 흐름을 명시하세요.
피자 주문 봇 예시:
당신은 피자 주문을 받는 챗봇입니다.
대화 흐름:
1단계: 인사 및 배달/포장 선택
2단계: 메뉴 선택
3단계: 사이즈 선택
4단계: 추가 옵션
5단계: 주소/연락처
6단계: 주문 확인
각 단계 규칙:
[1단계] 시작
- 친절하게 인사
- "배달" 또는 "포장" 물어보기
- 사용자 답변 없으면 다시 물어보기
[2단계] 메뉴
- 인기 메뉴 3개 추천 (페퍼로니, 치즈, 콤비네이션)
- "다른 메뉴 보기" 옵션 제공
- 사용자가 선택하면 3단계로
[3단계] 사이즈
- "M (2인)", "L (3-4인)" 선택지 제공
- 가격 함께 안내
- 선택하면 4단계로
[4단계] 추가 옵션
- "음료 추가하시겠어요?" (선택)
- "특별 요청사항 있으세요?" (선택)
- "아니요" 또는 건너뛰면 5단계로
[5단계] 정보 수집
- 배달이면: 주소, 전화번호
- 포장이면: 이름, 전화번호, 픽업 시간
[6단계] 확인
- 주문 내역 정리해서 보여주기
- 총 금액 표시
- "주문하시겠습니까?" 확인
- Yes → 주문 완료 메시지
- No → 수정할 부분 물어보기
주의사항:
- 한 번에 여러 질문 하지 않기
- 사용자가 답변하지 않으면 같은 단계 반복
- 이전 단계로 돌아가고 싶으면 허용
- 주문 취소하고 싶으면 언제든 가능
예시:
봇: 안녕하세요! 피자 주문 도와드릴게요 🍕
배달과 포장 중 어떤 걸 원하세요?
사용자: 배달요
봇: 배달로 주문하시는군요!
어떤 피자를 원하세요?
인기메뉴:
1. 페퍼로니 (13,000원~)
2. 치즈 (12,000원~)
3. 콤비네이션 (15,000원~)
다른 메뉴를 원하시면 "메뉴판"이라고 해주세요!
사용자: 페퍼로니요
봇: 페퍼로니 피자 좋은 선택이에요!
사이즈를 골라주세요:
M (2인) - 13,000원
L (3-4인) - 18,000원
(대화 계속...)
Claude Projects로 단계별 대화 만들기
Claude는 긴 Instructions를 잘 처리해요.
여행 추천 봇 예시:
[System Instructions]
당신은 여행 추천 전문 챗봇입니다.
사용자와 대화하며 정보를 수집하고 맞춤 여행지를 추천합니다.
대화 흐름 단계:
=== 1단계: 여행 시기 ===
목표: 언제 여행 갈지 파악
질문: "언제쯤 여행 가실 계획이세요?"
수집 정보: 여행 시기 (월/계절)
다음 단계: 2단계
=== 2단계: 국내/해외 ===
목표: 여행 범위 결정
질문: "국내 여행과 해외 여행 중 어떤 걸 생각하고 계세요?"
수집 정보: destination_type (domestic/international)
다음 단계: 3단계
=== 3단계: 여행 스타일 ===
목표: 선호하는 여행 유형 파악
질문: "어떤 스타일의 여행을 좋아하세요?"
선택지:
- 휴양/힐링
- 관광/문화
- 액티비티/모험
- 미식/음식
수집 정보: travel_style
다음 단계: 4단계
=== 4단계: 예산 ===
목표: 예산 범위 확인
질문: "1인 기준 예산이 어떻게 되세요?"
선택지:
- 50만원 미만
- 50-100만원
- 100-200만원
- 200만원 이상
수집 정보: budget
다음 단계: 5단계
=== 5단계: 추천 ===
목표: 수집한 정보로 여행지 추천
출력 형식:
"[사용자]님의 여행 프로필:
- 시기: [시기]
- 유형: [국내/해외]
- 스타일: [스타일]
- 예산: [예산]
추천 여행지 TOP 3:
1. [여행지 이름]
- 특징: [설명]
- 예상 비용: [금액]
- 추천 이유: [이유]
2. [여행지 이름]
...
3. [여행지 이름]
...
더 자세한 정보가 필요하시면 말씀해주세요!"
다음 단계: 추가 질문 대응 또는 종료
=== 대화 규칙 ===
- 한 번에 한 질문만
- 사용자 답변 확인 후 다음 단계
- 불명확한 답변이면 다시 물어보기
- "처음부터" 입력하면 1단계로 리셋
- 친절하고 공감하는 말투
=== 예외 처리 ===
- 모르겠다고 하면: "괜찮아요! 제가 인기 있는 옵션 몇 개 알려드릴게요"
- 너무 구체적 요구: "그 부분은 여행사와 상담하시는 게 좋을 것 같아요"
- 예산 없음: "예산을 정하지 않으셨군요! 다양한 가격대로 추천드릴게요"
분기(Branch) 처리하기
사용자는 예상 밖의 말을 해요. 대비해야죠.
예시: 카페 주문
기본 흐름:
메뉴 선택 → 사이즈 → 옵션 → 결제
분기 상황:
1. "가격이 얼마예요?"
→ 가격표 보여주기
→ 현재 단계로 복귀
2. "추천해줘"
→ 인기 메뉴 3개 보여주기
→ 선택하면 다음 단계
3. "주문 취소"
→ "정말 취소하시겠어요?" 확인
→ Yes: 처음으로
→ No: 현재 단계로
4. "처음부터"
→ 모든 정보 초기화
→ 1단계로
5. "이전으로"
→ 바로 전 단계로
6. 이해 불가 입력
→ "죄송해요, 잘 이해하지 못했어요"
→ 현재 질문 다시 제시
Instructions 예시:
분기 명령어 처리:
"가격" / "얼마" / "금액" 입력 시:
→ 메뉴판과 가격 표시
→ "메뉴를 선택해주세요" (현재 단계로 복귀)
"추천" / "잘 모르겠어" 입력 시:
→ 인기 TOP 3 표시
→ "이 중에서 골라주세요"
"취소" / "그만" 입력 시:
→ "주문을 취소하시겠어요? (네/아니요)"
→ 네: "다음에 또 방문해주세요!"
→ 아니요: 현재 단계 계속
"처음" / "다시" 입력 시:
→ 모든 변수 초기화
→ 인사 단계로
"뒤로" / "이전" 입력 시:
→ 이전 단계로 (변수는 유지)
그 외 알 수 없는 입력:
→ "잘 이해하지 못했어요. [현재 질문] 다시 해주시겠어요?"
대화 상태 관리
챗봇은 어디까지 진행했는지 기억해야 해요.
상태 추적 예시
현재 상태: step_2_menu_selection
수집된 정보:
- delivery_type: "배달"
- pizza_type: null (아직 선택 안 함)
- size: null
- extras: null
- address: null
- phone: null
다음 행동: 피자 종류 질문
ChatGPT에서 상태 관리
[Instructions에 추가]
대화 진행 상황 추적:
매 답변마다 내부적으로 다음을 기록하세요 (사용자에게 보이지 않게):
진행도: [1단계/2단계/3단계...]
수집 완료: [✓ 배달방식, ✗ 메뉴, ✗ 사이즈...]
다음 질문: [사이즈 물어보기]
사용자가 "지금까지 뭐 골랐어?"라고 물으면:
수집된 정보 요약해서 보여주기
예시:
"지금까지 선택하신 내용이에요:
✓ 배달로 주문
✓ 페퍼로니 피자
✗ 사이즈 (아직 선택 안 함)
✗ 추가 옵션 (아직 선택 안 함)"
자연스러운 대화 만들기 팁
1. 확인과 공감
나쁜 예:
봇: 사이즈?
사용자: 라지
봇: 옵션?
좋은 예:
봇: 어떤 사이즈로 할까요?
사용자: 라지요
봇: 라지 사이즈 좋죠! 양도 푸짐하고요 😊
추가로 음료나 사이드 메뉴 필요하세요?
2. 컨텍스트 유지
나쁜 예:
사용자: 페퍼로니 피자 주문할게요
봇: 네. 어떤 피자를 원하세요?
좋은 예:
사용자: 페퍼로니 피자 주문할게요
봇: 페퍼로니 피자 주문하시는군요!
어떤 사이즈로 드릴까요?
3. 선택지 제공
나쁜 예:
봇: 시간을 말씀해주세요.
사용자: 음... 언제가 좋을까...
좋은 예:
봇: 어느 시간이 좋으세요?
오늘 가능한 시간은:
1. 오후 2시
2. 오후 4시
3. 오후 6시
또는 원하는 시간을 말씀해주세요!
4. 진행 상황 알림
봇: 좋아요! 거의 다 됐어요 😊
마지막으로 연락처만 알려주시면
주문 완료됩니다!
5. 오류 방지
봇: 주소를 입력해주세요.
예: 서울시 강남구 테헤란로 123
사용자: 강남
봇: 앗, 좀 더 자세한 주소가 필요해요!
"시/구/동/건물명"까지 포함해주시면 감사하겠습니다.
예: 서울시 강남구 역삼동 123-45
실전 프로젝트: 식당 예약 봇
전체 흐름을 설계해봐요.
=== 식당 예약 챗봇 흐름 ===
[1단계] 인사 및 예약 의사 확인
봇: "안녕하세요! 레스토랑 '맛있다' 예약 도와드릴게요."
"예약하시겠어요?"
대기: 사용자 응답
[2단계] 날짜 선택
봇: "어느 날 방문하실 건가요?"
선택지:
- 오늘
- 내일
- 이번 주말
- 직접 입력
수집: reservation_date
[3단계] 시간 선택
봇: "[날짜]에 방문하시는군요!"
"몇 시쯤 오실 건가요?"
선택지:
- 점심 (11:30, 12:00, 12:30, 13:00)
- 저녁 (17:30, 18:00, 18:30, 19:00, 19:30)
수집: reservation_time
[4단계] 인원 확인
봇: "몇 분이서 오시나요?"
(2명~10명까지 버튼, 그 이상은 문의)
수집: party_size
조건: 6명 이상이면 → "개별실 원하세요?" 추가 질문
[5단계] 특별 요청
봇: "특별히 요청하실 사항 있으세요?"
예시:
- 창가 자리
- 기념일 이벤트
- 음식 알레르기
- 없음
수집: special_requests (선택)
[6단계] 연락처
봇: "예약자 성함과 연락처를 알려주세요."
예: 홍길동, 010-1234-5678
수집: name, phone
[7단계] 확인
봇: "예약 내용 확인해주세요:
📅 날짜: [날짜]
🕐 시간: [시간]
👥 인원: [인원]명
📝 요청: [요청사항]
👤 예약자: [이름]
📞 연락처: [전화]
이대로 예약하시겠어요?"
대기: 확인 (네/아니요/수정)
[8단계] 완료
봇: "예약이 완료되었습니다! ✨
예약번호: R20240515-001
방문 30분 전에 확인 문자 보내드릴게요.
예약 변경이나 취소는 방문 3시간 전까지 가능합니다.
맛있는 시간 되세요! 😊"
[종료]
Poe 봇으로 만들기:
당신은 식당 예약 챗봇입니다.
위 흐름을 정확히 따르세요.
- 단계를 건너뛰지 마세요
- 모든 정보를 수집한 후에만 예약 확정
- 사용자가 이전 단계로 가고 싶으면 허용
- 친절하고 환대하는 말투
추가 명령어:
- "취소": 예약 프로세스 취소
- "처음부터": 1단계로
- "예약 확인": 현재까지 수집된 정보 보여주기
테스트 시나리오 작성
만든 봇을 테스트하려면 시나리오가 필요해요.
테스트 케이스 예시
시나리오 1: 정상 흐름
사용자: 예약하고 싶어요
→ 봇이 날짜 질문하는가?
사용자: 내일이요
→ 봇이 시간 질문하는가?
사용자: 저녁 7시요
→ 인원 질문하는가?
...
→ 최종 예약 완료 메시지 나오는가?
시나리오 2: 중간에 변경
사용자: 예약할게요
봇: 날짜는?
사용자: 토요일
봇: 시간은?
사용자: 아 날짜를 금요일로 바꿀래요
→ 봇이 날짜를 수정하는가?
→ 다시 시간을 물어보는가?
시나리오 3: 예외 상황
사용자: 예약
봇: 날짜는?
사용자: 100명이 가고 싶어요
→ 봇이 적절히 대응하는가?
→ 다른 연락 방법 안내하는가?
시나리오 4: 취소
사용자: 예약
봇: 날짜는?
사용자: 취소할래요
→ 취소 확인하는가?
→ 예의 바르게 종료하는가?
흔한 실수와 해결책
실수 1: 한 번에 너무 많이 물어봄
나쁜 예:
"날짜, 시간, 인원, 특별 요청사항을 모두 말씀해주세요."
좋은 예:
"먼저 날짜부터 골라볼까요?"
실수 2: 사용자 답변 무시
사용자: 페퍼로니 피자 라지 사이즈로 주세요
나쁜 봇: 어떤 피자를 원하세요?
좋은 봇: 페퍼로니 라지 사이즈 맞으시죠?
추가 옵션 필요하세요?
실수 3: 막다른 길
봇: 예약하시겠어요?
사용자: 아니요
나쁜 봇: (응답 없음)
좋은 봇: 알겠습니다!
그럼 메뉴나 영업시간이 궁금하신가요?
아니면 다른 도움이 필요하신가요?
다음 단계
다음 글에서는 챗봇 성격과 말투 설정을 깊이 있게 다룰 거예요.
같은 내용도 어떻게 말하느냐에 따라 완전히 다른 느낌이 나거든요!
마무리하며
좋은 대화 흐름은 사용자가 챗봇과 대화한다는 걸 잊게 만들어요. 마치 친절한 직원과 이야기하는 것처럼요.
핵심은:
- 한 번에 한 가지만
- 맥락 유지하기
- 선택지 제공하기
- 언제든 돌아갈 수 있게
처음엔 간단한 3단계 흐름부터 시작하세요. 사용하면서 점점 추가하면 됩니다.
오늘 배운 걸로 여러분만의 대화 흐름을 설계해보세요!
함께 읽으면 좋은 글:
- [이전 편] 나만의 FAQ 챗봇 제작
- [다음 편] 챗봇 성격·말투 설정
어떤 흐름을 설계하셨는지 궁금해요. 댓글로 공유해주세요!