본문으로 건너뛰기

2. 품질 관리

Go-Live 고려 사항 > 품질 관리

📋 목차


개요

품질 관리는 에이전트의 성공적인 운영을 위한 핵심 요소입니다. 정확한 응답, 일관성, 그리고 우수한 사용자 경험을 보장해야 합니다.


2.1 응답 품질

정확성 테스트

다양한 시나리오에서 응답의 정확성을 체계적으로 검증합니다.

테스트 케이스 작성:

카테고리: 문서 검색
질문: "2024년 연차 휴가 규정이 어떻게 되나요?"
기대 답변: SharePoint의 HR 정책 문서에서 정확한 연차 규정 인용
검증 항목:
✓ 올바른 문서 참조
✓ 최신 정보 제공 (2024년)
✓ 명확하고 이해하기 쉬운 설명

테스트 매트릭스:

시나리오 유형테스트 케이스 수통과 기준
기본 FAQ50+95% 정확도
문서 검색30+90% 정확도
데이터 조회20+100% 정확도
복합 질문15+85% 정확도

일관성 확인

동일하거나 유사한 질문에 대해 일관된 답변을 제공하는지 확인합니다.

검증 방법:

  1. 동일 질문을 여러 번 반복하여 응답 비교
  2. 표현만 다른 유사 질문으로 테스트
  3. 다른 시간대/세션에서 동일 질문 테스트

예시:

질문 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