1강

1일차 — AI Agent

📝 실시간 메모 노션 https://app.notion.com/p/KT-DS-3dc4b65410c88078986dc7773a805651 ↗

강의자료 (PDF)

1일차 강의자료 PDF입니다. 아래 링크에서 다운로드해 강의 중 함께 보시면 됩니다.

📎 1일차 강의자료 (PDF) Project404 강의 · 1일차 ⬇ 다운로드

실습 더미데이터 — 개요

1일차 실습은 외부 서비스(구글 시트·Gmail·슬랙 등) 없이 로컬에서만 AI Agent 를 구성할 수 있게 재구성했습니다. 각 예제는 아래 4가지이며, 데이터는 표로 미리 보고 CSV 로 다운로드 할 수 있습니다.

  • 실습 1 — 휴가·근태 문의 상담 챗봇 (사원 CSV + 사내 규정 md)
  • 실습 2 — 영업팀 미팅 준비 어시스턴트 (미팅 CSV + 연락처 CSV)
  • 실습 3 — 컴플레인 자동 처리 (접수 CSV + 콘솔 알림)
  • 실습 4 — 이력서 자동 검수 (지원자 CSV + 이력서 PDF 5종)
💡
n8n 자료의 5강 예제 4가지 를 Google Sheets/Contacts/Calendar/Gmail/Slack 없이 로컬 파일 + 콘솔 출력 만으로 동일한 흐름을 재현하도록 각색한 버전입니다. 원본은 n8n 5강 참고.

실습 1 — 인사팀 휴가·근태 관리 AI Agent

사원 정보 · 연차 사용내역 · 근태 · 팀 · 공휴일을 CSV 6개로 두고, AI Agent 가 자연어 질문을 받아 SQLite 조회 툴 로 답합니다. 아래 CSV 를 프로젝트 폴더에 놓고 실습 방향성 프롬프트 를 Claude/Cursor 에 그대로 넣으세요.

employees.csv — 사원 마스터 (8명)

📊 시트 데이터 · 8행 × 9열
사번이름부서직급입사일연차_총부여일연차_사용일연차_잔여일반차_사용일
E1001홍길동영업1팀과장2019-03-0415782
E1002김철수개발2팀대리2021-07-01153120
E1003이영희마케팅팀차장2015-09-14201554
E1004박민수영업1팀사원2024-01-1011291
E1005최지원인사팀부장2010-05-22222020
E1006정수빈개발1팀대리2020-11-03151053
E1007강태현디자인팀과장2017-06-18164121
E1008윤서연경영지원팀사원2024-08-017070

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 employees.csv 사원 마스터 · 8명 ⬇ 다운로드

leave_history.csv — 연차·반차 신청 내역 (12건)

📊 시트 데이터 · 6행 × 9열
신청ID사번신청일휴가유형시작일종료일사용일수사유상태
L2026001E10012026-02-10연차2026-03-042026-03-052개인사유승인
L2026002E10012026-05-02반차(오후)2026-05-082026-05-080.5병원 진료승인
L2026003E10022026-06-14연차2026-06-202026-06-201경조사승인
L2026007E10052026-07-01연차2026-07-142026-07-2510여름휴가승인
L2026011E10072026-09-01반차(오전)2026-09-082026-09-080.5자녀 병원 동행반려
L2026012E10082026-09-10연차2026-09-252026-09-251결혼기념일신청중

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 leave_history.csv 휴가 신청 내역 · 12건 ⬇ 다운로드

attendance.csv — 출퇴근 기록 (일별)

📊 시트 데이터 · 6행 × 7열
사번근무일출근시각퇴근시각근무형태지각여부비고
E10012026-09-0108:5218:11정상N
E10012026-09-0209:1518:20정상Y지하철 지연
E10022026-09-0109:0118:33정상Y
E10032026-09-0108:4017:50정상N
E10042026-09-0109:1218:00정상Y교통 정체
E10062026-09-0208:5918:00재택N

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 attendance.csv 출퇴근 기록 ⬇ 다운로드

teams.csv — 부서 · 정원

📊 시트 데이터 · 5행 × 6열
부서코드부서명팀장사번팀장명정원현원
D01영업1팀E1001홍길동64
D02개발1팀E1006정수빈108
D03개발2팀E1002김철수87
D04마케팅팀E1003이영희54
D05인사팀E1005최지원43

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 teams.csv 부서 · 정원 · 팀장 ⬇ 다운로드

holidays.csv — 2026 공휴일

📊 시트 데이터 · 5행 × 4열
날짜공휴일명종류대체휴일
2026-01-01신정법정공휴일N
2026-05-05어린이날법정공휴일N
2026-08-15광복절법정공휴일N
2026-09-25추석법정공휴일N
2026-12-25성탄절법정공휴일N

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 holidays.csv 공휴일 목록 ⬇ 다운로드

leave_policy.md — 사내 휴가·근태 규정

📎 leave_policy.md 사내 규정 (RAG 컨텍스트) ⬇ 다운로드
💡
특색 — 규정(md) 기반 판단. Claude 가 수치 계산은 SQLite 를 반드시 조회 하고, 규정 해석은 leave_policy.md 를 반드시 참조 하도록 강제. RAG 의 가장 얇은 형태 (문서 1개 read tool).
📋 실습 1 — 방향성 프롬프트 (규정 참조형 Agent)
Python + Flask + Vanilla HTML + SQLite 환경에서 인사팀 휴가·근태 관리 AI Agent 를 만들어줘.

## 이 Agent 의 특색
- 데이터(사원·휴가·근태)는 SQLite 조회로, 규정 해석은 leave_policy.md 원문 참조로 처리
- Claude 가 규정을 임의 해석/추측 못 하도록, 반드시 read_policy 툴을 호출한 결과만 근거로 답하게 유도

## 요구사항
- CSV 5개(employees, leave_history, attendance, teams, holidays)를 SQLite 로 구성
- leave_policy.md 는 파일 그대로 두고 read_policy 툴이 원문 반환
- Claude API + Anthropic SDK Tool Calling (LangChain X)
- Vanilla HTML 챗 UI · Flask 백엔드

## Agent Tool
- get_employee(name_or_id) — 직원 기본 정보
- get_leave_balance(emp_id) — 잔여 연차/반차
- list_leaves(emp_id, from, to) — 휴가 사용 내역
- get_attendance(emp_id, date) — 특정일 근태
- summarize_attendance(emp_id, from, to) — 지각/재택/정상 카운트
- register_leave(emp_id, type, start, end, reason) — 휴가 신청 INSERT
- read_policy() — leave_policy.md 원문 반환
- list_holidays(from, to) — 해당 기간 공휴일

## 시스템 프롬프트 규칙 (필수)
- 잔여일수·사용일수는 반드시 툴로 조회, 절대 추측 X
- 규정 해석 질문(반차 몇 시간? 반려 조건?)이 나오면 반드시 read_policy 를 먼저 호출
- 답변에 규정 인용 시 원문의 해당 문장을 그대로 인용

먼저 CSV 구조를 확인하고 DB Schema 설계 → MVP 까지 한 번에 완성해줘.
❓ 실습 1 — Agent 에 던져볼 예상 질문 (난이도 순)
# 단순 조회 (툴 1개)
1. 김철수 연차 몇 개 남았어?
2. E1003 이번 달 지각 몇 번 했어?
3. 홍길동 3월에 쓴 연차 알려줘
4. 2026년 9월 공휴일 며칠이야?

# 규정 참조가 필요한 질문 (read_policy 유도)
5. 반차는 몇 시간이야? 승인 조건은?
6. 잔여 연차 3일 이하면 알림이 오는지 규정에 있어?
7. 12월 31일까지 안 쓴 연차 이월 되는지 알려줘
8. 병가는 연차랑 어떻게 다른지 규정 기반으로 설명해줘

# 툴 2~3개 연쇄 (Agent Loop 검증)
9. 이영희 씨 반차 사용 몇 번인지 규정상 반차 정의랑 같이 알려줘
10. E1005 여름휴가 사용 후 잔여 연차, 그리고 남은 연차로 갈 수 있는 최장 연속휴가일수 알려줘
11. 다음 주에 공휴일 있어? 있으면 그 주에 연차 신청한 사람 몇 명이야?

# 쓰기 (register_leave)
12. E1008 9월 25일 연차 신청해줘
13. 홍길동 씨 이번 주 목요일 오후 반차 등록해줘. 사유는 병원 진료

# Agent 가 되물어야 하는 애매한 질문
14. 김민수 연차 알려줘 (사번 없이 이름만 · 동명이인 상황 처리 확인)
15. 다음 주 화요일 휴가 등록해줘 (누구인지 안 밝힘 · 되물어야 정답)
💡
고도화 방향 — 잔여 연차 3일 이하 자동 알림 스케줄러, 승인 워크플로우(팀장 승인 큐), 부서별 잔여 연차 리더보드, 지각 3회 이상 시 팀장에게 슬랙 요약.

실습 2 — 영업팀 미팅 준비 어시스턴트

구글 캘린더·연락처 대신 CSV 5개 를 SQLite 로 넣고, 자연어로 오늘/내일 미팅 브리핑을 뽑는 AI Agent.

meetings.csv — 미팅 6건

📊 시트 데이터 · 4행 × 8열
미팅ID날짜시작시간종료시간제목참석자장소비고
M20260012026-09-1610:0011:00신규 클라이언트 A사 킥오프홍길동;박지훈본사 3층 회의실계약서 검토
M20260022026-09-1614:0015:303분기 매출 리뷰김철수;이영희;최지원본사 5층 대회의실분기 실적 보고
M20260032026-09-1709:3010:30B사 제안서 발표홍길동;정수빈B사 본사PPT 15장
M20260052026-09-1811:0012:00C사 계약 협의박민수;최지원C사 본사단가 협상

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 meetings.csv 미팅 목록 · 6건 ⬇ 다운로드

attendees.csv — 미팅별 참석자 상세

📊 시트 데이터 · 4행 × 5열
미팅ID참석자소속역할참석확정
M2026001홍길동내부-영업1팀주관Y
M2026001박지훈외부-A주식회사클라이언트Y
M2026003이수민외부-B솔루션즈의사결정자Y
M2026005정재호외부-C산업의사결정자Y

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 attendees.csv 미팅×참석자 매핑 ⬇ 다운로드

contacts.csv — 외부 연락처

📊 시트 데이터 · 4행 × 7열
이름회사직책이메일전화최근컨택비고
박지훈A주식회사구매팀장jhpark@a-corp.example010-1111-22222026-09-01오전 미팅 선호
이수민B솔루션즈CTOsmlee@b-sol.example010-2222-33332026-08-27기술 데모 요청함
정재호C산업대표이사jhjung@c-ind.example010-3333-44442026-08-15의사결정권자
윤민석E테크개발팀장msyoon@e-tech.example010-5555-66662026-07-30POC 논의 중

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 contacts.csv 외부 연락처 · 6명 ⬇ 다운로드

meeting_rooms.csv — 회의실 마스터

📊 시트 데이터 · 4행 × 7열
회의실ID회의실명층수정원화상장비화이트보드비고
R101본사 3층 회의실3F8YY
R102본사 5층 대회의실5F20YY분기 리뷰 전용
R103본사 7층 임원실7F12YN임원 회의 전용
R201디자인팀 회의실4F6NY디자인팀 우선

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 meeting_rooms.csv 회의실 마스터 ⬇ 다운로드

sales_notes.csv — 최근 영업 노트

📊 시트 데이터 · 4행 × 7열
노트ID작성일회사담당자단계메모다음액션
N0012026-08-15A주식회사박지훈계약체결전단가 협의 마무리 필요. 결제조건은 30일 후 지불로 협의됨계약서 초안 송부
N0022026-08-20B솔루션즈이수민POC진행POC 결과 만족. 확장 도입 논의 예정제안서 v2 발송
N0032026-08-27C산업정재호계약체결전단가 5% 조정 요청. 임원 승인 필요단가 재검토
N0072026-09-12A주식회사박지훈계약체결전계약서 검토 완료. 서명 대기서명 일정 확정

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 sales_notes.csv 영업 노트 · 7건 ⬇ 다운로드

past_meetings.csv — 과거 미팅 이력

📊 시트 데이터 · 4행 × 6열
미팅ID날짜회사주제결론후속액션여부
P20260012026-01-15A주식회사POC 킥오프3개월 진행 확정Y
P20260022026-04-22A주식회사POC 리뷰성공적 종료Y
P20260032026-06-10B솔루션즈기술 데모긍정적 반응Y
P20260042026-08-01C산업제안서 발표의사결정 대기Y

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 past_meetings.csv 과거 미팅 이력 ⬇ 다운로드
💡
특색 — 다중 테이블 JOIN + 결과물 생성. 실습 1이 "질문에 답변" 이었다면, 이건 여러 툴을 조합해 브리핑 마크다운 문서를 반환 하는 게 목표. Agent 가 스스로 6개 테이블을 join 해 문서를 조립.
📋 실습 2 — 방향성 프롬프트 (문서 생성형 Agent)
Python + Flask + Vanilla HTML + SQLite 환경에서 영업팀 미팅 준비 AI Agent 를 만들어줘.

## 이 Agent 의 특색
- 최종 결과물이 <b>미팅 브리핑 마크다운 문서</b> — 참석자·의제·회의실·과거이력·다음액션을 한 페이지에 조립
- Agent 가 여러 테이블(미팅→참석자→연락처→과거미팅→영업노트)을 스스로 순차 조회해 join
- 단순 QA 가 아니라 <b>구조화된 결과물 반환</b> 이 목적

## 요구사항
- CSV 6개(meetings, attendees, contacts, meeting_rooms, sales_notes, past_meetings)를 SQLite 로 구성
- Claude API + Anthropic SDK Tool Calling · Vanilla HTML 챗 UI · Flask 백엔드

## Agent Tool
- list_meetings(date) — 특정 날짜의 미팅 목록
- get_attendees(meeting_id) — 참석자 리스트
- get_contact(name) — 외부 참석자 연락처
- get_room(room_name) — 회의실 정보
- search_sales_notes(company) — 회사별 최근 영업 노트
- past_meetings_with(company) — 해당 회사와의 과거 미팅 이력
- check_room_availability(date, time_range) — 회의실 가용성

## 결과물 포맷 (Agent 가 반드시 이 형태로 반환)
```
# 📅 {date} 미팅 브리핑

## 1. {미팅 제목} ({시작}~{종료} @ {장소})
**참석자**
- 홍길동 (내부·주관)
- 박지훈 (외부·A주식회사 구매팀장 · jhpark@… · 010-…)

**회사 컨텍스트**
- 최근 영업 노트: {sales_notes 요약}
- 과거 미팅: {past_meetings 요약}

**추천 다음액션**: …
```

## 시스템 프롬프트 규칙
- 브리핑 요청 시 반드시 위 마크다운 포맷으로 반환
- 외부 참석자는 반드시 get_contact 호출해서 연락처 붙임
- 회사가 언급되면 반드시 search_sales_notes + past_meetings_with 를 함께 호출

먼저 CSV 구조 확인 → DB Schema 설계 → MVP 까지 완성해줘.
❓ 실습 2 — Agent 에 던져볼 예상 질문
# 단일 조회
1. 2026-09-17 미팅 목록 알려줘
2. 본사 5층 대회의실 정원 몇 명이야?
3. 박지훈 씨 연락처 알려줘

# 브리핑 문서 생성 (Tool 4~5개 연쇄)
4. 2026-09-16 미팅 브리핑 만들어줘
5. 내일 있는 외부 미팅만 브리핑해줘
6. 2026-09-17 B사 제안서 발표 브리핑 만들어줘 — 참석자·과거이력·다음액션 다 포함해서

# 회사 컨텍스트 요약
7. A주식회사와 최근 어떤 대화가 오갔어?
8. C산업 지금 어느 단계야? 다음에 뭘 해야 해?
9. B솔루션즈 POC 결과 어땠는지 정리해줘

# 회의실 가용성
10. 2026-09-16 오전 10시에 본사 3층 회의실 비어?
11. 내일 오후에 화상 장비 되는 8인실 어디가 비어?

# 종합 판단 (Agent 가 여러 정보 조합)
12. C사 계약 협의 미팅 전에 내가 알아야 할 것 정리해줘
13. 다음 주 미팅 중 의사결정자가 참석하는 미팅만 우선순위대로 알려줘
14. 과거 A사와 미팅 4번 했는데, 이번 미팅은 이전이랑 어떻게 다를 것 같아?

# 애매한 요청 (되물어야 정답)
15. 미팅 브리핑 만들어줘 (날짜 안 밝힘)
💡
고도화 방향 — 브리핑 PDF 자동 출력, 미팅 30분 전 자동 리마인더, 회의실 자동 예약, 미팅 후 회의록 요약을 past_meetings 에 자동 append.

실습 3 — 컴플레인 자동 접수·분류·알림 Agent

폼·구글시트·Slack 없이 CSV 6개 를 SQLite 로 넣고, 자연어 컴플레인을 분류·저장·알림하는 AI Agent.

complaints.csv — 초기 접수 5건

📊 시트 데이터 · 3행 × 9열
접수ID접수일시고객명연락처카테고리내용긴급도상태담당자
C202609100012026-09-10 09:12이수정010-1000-0001배송지연주문 후 5일 지났는데 아직 배송 시작 안됨. 주문번호 ORD-88123중처리중김상담
C202609110012026-09-11 14:33박현우010-1000-0002결제오류카드 결제 중복 청구됨. 2회 결제 확인 필요.상미처리미배정
C202609120012026-09-12 10:08최유나010-1000-0003상품불량제품 포장 뜯자마자 화면 깨져있음. 교환 요청.상처리중이지원

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 complaints.csv 컴플레인 접수 (에이전트가 append) ⬇ 다운로드

complaint_categories.csv — 카테고리·SLA·담당팀 매핑

📊 시트 데이터 · 5행 × 5열
카테고리ID카테고리명기본긴급도담당팀SLA_시간
CAT01배송지연중물류CS팀24
CAT02결제오류상결제운영팀4
CAT03상품불량상품질관리팀8
CAT04환불요청하정산팀72
CAT05고객응대상CS리더팀4

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 complaint_categories.csv 카테고리 마스터 (Agent 분류 근거) ⬇ 다운로드

cs_agents.csv — 상담원 배정 가능 목록

📊 시트 데이터 · 4행 × 6열
상담원ID이름팀전문카테고리현재처리건수최대동시처리
CS01김상담물류CS팀배송지연;환불요청35
CS02이지원품질관리팀상품불량24
CS03박응대CS리더팀고객응대;이벤트문의46
CS04정결제결제운영팀결제오류13

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 cs_agents.csv 상담원 · 처리 가용성 ⬇ 다운로드

sla_rules.csv — 긴급도별 응답·해결 규정

📊 시트 데이터 · 3행 × 5열
긴급도1차응답_시간해결목표_시간알림채널에스컬레이션
상14SMS+콘솔팀장 즉시
중424콘솔팀장 익일
하2472콘솔없음

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 sla_rules.csv SLA 규정 ⬇ 다운로드

response_templates.csv — 카테고리별 응답 템플릿

📊 시트 데이터 · 4행 × 4열
템플릿ID카테고리단계본문
T01배송지연접수{고객명}님 배송 지연으로 불편을 드려 죄송합니다...
T02결제오류접수{고객명}님 결제 관련 이슈 접수되었습니다...
T03상품불량접수{고객명}님 상품 불량으로 인한 불편에 사과드립니다...
T05고객응대접수{고객명}님 상담 과정에서 불편을 드린 점 진심으로 사과드립니다...

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 response_templates.csv 응답 템플릿 ⬇ 다운로드

escalation_history.csv — 과거 에스컬레이션 이력

📊 시트 데이터 · 3행 × 6열
이력ID접수ID에스컬레이션일시에스컬레이션대상사유결과
E001C202609110012026-09-11 15:00결제운영팀장중복결제 발생 · 상 긴급도팀장 배정 완료
E002C202609120012026-09-12 11:00품질관리팀장포장불량 · 사진 접수교환 승인
E005C202509200012025-09-20 16:00물류CS팀장대량 배송지연전체 SMS 발송

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 escalation_history.csv 에스컬레이션 이력 ⬇ 다운로드
💡
특색 — 분류 + 배정 + 부수효과(사이드이펙트). 실습 1·2가 READ 중심이었다면, 이건 한 요청에 여러 쓰기·알림이 연쇄 로 일어남: 분류 → 상담원 배정 → INSERT → SLA 확인 → (긴급이면) 알림. Agent Loop 의 진짜 힘이 나오는 시나리오.
📋 실습 3 — 방향성 프롬프트 (부수효과 연쇄형 Agent)
Python + Flask + Vanilla HTML + SQLite 환경에서 컴플레인 자동 접수 AI Agent 를 만들어줘.

## 이 Agent 의 특색
- 자연어 컴플레인 한 문장 입력 → Agent 가 <b>5~7개 툴을 자동으로 연쇄 호출</b>: 카테고리 조회 → 상담원 후보 조회 → 로드밸런싱 판단 → INSERT → SLA 조회 → (긴급) 알림 → 템플릿 응답 반환
- 쓰기(INSERT)와 부수효과(콘솔 알림)를 한 Agent Loop 안에서 처리
- 분류 근거·배정 근거·SLA 근거를 최종 답변에 모두 인용

## 요구사항
- CSV 6개(complaints, complaint_categories, cs_agents, sla_rules, response_templates, escalation_history)를 SQLite 로 구성
- Claude API + Anthropic SDK Tool Calling · Vanilla HTML 챗 UI · Flask 백엔드

## Agent Tool (분류·배정·저장·알림·조회 5축)
- classify(text) → 반드시 complaint_categories.카테고리명 중 하나로만 매핑
- find_available_agent(category) → cs_agents 에서 전문카테고리 매칭 + 현재처리 < 최대동시 인 사람 리턴 (로드밸런싱)
- insert_complaint(고객명, 연락처, 카테고리, 내용, 긴급도, 담당자) → complaints INSERT + 새 ID 반환
- get_sla(긴급도) → sla_rules 조회
- alert_console(complaint_id, 내용, 채널) → 채널이 SMS+콘솔 이면 print('[URGENT] …') 부수효과
- render_template(카테고리, 단계, 고객명) → response_templates 에서 본문 가져와 고객명 치환
- similar_past_cases(카테고리, limit) → 같은 카테고리 최근 접수 3건

## 시스템 프롬프트 규칙 (필수)
- 컴플레인 입력을 받으면 반드시 다음 순서로 툴을 연쇄 호출:
  1) classify → 2) find_available_agent → 3) insert_complaint → 4) get_sla → 5) 긴급이면 alert_console → 6) render_template
- 카테고리를 스스로 판단하지 말고 반드시 complaint_categories 조회 결과 안에서만 선택
- 최종 답변에 반드시: 접수ID · 카테고리 · 배정 상담원 · 1차응답 예정 시각 · 고객 안내 문구

MVP 까지 한 번에 완성해줘.
❓ 실습 3 — Agent 에 던져볼 예상 질문
# 신규 접수 (툴 5~6개 연쇄)
1. 홍길순 010-9999-1234, 결제하고 상품이 안 왔어요. 오늘 급하게 필요합니다!
2. 박현진 010-8888-2222, 지난주에 산 이어폰 소리가 한쪽만 나요. 교환해주세요
3. 이지훈 010-7777-3333, 콜센터 상담원이 반말했어요. 매우 불쾌합니다
4. 김수연 010-6666-4444, 프로모션 코드가 왜 안 먹히는지 문의드려요 (긴급도 낮음)
5. 정민호 010-5555-5555, 카드 결제 3번 중복으로 청구됐어요!!!

# 로드밸런싱 검증
6. 상품불량 카테고리에 지금 배정 가능한 상담원은 누구야?
7. 김상담 상담원 지금 몇 건 처리 중이야?
8. 배송지연 컴플레인 3건 연속 접수하면 각각 누구한테 배정돼?

# SLA·규정 조회
9. 상 긴급도는 몇 시간 안에 응답해야 해?
10. 방금 접수한 C… 건은 언제까지 해결해야 해?

# 과거 유사 케이스
11. 배송지연 카테고리 최근 접수 어떤 것들이 있어?
12. 결제오류로 에스컬레이션된 적 있어? 어떻게 처리됐어?

# 관리자 관점 요약
13. 이번 주 미처리 컴플레인 몇 건이야?
14. 긴급도 상 인데 아직 미배정인 건 있어?
15. 상담원별 현재 처리 건수 순위 알려줘

# 애매한 입력 (Agent 가 되물어야 함)
16. 화가 나서 접수합니다 (내용 없음)
17. 010-1111-2222 로 방금 접수한 거 어떻게 됐어? (누구 접수인지 불명확)
💡
고도화 방향 — 신규 카테고리 자동 제안(카테고리에 없는 유형이 반복되면 알림), 미처리 건 15분마다 팀장에게 요약 발송, 상담원별 성과 대시보드, 유사 컴플레인 자동 클러스터링 후 재발방지 리포트.

실습 4 — 이력서 자동 검수 & 채용 대시보드 Agent

이력서 PDF 5종을 파싱해 점수화하고, 채용 현황을 자연어로 조회하는 AI Agent. CSV 5개 + PDF 5개 를 SQLite 로 통합.

applicants.csv — 지원자 마스터 (이력서 PDF 와 1:1)

📊 시트 데이터 · 5행 × 13열
지원ID지원일이름지원직무총경력n8n경력PythonJavaScriptAPIGWSDBDocker프로젝트수
A20260012026-09-01김도윤자동화 엔지니어74✓✓✓✓✓✓8
A20260022026-09-02이서현자동화 엔지니어31✓✓✓3
A20260032026-09-03박준혁백엔드 자동화 개발자52✓✓✓✓✓5
A20260042026-09-04최민지n8n 자동화 개발자20✓1
A20260052026-09-05정우진자동화 엔지니어103✓✓✓✓✓✓6

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 applicants.csv 지원자 마스터 · 5명 ⬇ 다운로드

job_openings.csv — 채용 중인 직무

📊 시트 데이터 · 5행 × 7열
직무ID직무명팀경력요건필수스킬우대스킬헤드카운트
J001자동화 엔지니어자동화팀3년+n8n;Python;APIDocker;PostgreSQL2
J002n8n 자동화 개발자자동화팀1년+n8n;JavaScriptGoogleWorkspace1
J003백엔드 자동화 개발자플랫폼팀5년+Python;SQL;Dockern8n;AWS1
J004자동화 PM자동화팀7년+프로젝트관리;n8n이해영어1
J005자동화 QA플랫폼팀3년+테스트자동화;PythonSelenium;Playwright1

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 job_openings.csv 채용 공고 · 5건 ⬇ 다운로드

scoring_rubric.csv — 점수 산정 규칙

📊 시트 데이터 · 7행 × 3열
항목조건점수
n8n경력2년 이상30
n8n경력1년 이상 2년 미만15
API경험보유20
Python보유15
JavaScript보유10
GoogleWorkspace보유10
자동화프로젝트2건 이상5

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 scoring_rubric.csv 채점 루브릭 ⬇ 다운로드

interview_stages.csv — 채용 단계

📊 시트 데이터 · 5행 × 5열
단계이름담당자예상시간_분합격기준
S1서류심사AI Agent1점수 60점 이상
S2코딩 과제기술PM120실무 자동화 시나리오 1건
S31차 기술면접팀장60실무경험 검증
S42차 컬처핏HR45조직적합성 판단
S5대표 면접대표30최종 승인

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 interview_stages.csv 채용 단계 ⬇ 다운로드

department_headcount.csv — 부서별 정원·채용목표

📊 시트 데이터 · 5행 × 6열
부서코드부서명정원현원이번분기_채용목표평균근속_년
DEP01자동화팀10732.4
DEP02플랫폼팀121023.1
DEP03프론트팀8712.0
DEP04데이터팀6511.8
DEP05디자인팀4313.5

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 department_headcount.csv 부서 정원·채용목표 ⬇ 다운로드

past_hires.csv — 과거 채용 결과 (점수 vs 재직여부)

📊 시트 데이터 · 4행 × 7열
채용ID입사일이름직무입사시_점수평가결과재직여부
H20240012024-03-01오세훈자동화 엔지니어88적합재직
H20240032024-08-01김승우백엔드 자동화 개발자91적합재직
H20250012025-02-10한주희자동화 엔지니어66검토퇴사
H20250032025-09-05백지원자동화 엔지니어84적합재직

💡 사용법 — 구글 스프레드시트에서 A1 셀 클릭 → Ctrl+V (Mac: Cmd+V) 로 붙여넣기.

📎 past_hires.csv 과거 채용 이력 ⬇ 다운로드

이력서 PDF 5종 — 5강 실습용 원본 재활용

📎 지원자 A · 김도윤 이력서 PDF ⬇ 다운로드 📎 지원자 B · 이서현 이력서 PDF ⬇ 다운로드 📎 지원자 C · 박준혁 이력서 PDF ⬇ 다운로드 📎 지원자 D · 최민지 이력서 PDF ⬇ 다운로드 📎 지원자 E · 정우진 이력서 PDF ⬇ 다운로드
💡
특색 — 비정형(PDF) → 정형 변환 + 스코어링 + 과거 데이터 회귀분석. 실습 1~3 이 모두 정형 CSV 위에서 놀았다면, 이건 이력서 PDF 를 Claude 로 JSON 화 → rubric 으로 점수 → past_hires 회귀분석으로 재직 가능성 추정 까지 가는 유일한 예제.
📋 실습 4 — 방향성 프롬프트 (비정형 파싱 + 회귀분석형 Agent)
Python + Flask + Vanilla HTML + SQLite 환경에서 이력서 자동 검수 · 채용 대시보드 AI Agent 를 만들어줘.

## 이 Agent 의 특색
- 4개 실습 중 유일하게 <b>비정형 입력(PDF)</b> 처리: 이력서 PDF → pypdf → Claude Structured Output → JSON
- 점수는 반드시 scoring_rubric.csv 룰에 따라 계산 (Claude 가 임의로 매기지 못하게)
- past_hires.csv 를 회귀분석 근거로 사용: 특정 점수대 지원자의 실제 재직률을 <b>과거 데이터로 답변</b>
- 즉 이건 QA 봇이 아니라 <b>채용 의사결정 보조 도구</b>

## 요구사항
- CSV 6개(applicants, job_openings, scoring_rubric, interview_stages, department_headcount, past_hires)를 SQLite 로 구성
- resumes/ 폴더의 PDF 5개는 지원ID 와 파일명 매핑 테이블로 연결
- Claude API + Anthropic SDK Tool Calling · Vanilla HTML 챗 UI · Flask 백엔드

## Agent Tool
- extract_resume(applicant_id) → 해당 지원자의 PDF 텍스트 추출 후 Claude Structured Output 으로 스킬·경력 JSON 반환
- calculate_score(applicant_json) → scoring_rubric 조회 후 룰 그대로 계산 (Agent 가 계산 안 함)
- get_applicant(id_or_name) — 지원자 마스터
- match_jobs(applicant_json) — job_openings 필수/우대 스킬로 매칭도 계산
- retention_prediction(score) — past_hires 에서 ±5점 대역의 재직률 반환 (예: 80점 → 과거 78~82점 3명 중 재직 3/3 = 100%)
- get_hiring_pipeline(dept) — department_headcount + past_hires 조합해 부서별 채용 진행 현황
- list_interview_stages() — 단계 목록

## 시스템 프롬프트 규칙
- 점수는 반드시 calculate_score 툴이 반환한 값만 사용, 절대 스스로 계산 X
- 재직 가능성 언급 시 반드시 retention_prediction 근거를 인용 ("과거 80±5점 3명 중 3명 재직")
- 지원자 관련 답변엔 반드시 extract_resume 로 PDF 읽고, applicants.csv 값과 상충하면 그 사실을 밝힘

MVP 까지 한 번에 완성해줘.
❓ 실습 4 — Agent 에 던져볼 예상 질문
# PDF 파싱 (extract_resume 유도)
1. 김도윤 지원자 이력서 요약해줘
2. 이서현 씨 이력서에서 API 경험 부분만 뽑아줘
3. A2026003 지원자 자기소개 한 줄로 요약

# 점수 계산 (calculate_score 강제)
4. 김도윤 점수 매겨줘
5. 5명 지원자 전부 점수 계산해서 순위 매겨줘
6. 최민지는 왜 점수가 낮아? 어떤 항목에서 감점됐어?

# 직무 매칭
7. 김도윤이 지원한 자동화 엔지니어 요건에 얼마나 부합해?
8. 최민지가 지원한 n8n 자동화 개발자 자리 요건이랑 실제 스킬 비교해줘
9. 백엔드 자동화 개발자 자리에 지원한 사람 중 필수 스킬 다 갖춘 사람은?

# 회귀분석 (retention_prediction 유도)
10. 이번 지원자 중 80점 이상 뽑으면 재직할 확률 얼마나 돼? (과거 데이터 기준)
11. 66점 대에 지원한 사람 뽑으면 위험도가 어때? 과거에 어땠어?
12. past_hires 데이터로 봤을 때 몇 점 이상을 서류 통과 컷으로 잡는 게 안전해?

# 채용 파이프라인
13. 자동화팀 이번 분기 채용 얼마나 진행됐어? 목표 대비
14. 지금 5명 지원자 중 각 단계별로 몇 명씩 통과할 것 같은지 예상해줘
15. 자동화팀 정원 대비 현원 부족한데, 지원자 중 몇 명 뽑으면 채워져?

# 종합 의사결정 (툴 여러 개 연쇄)
16. 이번 5명 지원자 검토 결과 리포트 만들어줘 — 각자 점수·매칭직무·재직 예상까지
17. 김도윤과 정우진 둘 다 자동화 엔지니어 지원했는데 누굴 뽑아야 해?
18. 60점 이하 지원자는 자동 탈락으로 처리하고 이유 정리해줘

# 애매한 질문
19. 좋은 지원자 있어? (기준 안 밝힘 · 되물어야)
20. 김민수 지원자 어때? (지원자 명단에 없음 · 없다고 답해야)
💡
고도화 방향 — 지원자별 커스텀 면접 질문 자동 생성, PDF 파싱 실패 시 재시도 하네스, 지원자 이력서 유사도 검색으로 중복지원 탐지, 채용 파이프라인 실시간 대시보드, 팀장에게 매일 아침 신규 지원자 요약 자동 발송.