LLM 프롬프트 튜닝, 유전 알고리즘으로 1시간 만에 끝내기
LLM 프롬프트 튜닝의 수작업 부담과 느린 개선 사이클 문제를 해결하기 위해 자동화 구조 도입을 시도함
유전 알고리즘(Genetic Algorithm) 기반 GEPA 방법론을 활용해 프롬프트 최적화를 자동화하고 개선 시간 대폭 단축을 목표로 함
Yahoo! JAPAN Search 건강·의료 쿼리에 적용해 정책 준수율 100% 달성 및 최적화 시간 1시간 이내로 단축하는 성과를 거둠
GEPA: 유전 알고리즘 기반 프롬프트 최적화 원리
GEPA는 유전 알고리즘(Genetic Algorithm)의 원리를 차용하여 프롬프트 튜닝을 자동화하는 방법론입니다. 여러 후보 프롬프트를 집단으로 간주하고, 평가 점수가 높은 후보를 선택하여 다음 세대의 기반으로 삼는 진화적 계산 방식을 따릅니다.
리플렉티브 프롬프트 변이(Reflective Prompt Mutation): 실행 결과와 자연어 피드백을 바탕으로 문제점을 특정한 뒤 개선안을 생성합니다. 이는 스칼라 보상에만 의존하는 강화 학습과는 다른 접근 방식입니다.
파레토 프론티어 기반 선택(Pareto Frontier Selection): 여러 평가 축을 동시에 고려하여 균형 잡힌 우수 후보를 유지함으로써, 단일 지표로는 포착하기 어려운 복합적인 최적화 목표를 달성합니다.
이러한 루프를 수십 세대 반복하면 사람의 개입 없이도 평가 기준에 부합하는 프롬프트로 수렴하게 됩니다.
DSPy 프레임워크와 GEPA의 통합 활용
DSPy는 프롬프트 최적화를 코드로 제어할 수 있게 해주는 프레임워크로, GEPA를 공식 옵티마이저 중 하나로 지원합니다. DSPy를 사용하면 LLM의 시그니처(Signature) 정의를 통해 프롬프트의 구조를 명확히 하고, GEPA는 이 시그니처의 독스트링(docstring) 부분을 자동으로 재작성하고 최적화합니다.
모듈화된 파이프라인: `dspy.Module`을 사용하여 예측(Predict), 체인오브소트(ChainOfThought) 등 LLM 기반 모듈을 구성하고, 이를 GEPA가 최적화 대상으로 삼습니다.
평가 함수 설계: GEPA는 단일 스칼라 값(float)을 반환하는 평가 함수를 요구하지만, `dspy.Prediction(score=..., feedback=...)`을 통해 자연어 피드백을 전달할 수 있습니다. 이 피드백은 GEPA의 리플렉션 프로세스에 활용되어 개선 방향을 제시합니다.
이러한 통합은 프롬프트 엔지니어링 과정을 코드화하고 자동화하여 개발 생산성을 크게 향상시킵니다.
LLM-as-a-Judge 평가의 장단점 및 한계
GEPA는 LLM-as-a-Judge를 활용하여 프롬프트의 성능을 평가합니다. 이는 다중 관점 평가 메트릭을 구축하고, 각 관점별 점수를 집계하여 단일 스칼라 값으로 만드는 방식입니다.
장점: 평가 기준을 자연어로 상세히 기술할 수 있으며, LLM이 이를 이해하고 점수와 함께 구체적인 피드백을 제공합니다. 이는 GEPA의 리플렉션 프로세스에 중요한 정보를 제공합니다.
단점: LLM 평가기는 판정의 일관성 문제가 있을 수 있으며, 인간의 평가와 완전히 일치하지 않을 수 있습니다. 동일 입력에 대해서도 미묘한 문맥 변화에 따라 다른 점수를 부여할 가능성이 있습니다.
이러한 한계를 극복하기 위해 본 사례에서는 인간 검토 및 평가 프롬프트 수정을 반복하는 사이클을 통해 자동 평가의 정밀도를 점진적으로 향상시키는 전략을 사용했습니다.
건강·의료 쿼리 최적화 적용 사례 분석
Yahoo! JAPAN Search의 건강·의료 쿼리 답변 개선 과제는 요건 준수(정책 만족)와 가독성 개선(마크다운 형식 적용)이라는 두 가지 목표를 동시에 달성해야 했습니다. GEPA는 이 복합적인 최적화 문제를 해결하는 데 활용되었습니다.
단계적 최적화: 먼저 가독성 정책으로 최적화를 진행하여 구조화된 답변을 확보한 후, 건강·의료 정책으로 다시 최적화를 수행하여 두 목표를 모두 만족하는 프롬프트를 완성했습니다.
결과: 수일에서 수주 걸리던 수동 튜닝 작업이 약 1시간으로 단축되었고, 사람의 정성적 평가에서 정책 준수율 100%를 달성했습니다. 이는 프롬프트 시행착오에 소요되던 시간을 줄여, 사람이 고차원적인 판단 업무에 집중할 수 있게 했습니다.
최적화된 프롬프트는 7장 구성으로 재편되고, 쿼리 유형별 가이드라인과 바꿔쓰기 템플릿이 체계적으로 통합되어 정보 전달의 명확성과 정확성을 높였습니다.
프롬프트 최적화의 운영 설계 및 제약 사항
자동 최적화 구조를 실제 서비스에 적용할 때는 자동화 범위와 사람의 최종 판단 경계를 명확히 설계하는 것이 중요합니다. 본 과제에서는 재현 가능한 판단은 자동화하고, 문맥 의존적인 판단은 사람에게 맡기는 방식을 채택했습니다.
자동화 범위: 후보 프롬프트 생성/개선, 출력 획득, LLM-as-a-Judge 점수 산출, 후보 선택/도태.
사람 판단 범위: 평가 관점 정의 및 우선순위 지정, 최적화 결과 정성 평가, 평가 누락 발견 및 피드백, 운영 환경 릴리스 판단.
주요 제약 사항으로는 단일 스칼라 값 반환 평가 함수의 한계로 인한 정보 손실 가능성, 사람 검토로 인한 병목 현상 발생 가능성, 그리고 GEPA가 생성한 프롬프트에 퓨샷 예시가 다수 삽입되어 발생하는 프롬프트 비대화 문제가 있습니다. 또한, 이전 세대와의 차분 정보를 활용하지 않는다는 점도 개선 여지로 지적되었습니다.