Multi-Language Code Evaluation Pipeline for LeetCode-Style Problems
개요
LeetCode 스타일 문제에 대한 다국어 코드 평가 파이프라인은 속도보다 정확성과 설명 가능성에 초점을 맞춰 설계되었으며, AI 검증 없이 결정론적이고 이해 가능한 판결을 목표로 합니다.
주요 내용
- 평가의 핵심 문제점: 기존 평가 시스템은 속도에 최적화되었으나, 스타터 코드 불일치, I/O 계약 불일치, 비교기 비일관성으로 인해 '정상적으로 보이는' 솔루션이 여러 언어에서 실패하는 잘못된 음성(false negative) 문제가 주요 품질 이슈였습니다.
- 새로운 파이프라인 설계 목표: 결정론적이고 설명 가능한 판결을 제공하는 데 집중하며, AI 검증을 사용하지 않습니다. 이는 CodeNexus라는 모바일 LeetCode 스타일 코딩 앱 구축 과정에서 비롯된 제약 조건으로, 평가 정확성을 시스템의 핵심 문제로 다루게 되었습니다.
- 평가 파이프라인 구성 요소:
- 스타터 품질 게이트 (사전 실행): 사용자가 코드를 실행하기 전에 스타터 템플릿의 누락, 비어 있거나 TODO만 있는 스캐폴드, 호출 가능한 시그니처 누락, 구조적 구문 결함 등을 검증합니다.
- 스타터 스모크 검증: 각 언어별 빠른 스모크 실행을 통해 실패를 스타터 품질 문제와 솔버 품질 문제로 분류하며, 래퍼/파서 불일치 및 플레이스홀더 런타임 충돌을 조기에 감지합니다.
- 계약 기반 비교 계층: 각 문제는 인덱싱, 출력 형식, 순서 민감도, 비정렬 전략, 선택적 의미론적 검증자를 정의할 수 있습니다. 비교 순서는 정규화, 정확한 일치, 비정렬 일치(허용 시), 다중 답변 정확성에 대한 의미론적 검증, 진단 불일치 분류를 포함합니다. 정규화는 공백, 부울 표준화, JSON 정규화, 비정렬 멀티셋 전략 등을 포함합니다.
- 강화된 실행 경로: 컴파일 오류, 런타임 오류, 인프라 오류를 명확하게 분리하며, 언어별 실행 설정(TS 컴파일러 옵션 포함)을 명시적으로 관리합니다. 처리량 증대를 위한 일괄 제출 + 폴링 방식과, 채점 의미론을 변경하지 않는 안정성을 위한 순차 폴백 방식을 사용합니다.
- 아티팩트 우선 출력: 모든 실행은 요약 및 실패 세부 정보가 포함된 구조화된 JSON 아티팩트를 생성합니다. 실패 정보에는 문제 슬러그, 실패 클래스, 예상/실제 스니펫이 포함되어 빠른 분류, 분석 및 재현을 지원합니다.
- 성능 개선 결과: C++, Go, Java 등 다양한 언어에서 0.9% ~ 19.0%의 낮은 초기 통과율에서 100.0% 통과율로 개선되었습니다. 이는 알고리즘 재작성이 아닌 평가 아키텍처 개선으로 인한 결과입니다.
시사점
다국어 코드 평가 환경에서 결정론적 계약과 구조화된 아티팩트는 기본 성능이 허용 가능한 수준에 도달하면 원시 실행 속도보다 중요하며, 이는 평가 시스템의 신뢰성을 크게 향상시킵니다.
원문을 불러오는 중...
댓글
GitHub Discussions