MIPROv2는 프롬프트 최적화를 데이터셋, 서명, 지표를 기반으로 하는 체계적인 탐색 문제로 정의합니다. 이는 전통적인 시행착오 방식의 프롬프트 엔지니어링이 겪는 비체계적인 탐색, 평가 사각지대, 다단계 프로그램의 복잡성 문제를 해결합니다.
MIPROv2의 핵심 아이디어
-
데이터셋 요약 (Dataset Summarization): 훈련 예제 분석으로 태스크를 이해하여 도메인에 맞는 명령어 제안을 유도합니다.
-
명령어 부트스트래핑 (Instruction Bootstrapping): 각 시도마다 3-5개의 명령어 후보를 생성하여 탐색과 비용 효율성을 균형 있게 유지합니다.
-
베이시안 최적화 (Bayesian Optimization): 가우시안 프로세스 모델을 통해 과거 성공과 새로운 영역 탐색의 균형을 맞춰 프롬프트를 효율적으로 최적화합니다. DSPy.rb는 UCB(Upper Confidence Bound) 획득 함수를 사용합니다.
-
미니배치 평가 (Mini-batch Evaluation): 소규모 미니배치로 후보를 평가하여 비용을 절감하며, 베이시안 최적화기가 노이즈 속에서 신호를 추출합니다.
-
예측기별 최적화 (Per-Predictor Optimization): 다단계 프로그램에서 각 예측기를 개별 최적화하며 전체 성능을 측정하여 개선점을 파악합니다.
DSPy.rb 구현
DSPy.rb는 MIPROv2 알고리즘을 Ruby에 맞춰 구현했습니다. dspy 및 dspy-miprov2 젬으로 설치하며, DSPy::Teleprompt::MIPROv2를 통해 프로그램 컴파일 및 최적화를 수행합니다. auto_preset 설정으로 light, medium, heavy 등 사전 설정된 시도 예산을 활용할 수 있으며, best_score_value, optimization_trace 등으로 결과를 상세히 확인할 수 있습니다.