2. 품질 관리
Go-Live 고려 사항 > 품질 관리
📋 목차
개요
품질 관리는 에이전트의 성공적인 운영을 위한 핵심 요소입니다. 정확한 응답, 일관성, 그리고 우수한 사용자 경험을 보장해야 합니다.
2.1 응답 품질
정확성 테스트
다양한 시나리오에서 응답의 정확성을 체계적으로 검증합니다.
테스트 케이스 작성:
카테고리: 문서 검색
질문: "2024년 연차 휴가 규정이 어떻게 되나요?"
기대 답변: SharePoint의 HR 정책 문서에서 정확한 연차 규정 인용
검증 항목:
✓ 올바른 문서 참조
✓ 최신 정보 제공 (2024년)
✓ 명확하고 이해하기 쉬운 설명
테스트 매트릭스:
| 시나리오 유형 | 테스트 케이스 수 | 통과 기준 |
|---|---|---|
| 기본 FAQ | 50+ | 95% 정확도 |
| 문서 검색 | 30+ | 90% 정확도 |
| 데이터 조회 | 20+ | 100% 정확도 |
| 복합 질문 | 15+ | 85% 정확도 |
일관성 확인
동일하거나 유사한 질문에 대해 일관된 답변을 제공하는지 확인합니다.
검증 방법:
- 동일 질문을 여러 번 반복하여 응답 비교
- 표현만 다른 유사 질문으로 테스트
- 다른 시간대/세션에서 동일 질문 테스트
예시:
질문 1: "휴가 신청은 어떻게 하나요?"
질문 2: "연차를 쓰려면 어떤 절차를 거쳐야 하나요?"
질문 3: "휴가 내는 방법 알려주세요"
→ 세 질문 모두 동일한 절차 안내를 제공해야 함
오류 처리
예상치 못한 입력이나 오류 상황에 대한 적절한 처리 방안을 마련합니다.
일반적인 오류 시나리오:
1. 모호한 질문
사용자: "그거 어떻게 하는 거야?"
에이전트: "무엇에 대해 도움이 필요하신가요? 좀 더 구체적으로 말씀해 주시면
정확한 안내를 드릴 수 있습니다.
예: 휴가 신청, 비용 처리, 문서 검색 등"
2. 범위 외 질문
사용자: "이번 달 급여가 왜 적게 나왔어요?"
에이전트: "급여 관련 문의는 HR 담당자가 직접 확인이 필요합니다.
HR팀 (내선: 1234, hr@company.com)으로 문의해 주세요.
빠른 처리를 위해 급여명세서를 준비해 주시면 좋습니다."
3. 정보 없음
사용자: "2026년 정책은?"
에이전트: "죄송합니다. 현재 2026년 정책은 아직 확정되지 않았습니다.
최신 정보는 2025년 정책입니다. 확인하시겠습니까?"
4. 시스템 오류
에이전트: "일시적인 오류가 발생했습니다.
잠시 후 다시 시도해 주시거나,
긴급한 경우 헬프데스크 (1234)로 연락 주세요."
5. 알 수 없는 의도 (Unknown Intent) - 단계별 응답
사용자의 질문을 이해하지 못했을 때, 시도 횟수에 따라 점진적으로 도움을 제공합니다.
1차 시도 - 공감 + 재확인 요청
사용자: "그거 좀 알려줘"
에이전트:
"음, 제가 정확히 이해했는지 확실하지 않네요 😊
혹시 이런 것들을 찾고 계신가요?
• 휴가 신청 방법
• 경비 처리 절차
• 사내 시스템 사용법
• 인사 규정 확인
위 항목 중 하나를 선택하시거나,
다른 방식으로 질문해 주시면 더 정확히 도와드릴게요!"
2차 시도 - 카테고리 제시 + 검색 제안
사용자: "아니 그게 아니고..."
에이전트:
"앗, 제가 잘못 이해했나 봐요. 다시 한번 도와드릴게요! 😄
저희 업무 도우미는 이런 분야를 잘 알고 있어요:
📋 인사/복리후생
휴가, 연차, 복지 제도 등
💰 급여/경비
급여 조회, 경비 처리 등
🔧 IT 지원
시스템 접속, 비밀번호, 장비 등
📄 문서/정책
회사 규정, 업무 매뉴얼 등
원하시는 분야를 선택하시거나,
'○○에 대해 알려줘' 형식으로 질문해 주세요.
💡 팁: 구체적으로 물어보실수록 더 정확한 답변을 드릴 수 있어요!"
3차 시도 - 직접 입력 유도 + 도움 리소스 제공
사용자: "찾는게 없는데"
에이전트:
"제가 아직 배우는 중이라 원하시는 답변을 드리지 못해 죄송해요 🙏
이렇게 도움을 드릴 수 있어요:
1️⃣ 키워드로 검색해 보세요
예: '재택근무', '출장비', '연차 계산'
2️⃣ 자주 묻는 질문 보기
[FAQ 바로가기] 👈 인기 질문 Top 20
3️⃣ 사내포털에서 직접 검색
[통합검색 바로가기] 👈 모든 문서 검색
4️⃣ 부서별 문의처 안내
• 인사팀: hr@company.com / 내선 1234
• IT팀: ithelp@company.com / 내선 5678
• 총무팀: admin@company.com / 내선 9012
저도 계속 배우고 있으니, 다음엔 더 잘 도와드릴게요! 💪
다른 질문이 있으시면 언제든 말씀해 주세요."
구현 예시 (YAML):
# 알 수 없는 의도 처리 토픽
- kind: ConditionGroup
id: checkAttemptCount
condition: System.UnknownIntentCount = 1
actions:
- kind: SendMessage
id: firstAttempt
message: |
음, 제가 정확히 이해했는지 확실하지 않네요 😊
혹시 이런 것들을 찾고 계신가요?
• 휴가 신청 방법
• 경비 처리 절차
• 사내 시스템 사용법
• 인사 규정 확인
- kind: Question
id: suggestCategories
interactionType: Choice
prompt: "원하시는 항목을 선택하시거나, 다른 방식으로 말씀해 주세요"
choices:
- value: "leave"
display: "🏖️ 휴가/연차"
- value: "expense"
display: "💰 경비 처리"
- value: "it"
display: "🔧 IT 지원"
- value: "policy"
display: "📋 규정/정책"
- value: "other"
display: "💬 다시 질문하기"
- kind: ConditionGroup
condition: System.UnknownIntentCount = 2
actions:
- kind: SendMessage
id: secondAttempt
message: |
앗, 제가 잘못 이해했나 봐요. 다시 한번 도와드릴게요! 😄
저희 업무 도우미는 이런 분야를 잘 알고 있어요:
📋 인사/복리후생 - 휴가, 연차, 복지 제도 등
💰 급여/경비 - 급여 조회, 경비 처리 등
🔧 IT 지원 - 시스템 접속, 비밀번호, 장비 등
📄 문서/정책 - 회사 규정, 업무 매뉴얼 등
원하시는 분야를 선택하시거나,
'○○에 대해 알려줘' 형식으로 질문해 주세요.
- kind: ConditionGroup
condition: System.UnknownIntentCount >= 3
actions:
- kind: SendMessage
id: thirdAttempt
message: |
제가 아직 배우는 중이라 원하시는 답변을 드리지 못해 죄송해요 🙏
이렇게 도움을 드릴 수 있어요:
1️⃣ 키워드로 검색해 보세요
예: '재택근무', '출장비', '연차 계산'
2️⃣ 자주 묻는 질문 보기
[FAQ 바로가기] 👈 인기 질문 Top 20
3️⃣ 사내포털에서 직접 검색
[통합검색 바로가기] 👈 모든 문서 검색
4️⃣ 부서별 문의처 안내
• 인사팀: hr@company.com / 내선 1234
• IT팀: ithelp@company.com / 내선 5678
• 총무팀: admin@company.com / 내선 9012
- kind: SetVariable
variable: System.UnknownIntentCount
value: = 0 # 카운터 리셋
추가 CUX 팁:
✅ DO - 좋은 예시
- 긍정적이고 친근한 톤 유지 ("음~", "😊")
- 사과는 간단하게, 해결책에 집중
- 구체적인 선택지 제공 (버튼, 예시)
- 이모지로 친근감 표현 (과하지 않게)
- "저도 배우고 있어요" → 성장하는 이미지
- 다음 액션을 명확히 제시
❌ DON'T - 피해야 할 표현
- ❌ "이해하지 못했습니다" (너무 딱딱함)
- ❌ "다시 입력하세요" (명령조)
- ❌ "잘못된 질문입니다" (사용자 탓)
- ❌ "서비스 범위를 벗어났습니다" (거절)
- ❌ "담당자에게 문의하세요" (책임 회피)
- ❌ 여러 번 같은 답변 반복
감정 단계별 대응:
1차: 😊 "이해 못했지만 도와드릴게요!" (희망적)
→ 바로 해결 가능할 것 같은 기대
2차: 😄 "다시 시도해볼게요!" (긍정적 끈기)
→ 함께 찾아가는 느낌
3차: 🙏 "배우는 중이에요, 이건 도와드릴 수 있어요" (솔직함 + 대안)
→ 한계는 인정하되 다른 방법 제시
2.2 사용 자 경험
Conversation Start (대화 시작 CUX)
대화 시작 시 사용자에게 명확한 기대치를 설정하고 좋은 첫인상을 제공합니다.
CUX 핵심 원칙:
1. 환영 메시지 (Welcome Message)
좋은 환영 메시지는 다음을 포함해야 합니다:
# Conversation Start 토픽 예시
- kind: SendMessage
id: welcomeMessage
message: |
안녕하세요! 👋 저는 HR 도우미 Copilot입니다.
제가 도와드릴 수 있는 것들:
✅ 휴가/연차 신청 방법
✅ 복리후생 정책 안내
✅ 급여 관련 문의 연결
✅ 회사 규정 및 정책 검색
무엇을 도와드릴까요?
환영 메시지 체크리스트:
- 봇의 이름/역할 명확히 소개
- 할 수 있는 것 구체적으로 나열 (3-5개)
- 할 수 없는 것 명시 (선택적)
- 친근하고 전문적인 톤 유지
- 명확한 행동 유도 (Call-to-Action)
2. 페르소나 설정
일관된 대화 스타일과 톤을 유지합니다:
additionalInstructions: |
# 페르소나
- 당신은 친절하고 전문적인 HR 도우미입니다
- 존댓말을 사용하되 격식을 차리지 않고 친근하게 대화합니다
- 이모지를 적절히 사용하여 친근감을 높입니다 (남용하지 않음)
# 어조
- 긍정적이고 도움이 되는 태도
- 명확하고 간결한 표현
- 전문 용어는 쉽게 풀어서 설명
# 제약사항
- 개인의 급여 정보는 직접 제공하지 않음
- 법적 자문은 제공하지 않음
- 불확실한 정보는 추측하지 않음
3. 컨텍스트 수집
초기 대화에서 필요한 정 보를 자연스럽게 수집합니다:
# 사용자 인증 확인
- kind: ConditionGroup
condition: System.User.IsAuthenticated = false
actions:
- kind: SendMessage
message: |
더 정확한 도움을 드리기 위해 로그인이 필요합니다.
[로그인하기] 버튼을 클릭해 주세요.
# 부서 정보 확인 (필요시)
- kind: Question
id: getDepartment
condition: IsBlank(Global.UserDepartment)
prompt: "어느 부서에 소속되어 계신가요?"
interactionType: Choice
choices:
- "영업"
- "마케팅"
- "개발"
- "인사"
- "기타"
4. 빠른 액션 제공
자주 사용되는 기능에 빠르게 접근할 수 있도록 합니다:
- kind: SendMessage
id: quickActions
message: |
빠른 메뉴를 선택하시거나, 자유롭게 질문해 주세요:
- kind: Question
id: mainMenu
interactionType: Choice
prompt: "원하시는 항목을 선택해 주세요"
choices:
- value: "vacation"
display: "🏖️ 휴가 신청"
- value: "benefits"
display: "💰 복리후생 안내"
- value: "policy"
display: "📋 회사 규정 검색"
- value: "support"
display: "🎫 지원 요청"
- value: "other"
display: "💬 직접 질문하기"
5. 프로그레시브 디스클로저 (Progressive Disclosure)
모든 정보를 한 번에 보여주지 않고 단계적으로 공개합니다:
# 나쁜 예 ❌
message: |
휴가 신청은 다음 절차를 따릅니다:
1. 인사포털 로그인
2. 휴가 메뉴 선택
3. 휴가 유형 선택
4. 날짜 입력
5. 사유 입력
6. 상사 승인자 선택
7. 제출 버튼 클릭
8. 이메일 확인
[상세 내용 10줄 이어짐...]
# 좋은 예 ✅
message: |
휴가 신청은 3단계로 간단합니다:
1️⃣ 인사포털 접속
2️⃣ 휴가 신청 메뉴
3️⃣ 정보 입력 후 제출
각 단계별 상세 안내가 필요하신가요?
[단계별 보기] [바로 신청하기] [동영상 보기]
6. 오류 예방 및 복구
사용자가 잘못된 경로로 가지 않도록 안내합니다:
# 명확하지 않은 입력 처리
- kind: ConditionGroup
condition: Topic.Intent = "Unknown"
actions:
- kind: SendMessage
message: |
잘 이해하지 못했습니다. 다시 한번 말씀해 주시겠어요?
이런 질문들을 해보세요:
• "휴가 신청 방법"
• "연차 잔여일수 확인"
• "복리후생 제도"
또는 아래 메뉴에서 선택해 주세요:
[메뉴 보기]
# 재시작 옵션 항상 제공
- kind: SendMessage
message: |
처음부터 다시 시작하려면 "다시 시작" 또는 "처음으로"를 입력하세요.
7. 진행 상황 표시
여러 단계로 이루어진 프로세스의 경우 진행 상황을 표시합니다:
- kind: SendMessage
message: |
📍 휴가 신청 (1/3단계)
휴가 유형을 선택해 주세요:
• 연차
• 병가
• 경조사 휴가
- kind: SendMessage
message: |
📍 휴가 신청 (2/3단계)
날짜를 선택해 주세요...
- kind: SendMessage
message: |
✅ 완료!
휴가 신청이 제출되었습니다.
승인자에게 알림이 전송되었습니다.
8. 피드백 및 개선
대화 종료 시 피드백을 수집합니다:
# Conversation End
- kind: SendMessage
message: |
도움이 되셨나요?
- kind: Question
id: satisfaction
interactionType: Choice
prompt: "오늘 경험을 평가해 주세요"
choices:
- value: 5
display: "⭐⭐⭐⭐⭐ 매우 만족"
- value: 4
display: "⭐⭐⭐⭐ 만족"
- value: 3
display: "⭐⭐⭐ 보통"
- value: 2
display: "⭐⭐ 불만족"
- value: 1
display: "⭐ 매우 불만족"
- kind: ConditionGroup
condition: Topic.satisfaction <= 3
actions:
- kind: Question
id: feedbackComment
prompt: "어떤 점이 개선되었으면 좋을까요?"
interactionType: TextInput
CUX Best Practices 체크리스트:
대화 시작 (Conversation Start)
- 명확한 환영 메시지
- 봇의 역할과 기능 소개
- 빠른 액션 버튼 제공
- 자연스러운 첫 질문 유도
대화 중 (During Conversation)
- 짧고 명확한 응답 (2-3문장)
- 진행 상황 표시
- 항상 다음 단계 제시
- 에스컬레이션 경로 명확
대화 종료 (Conversation End)
- 요약 제공
- 피드백 수집
- 추가 도움 제안
- 명확한 종료 메시지
에러 처리
- 친근한 에러 메시지
- 대안 제시
- 쉬운 복구 방 법
- 사람 지원으로 에스컬레이션
접근성
- 명확한 언어 사용
- 이모지 적절히 활용
- 버튼과 텍스트 입력 모두 지원
- 스크린 리더 호환
자연스러운 대화
대화 흐름이 자연스럽고 이해하기 쉬운지 평가합니다.
대화 설계 원칙:
1. 명확하고 간결한 표현
- ❌ 나쁜 예: "귀하께서 요청하신 사항과 관련하여 당사의 규정집 3.2조 항목을 참조하시면..."
- ✅ 좋은 예: "휴가 신청은 3단계로 진행됩니다. 먼저 시스템에 로그인해 주세요."
2. 단계별 안내
1단계: 인사포털(portal.company.com)에 접속
2단계: '휴가 신청' 메뉴 선택
3단계: 날짜와 사유 입력 후 제출
각 단계에서 도움이 필요하시면 말씀해 주세요.
3. 확인 및 피드백
에이전트: "휴가 신청 방법을 안내해 드렸습니다. 도움이 되셨나요?"
[도움됨] [추가 질문] [담당자 연결]
4. 맥락 유지
사용자: "휴가 신청하려고"
에이전트: "네, 휴가 신청을 도와드리겠습니다. 어떤 종류의 휴가인가요?"
사용자: "연차요"
에이전트: "연차 휴가 신청이시군요. (이전 맥락 유지) ..."
응답 시간
사용자가 수용 가능한 응답 시간 내 답변을 제공합니다.
응답 시간 목표:
| 유형 | 목표 시간 | 설명 |
|---|---|---|
| 즉시 응답 | < 2초 | 간단한 FAQ |
| 일반 응답 | < 5초 | 문서 검색 |
| 복잡한 쿼리 | < 10초 | 데이터 조회 |
| 타임아웃 | 15초 | 이상 시 오류 처리 |
성능 최적화 전략:
1. 캐싱 활용
- 자주 조회되는 데이터는 캐싱 처리
- FAQ는 미리 준비된 답변 사용
2. 청크 크기 조정
참조 자료 설정:
- Chunk size: 1000 tokens
- Overlap: 100 tokens
- Max chunks retrieved: 5
3. 프로그레스 표시
"문서를 검색하고 있습니다..." (즉시 표시)
"관련 정보를 찾았습니다. 답변을 준비 중입니다..." (5초 후)
[최종 답변] (8초 후)
응답 시간 모니터링:
customEvents
| where name == "MessageReceived"
| extend ResponseTime = todouble(customDimensions["responseTime"])
| summarize
AvgTime = avg(ResponseTime),
P50 = percentile(ResponseTime, 50),
P95 = percentile(ResponseTime, 95),
P99 = percentile(ResponseTime, 99)
| where P95 > 5000 // 5초 이상 경고
에스컬레이션
해결 불가능한 문제에 대한 명확한 에스컬레이션 경로를 제공합니다.
에스컬레이션 트리거:
- 3회 이상 의도 파악 실패
- 사용자가 명시적으로 담당자 요청
- 범위 외 질문 또는 복잡한 문제
- 민감한 정보 처리 필요
- 불만족 피드백 수신
에스컬레이션 옵션:
1. 담당자 연결
"전문 상담원과 연결해 드리겠습니다.
현재 대기 인원: 2명 (예상 대기 시간: 3분)
[상담원 연결] [콜백 예약] [이메일 문의]"
2. 티켓 생성
"해당 문의는 전문가 검토가 필요합니다.
티켓을 생성하여 담당팀에 전달하겠습니다.
티켓 번호: #2024-11-001
담당팀: IT 헬프데스크
예상 처리 시간: 24시간 이내
진행 상황은 이메일로 알려드립니다."
3. 자기주도 해결
"다음 리소스가 도움이 될 수 있습니다:
📄 상세 가이드 문서
🎥 튜토리얼 비디오
💬 커뮤니티 포럼
또는 담당자 연결을 원하시나요?"
에스컬레이션 플로우 예시:
actions:
- kind: Question
id: confirmEscalation
interactionType: Choice
prompt: "담당자 연결을 원하시나요?"
choices:
- "네, 연결해 주세요"
- "티켓 생성"
- "나중에 연락 받기"
- kind: Branch
condition: Topic.confirmEscalation = "네, 연결해 주세요"
actions:
- kind: TransferToAgent
context: "사용자 문의 요약 전달"
다음 단계
품질 관리 기준을 수립했다면, 다음은 보안 및 규정 준수를 검토하세요:
➡️ 다음: 보안 및 규정 준수 - 데이터 보안 및 컴플라이언스
네비게이션
| ← 이전: 목표 정의 | 📚 목차로 | 다음: 보안 및 규정 준수 → |
|---|
문서 정보
- 버전: 1.0.0
- 최종 업데이트: 2024-11-27
- 다음 검토: 2025-02-27