시장에 나와 있는 대부분의 "AI 이력서 스캐너"는 두 가지 치명적인 결함을 가지고 있습니다:
- 무작위 점수 생성: LLM은 확률적(probabilistic)이기 때문에 (
temperature > 0), 동일한 이력서를 두 번 제출해도 한 번은 62%가 나오고 몇 분 후에는 84%가 나오는 경우가 많습니다.
- 기술 환각 (Skill Hallucinations): 이력서나 커버레터를 맞춤 작성하도록 요청받았을 때, 표준 LLM 래퍼(wrapper)들은 지원자가 한 번도 접해본 적 없는 기술 경험을 능숙하게 지어냅니다. 이는 기술 면접의 처음 5분 만에 즉각적인 탈락으로 이어집니다.
저는 LaunchPad AI PRO (Adzuna API를 기반으로 하며 내장된 ATS 스캐너와 커버레터 생성기를 갖춘 채용 공고 통합 시스템)을 구축하면서, "AI 점수 추측"을 결정론적 검증 파이프라인으로 대체했습니다.
아키텍처: 인용문으로 검증된 점수 산정 방식
LLM에게 0부터 100 사이의 숫자를 추측하도록 요청하는 대신, 저희 엔진은 4가지 가중치 벡터에 걸쳐 점수를 계산합니다:
- 55% — 인용문으로 검증된 하드 스킬 (
resumeQuoteEvidence): 채용 공고의 기술이 이력서에서 해당 구절을 증거로 정확하게 추출해야만 일치하는 것으로 간주됩니다.
- 15% — 측정 가능한 영향: 정규 표현식(Regex) 및 자연어 처리(NLP)를 통해 정량화된 지표(
%, $, x 성장, 지연 시간 ms)를 감지합니다.
- 15% — 소프트 스킬 및 역할 마커.
- 15% — 구조적 완전성: 연락처 정보, GitHub/LinkedIn 링크, 표준 섹션 헤더, 그리고 최적의 단어 수를 포함합니다.
핵심 구현 (TypeScript)
다음은 저희 엔진의 핵심 결정론적 점수 산정 및 인용문 추출 로직입니다:
export interface SkillMatchEvidence {
skill: string;
foundInResume: boolean;
...
환각 제로 커버레터 & XYZ 재작성
결정론적 검증 과정이 완료되면, 저희는 두 개의 검증된 배열을 갖게 됩니다: matchedHardSkills와 missingHardSkills.
오직 이때만 LLM (temperature: 0.15, 엄격한 JSON 스키마)을 호출하며 명시적인 제약 조건이 있습니다: missingHardSkills에 있는 어떤 기술 경험도 절대 주장해서는 안 됩니다.
- 실행 가능한 XYZ 재작성(Actionable XYZ Rewrites): 지표(metrics)가 부족한 약한 문장을 표시하고 구체적인 개선 사항을 제안합니다.
- 원클릭 워크플로우(One-Click Workflow): Adzuna를 통해 실시간 채용 공고를 검색하고, 모든 채용 카드에서 "⚡ ATS 스캔 및 커버레터(ATS Scan & Cover Letter)" 버튼을 클릭하여 인용문으로 검증된 점수를 확인한 후, 내장 칸반 보드(
Saved -> Applied -> Interview -> Offer)에 지원서를 저장할 수 있습니다.
자신의 이력서로 직접 테스트해 볼 수 있습니다(핵심 스캐닝에 대한 가입 장벽 없음):
👉 LaunchPad AI PRO
동료 개발자분들의 피드백을 받고 싶습니다: 이력서 파서(resume parser)에 어떤 결정론적 휴리스틱(deterministic heuristics)을 추가하시겠습니까?
[ ](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foy7j8d04uu9ghrl60lip.jpg