GEPA 심층 탐구

GEPA 심층 탐구 (GEPA in depth)

GEPA는 DSPy의 반성(reflection) 기반 지시문 최적화기입니다. 후보 프로그램의 개체군(population)을 유지하고, 각각을 검증 세트에서 채점하며, 메트릭이 예측기별로 제공하는 자연어 피드백을 바탕으로 지시문 수정을 제안하는 LLM "반성" 단계를 사용합니다. Pareto-frontier 샘플링과 반성적 제안 메커니즘이 COPRO·MIPROv2와 구별되는 점이고, 메트릭 계약 — dspy.Prediction(score, feedback) — 이 피드백 채널이 아예 작동하게 만드는 요인입니다.

출처: 문서

본문

선택 가이드가 GEPA를 가리켰고, 전체 메커니즘을 원한다면 이 문서를 읽으세요. 예산이 어떻게 평가로 변환되는지, 피드백이 어떻게 반성 LM에 닿는지, auto 모드가 실제로 무엇을 사는지, 통계를 추적할 때 detailed_results 가 무엇을 담는지가 그것입니다.

설계 결정

1. 메트릭이 피드백 채널이다 — 맨 float가 아니라 Prediction(score, feedback) 을 반환하라

GEPA는 메트릭의 feedback 필드를 직접 반성 프롬프트로 읽습니다. 맨 float 메트릭도 동작하지만, 제안자는 "이 트레이스가 {n} 점을 받았습니다"라는 일반적인 캡션만 보고, 구체적인 실패 모드는 결코 닿지 않습니다. GEPA는 float에 대해 오류를 내지는 않지만, 훨씬 약한 자신의 버전을 줄 뿐입니다.

2. 반성은 평가가 아니라 제안 메커니즘이다

reflection_lm 은 변형(mutation)당 한 번 호출되어 낮은 점수의 트레이스를 읽고 새 지시문을 만들어 냅니다. 점수 평가는 프로그램이 구성된 LM(task_model)으로 실행됩니다. 두 역할, 두 예산: 반성은 드물고 강한 LM의 혜택을 받으며, 평가는 잦고 값싼 LM의 혜택을 받습니다. 프로그램을 gpt-4o-mini 로 돌리면서 reflection_lm=dspy.LM("openai/gpt-4o") 를 넘기는 것이 표준 구성입니다.

3. auto, max_full_evals, max_metric_calls 중 하나만 설정할 수 있다

GEPA는 구성 시점에 이를 강제합니다. 세 손잡이는 같은 예산의 서로 다른 단위입니다. auto="light"|"medium"|"heavy" 는 탐색할 후보 프롬프트 수를 조절합니다. 제한된 메트릭 호출 예산 안에서 Pareto 탐색이 어떻게 진행되는지 제어합니다.

4. Pareto-frontier 샘플링이 최고를 유지한다

GEPA는 여러 후보를 동시에 유지하고, 지배되는(dominated) 후보를 버리는 Pareto frontier로 개체군을 다듬습니다. valset 이 Pareto 점수를 추적하고 compile 이 반환하는 프로그램을 선택합니다.

5. detailed_results 가 감사 추적(audit trail)을 제공한다

통계를 추적할 때 detailed_results=True 로 설정하면 각 후보 지시문과 그 점수를 기록으로 남겨, 무엇이 개선됐는지 검증할 수 있습니다. 예산이 소진될 때까지 반성·재평가·유지 루프가 반복됩니다.

메트릭 피드백 사용하기

Prediction(score, feedback) 을 반환하는 메트릭은 GEPA의 반성이 실패를 진단하는 데 결정적입니다. feedback 문자열은 제안자에게 전달되는 프롬프트로 들어가므로, 왜 출력이 틀렸는지를 진단하고 구조를 암시하는 피드백이 맨 점수보다 다시 쓰기를 훨씬 잘 조종합니다.

auto 예산 간단 요약

  • auto="light" — 약 6개의 후보 프롬프트를 평가한 뒤 중단.
  • auto="medium" / auto="heavy" — 더 많은 탐색, 더 많은 컴파일 비용.

프로그램에 Flex 하위 모듈을 포함하면 GEPA는 각 Flex 의 코드도 함께 최적화합니다. 자세한 내용은 Flex: 최적화 가능한 모듈 코드를 참고하세요.

더 알아보기 (Learn more)