프롬프트 튜닝을 수작업에서 AI 튜닝으로: 유전 알고리즘 기반 자동 최적화와 고속화 (새 탭에서 열림)
프롬프트 튜닝은 반복적인 수작업과 개인 의존성 때문에 수일에서 수주가 걸리지만, 유전 알고리즘 기반의 GEPA를 적용하면 이를 약 한 시간으로 단축할 수 있다. GEPA는 후보 프롬프트를 여러 세대에 걸쳐 평가·변이하고, 점수뿐 아니라 자연어 피드백까지 활용해 개선 방향을 찾는다. LY Corporation은 이를 Yahoo! JAPAN Search의 건강·의료 쿼리에 적용해 정책 준수와 답변 가독성을 함께 최적화했다.
프롬프트 튜닝이 어려운 이유
- 프롬프트를 조금만 수정해도 출력을 다시 생성하고 사람이 품질을 판단해야 한다.
- 수십~수백 개의 프롬프트 패턴을 시험하는 경우가 있어 반복 작업량이 크다.
- “특정 표현이나 지시 순서가 효과적이다” 같은 노하우가 담당자 개인에게 남기 쉽다.
- 개선 이유와 시행착오 과정이 기록되기 어려워 재현성과 설명 가능성이 떨어진다.
- 모델 버전이 바뀌면 출력 품질도 변하므로 지속적인 재튜닝이 필요하다.
- 사람이 직접 해야 할 정책 검증, 평가 기준 정리, 품질 판단에 충분한 시간을 쓰기 어렵다.
프롬프트 자동 최적화 방법
- 대표적인 접근법은 다음과 같다.
- 강화 학습 기반: 출력에 대한 스칼라 보상을 이용해 프롬프트 생성 정책을 학습한다.
- 베이지안 최적화 기반: 지시문과 퓨샷 예시를 탐색 공간으로 보고 효율적으로 후보를 선택한다.
- 유전 알고리즘 기반: 여러 프롬프트 후보를 집단으로 관리하며 세대별로 개선한다.
- 자연어로 구성된 프롬프트는 이산적인 구조이므로 유전 알고리즘과 잘 맞는다.
- 실행 결과와 평가 내용을 자연어로 분석하는 **리플렉션(reflection)**을 통해 단순 점수 이상의 개선 정보를 활용할 수 있다.
GEPA의 진화적 최적화 루프
- 여러 후보 프롬프트를 생성하고 각 후보를 평가한다.
- 점수가 높거나 여러 평가 축에서 균형이 좋은 후보를 선택한다.
- 후보의 출력과 피드백을 자연어로 분석해 문제점을 찾는다.
- Reflective Prompt Mutation을 사용해 기존 프롬프트를 개선한 변이 후보를 생성한다.
- 이 과정을 수~수십 세대 반복하면서 평가 기준에 맞는 프롬프트로 수렴시킨다.
- 여러 평가 관점을 동시에 고려하기 위해 Pareto frontier 기반 선택을 사용한다.
- 스칼라 보상 하나에만 의존하는 방식과 달리, “왜 감점됐는가”라는 설명을 개선 과정에 반영할 수 있다.
DSPy와 GEPA를 이용한 구현
- DSPy에서는 입력과 출력을 정의한
Signature, 실행 로직을 담은Module, 예측을 수행하는Predict를 구성한다. - 시그니처의 독스트링은 LLM에 전달되는 인스트럭션으로 사용된다.
- GEPA는 이 인스트럭션을 자동으로 재작성해 최적화한다.
- 최적화 과정에서 다음 모델을 분리해 설정할 수 있다.
- 추론 모델: 실제 답변을 생성하는 모델
- 평가 모델: 생성 결과를 채점하는 모델
- 리플렉션 모델: 평가 결과를 바탕으로 개선 프롬프트를 만드는 모델
num_candidates,num_generations등의 설정으로 후보 수와 세대 수를 조정한다.- 최적화는 학습 예제 집합을 대상으로
optimizer.compile()을 실행해 수행한다.
평가 함수와 자연어 피드백
- GEPA의 평가 함수는 기본적으로
score라는 단일 스칼라 값을 반환해야 한다. - 평가 기준이 여러 개라면 각 점수를 0~10 범위로 계산한 뒤 평균 등을 사용해 하나의 값으로 정규화한다.
- 예를 들어 구체성, 정책 준수, 가독성의 점수를 합산해 전체 점수를 만들 수 있다.
- 동시에
feedback필드에 감점 이유와 개선 방향을 자연어로 전달할 수 있다. - 점수만 전달하면 “0.6점”이라는 결과만 알 수 있지만, 피드백을 주면 “의료 판단을 단정적으로 표현해 감점됐다”처럼 구체적인 원인을 알 수 있다.
- 정답 데이터가 있다면
gold를 사용해 기대 출력이나 레이블과 비교할 수 있다. - 정답이 없는 경우에도 LLM-as-a-Judge나 규칙 기반 평가를 사용할 수 있다.
- LLM-as-a-Judge를 사용할 때는 평가 기준을 명확히 작성하고, 출력 점수의 범위를 제한하는 등 평가 결과를 정규화해야 한다.
Yahoo! JAPAN Search 건강·의료 쿼리 적용
- 건강·의료 답변은 일반 쿼리보다 정책 요구가 많다.
- 주요 정책에는 다음이 포함된다.
- 질병명이나 중증도를 단정하지 않기
- 근거 수준에 맞는 표현 사용하기
- 일반적인 설명 범위를 유지하기
- 필요할 때 의료기관 진료를 권유하기
- 허위 정보나 확증되지 않은 정보를 제공하지 않기
- 동시에 제목, 목록, 강조 등 마크다운 형식을 적용해 가독성도 높여야 했다.
- 정책 준수와 가독성은 한쪽을 강화하면 다른 쪽이 약화될 수 있어 사람이 동시에 최적화하기 어렵다.
실제 최적화 방식과 기대 효과
- 초기 프롬프트에는 기존 범용 프롬프트와 건강·의료 정책 문구가 단순히 이어 붙어 있었다.
- GEPA는 시그니처의 인스트럭션 부분을 재작성하며 두 목표를 동시에 최적화했다.
- 평가 함수는 여러 품질 관점의 점수를 집계하고, LLM이 작성한 평가 이유를 리플렉션 피드백으로 제공했다.
- 결과적으로 수일~수주가 걸리던 프롬프트 조정 작업을 약 한 시간으로 줄이는 것을 목표로 했다.
- 모델 업데이트나 정책 변경 때도 동일한 평가·최적화 파이프라인을 다시 실행할 수 있어 유지보수 자동화에 유리하다.
프롬프트 최적화를 도입할 때는 먼저 정책과 품질 기준을 세분화하고, 점수뿐 아니라 구체적인 자연어 피드백을 평가 함수에 포함하는 것이 중요하다. 다만 LLM 평가자의 편향과 변동성이 결과에 영향을 줄 수 있으므로, 가능하면 규칙 기반 검사와 정답 데이터 기반 평가를 함께 사용해 최적화된 프롬프트를 별도로 검증하는 것이 권장된다.