모두의포트폴리오
PE · FDE 직군을 위한 포트폴리오 밀키트
예전 판입니다 (1판)이 문서는 2026-08-02 에 새 판으로 개정됐습니다. 채용공고에 없는 챗봇과 고객 상담 자동화를 걷어내고 공고가 적은 다채널 주문·재고·배송 연동과 에이전틱 워크플로에 맞춰, 문장을 조회 조건으로 펼쳐 사람이 확정해야 조회가 도는 화면으로 다시 썼습니다.최신 판 보기 →
경력칼라비

CS 문의를 유형별로 분류하고 응답 초안과 미해결을 짚어주는 도구

칼라비 공고에서 뽑은 세 가지 시그널.

칼라비는 커머스 운영의 CS·챗봇을 다루는 회사라, CS 문의를 분류하고 응답 초안을 만드는 이 도구는 칼라비의 실제 문의 로그가 있어야 분류를 검증한다.

01

커머스 운영·챗봇

'커머스 운영, 챗봇' 직무. CS 문의 분류·응답이 커머스 운영의 핵심.

챗봇웹개발앱개발
02

AI-Native PE

'AI-Native Product Engineer'. 문의 분류+응답 초안이 AI-native 운영의 1주 단위.

백엔드프론트엔드서버개발
03

운영 효율

CS 응대 자동화가 커머스 운영 효율의 직접 가치.

커머스운영챗봇

포트폴리오 요약

커머스 CS 문의를 받아 주문·배송·환불 유형으로 분류하고, 주문 데이터 근거와 함께 응답 초안과 미해결 이슈를 짚는 1주 포트폴리오.

고객 정의

칼라비 PE. CS 문의를 상담사가 일일이 분류·응답하던 일을, 자동 분류 + 응답 초안 도구로 옮기고 싶은 사람.

고민 지점

문의에 주문 컨텍스트를 붙이면, LLM 이 (a) 문의를 유형별로 분류하고 (b) 주문 근거와 함께 응답 초안·미해결을 제시한다.

주차별 일정

1주차여기까지로 완성

CS 분류 + 응답 초안

CS 문의를 받아 유형별로 분류하고 주문 근거와 함께 응답 초안·미해결을 짚는 동작하는 도구.

  1. 1일 · 문의·주문 스키마 설계 + 유형 분류·미해결 규칙 정의
  2. 2-3일 · 문의 ingest(Node) + 규칙 1차 분류 + 모호 LLM + Zod 검증
  3. 4일 · 응답 초안 생성(주문 근거 인용) + 미해결 플래그
  4. 5일 · CS 대시보드(React)유형·응답 초안·미해결 한 화면
  5. 6일 · 일부러 만든 결측·중의·미등록 주문 문의 30종으로 분류가 안 깨지는지 확인 + 5% 사람 확인
  6. 7일 · 7일치 시연 영상 + 직접 만든 정답과 비교한 기준선여기까지가 1주차 완성품
2주차선택 성장

분류·응답 검증

상담사 라벨과 분류 일치도(κ)·응답 채택률을 보여주는 대시보드.

  1. 8-9일 · 상담사 라벨과 분류 일치도 측정(Cohen’s κ) + 응답 채택률
  2. 10-11일 · 유형 사전·응답 톤 보정
3주차선택 성장

자동 응답·라우팅

단순 문의는 자동 응답, 복잡한 건은 담당자에게 라우팅하는 단계.

  1. 12-14일 · 단순 문의 자동 응답 + 복잡 건 라우팅
  2. 15일 · 자동 응답·라우팅 시연 + 3주 통합 영상

데모 · 측정 지표

01

CS 문의를 넣으면 유형 분류·응답 초안·미해결이 주문 근거와 함께 나오는 걸 시연한다

02

응답 근거로 인용한 주문 정보가 실제 주문에 존재하는 비율 100%

측정: 근거 일치 규칙, 표본: 문의 200건

03

일부러 만든 중의·결측·미등록 주문 문의 30종을 넣어도 분류가 멈추지 않고 처리되는 걸 시연한다

정직 경계선

진짜 성능 검증은 여기서 멈춘다

위 수치는 더미데이터 자가채점이며, 실제 CS 분류 정확도는 칼라비 실데이터 + 실 검수자가 있어야 측정 가능. 이 포트폴리오는 그 검증을 바로 돌릴 수 있는 상태까지 만든다.

미리 알아둬야 할 것들

이건 고객·실데이터 없이 혼자 만든 포트폴리오라 모든 수치는 합성 데이터 자가채점이다. 면접에서 '데모 동작 + 실검증 준비 상태'로 솔직히 설명하는 게 오히려 신뢰를 준다

정답을 내가 만들었으니 잘 맞는 게 당연. 그래서 결측·경계·미등록·표기 흔들림 케이스를 더미에 일부러 섞어 쉬운 문제만 푸는 게 아님을 보여준다

오응답 위험: 환불·결제 같은 민감 문의는 자동 응답하지 않고 상담사 검토 큐로 보낸다

실제 도입 시 달라지는 것: 실 문의 분포·주문 시스템이 더미와 다르므로 유형 사전·연동을 실데이터로 맞춰야 한다(도입 단계 과제)

더미 데이터

① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.

cs_ticketsTABLE· 12 rows

커머스 CS 문의·주문을 묶어 분류·응답 입력으로 쓴다

② cs_tickets.seed.json 다운로드
① 인라인 샘플 (프리뷰 5 / 12)
ticket_idcustomer_rawcustomer_idtextissue_typeorder_idresolved
CS900OO고객(구)—(문의 누락)none——
CS901고객0c0환불 처리해주세요refundO0false
CS902중의문의c2그거요none——
CS903미등록주문—주문 어디갔어요orderO999—
CS000고객0c0배송이 안 와요 (0)deliveryO0false
③ 증강 프롬프트 (본인 LLM 에 붙여서 N 배 늘리기)
z.object({ ticket_id: z.string(), customer_raw: z.string(), customer_id: z.string().nullable(), text: z.string(), issue_type: z.enum(['order','delivery','refund','none']), order_id: z.string().nullable(), resolved: z.boolean().nullable() }). 쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라: text 누락·중의('그거요'), issue_type none, order_id null/미등록(orphan), resolved null, customer_raw 표기 흔들림. 형식 깨뜨리기 시도 3건도 별도로.
schema (3 층의 단일 출처)
z.object({ ticket_id: z.string(), customer_raw: z.string(), customer_id: z.string().nullable(), text: z.string(), issue_type: z.enum(['order','delivery','refund','none']), order_id: z.string().nullable(), resolved: z.boolean().nullable() })

기술 상세 · 아키텍처·운영·출력 스키마

기술 스택 매핑
Python문의 ingest + 분류 + eval(공고 스택 미명시 → 도메인 기반 추론)
TypeScript대시보드 렌더 + Zod 검증
ReactCS 대응 대시보드
Node.js분류·응답 API
PostgreSQL문의·주문 단일 진실원
LLM유형 분류 + 응답 초안 생성
LLM 선택
model
규칙+LLM 유형 분류 + Claude Sonnet(응답 초안)
prompt
few-shot 3 + 주문 근거 인용 강제 + 분류 schema 강제 + 단정 가드
rationale
명백한 유형은 규칙, 모호 문의·응답 초안만 LLM.
결정 게이트
1주차 끝1주차 완성품이 자동으로 도는가. 여기까지가 그 자체로 제출 가능한 완성품.

✓ pass → 그대로 멈춰도 완성품. 더 키우려면 2주차(분류·응답 검증)로.

2주차 끝분류·응답 검증 결과가 나오는가.

✓ pass → 여기서 멈춰도 완결. 더 키우려면 3주차(자동 응답·라우팅)로.

재사용 레이어 · 코어 70% / 도메인 30%
core (재사용 가능)
  • 문의 ingest + 유형 분류 엔진
  • 주문 근거 부착 + 응답 초안 생성기
  • Zod 스키마 강제 검증
  • CS 대시보드(React)
  • 5% 인간 spot-check 샘플러
domain (교체 대상)
  • 커머스 문의·주문 스키마
  • CS 유형 사전
  • 응답 톤 가이드
출력 스키마 · cs_output

CS 분류 + 응답 초안

schema (JSON Schema)
z.object({ ticket_id: z.string(), issue_type: z.string(), draft: z.string(), order_ref: z.string().nullable(), needs_agent: z.boolean() })
모범 출력 (3)
[
  {
    "ticket_id": "CS000",
    "issue_type": "delivery",
    "draft": "주문 O0은 오늘 출고 예정입니다",
    "order_ref": "O0",
    "needs_agent": false
  },
  {
    "ticket_id": "CS901",
    "issue_type": "refund",
    "draft": "환불 문의 확인 중입니다(상담사 검토)",
    "order_ref": "O0",
    "needs_agent": true
  },
  {
    "ticket_id": "CS902",
    "issue_type": "none",
    "draft": "문의 내용을 한 번 더 알려주시겠어요?",
    "order_ref": null,
    "needs_agent": true
  }
]
검증 노트 (자동 vs 수동)

order_ref 존재·issue_type 형식은 자동 검증, draft 적절성·needs_agent 는 상담사/judge 검증.