본문 바로가기
C.W.K.
Stream
Lesson 12 of 12 · published

평가 게이트 패턴

~13 min · eval-gate, deploy, regression

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

이 트랙 전체를 묶는 패턴

평가 게이트는 배포 파이프라인의 작업이야. 후보 버전에 평가 스위트를 실행하고, 합의한 지표가 회귀하면 승격을 거부하지.

구조

  1. 후보를 빌드해 (모델 체크포인트, 프롬프트 세트, 코드).
  2. 후보를 평가해. 현재 프로덕션 베이스라인과 비교하지.
  3. 후보 ≥ 베이스라인 (허용 범위 내): 승격하고 배포해.
  4. 후보 < 베이스라인: 배포 실패야. 어떤 프롬프트가 회귀했는지 차이점을 PR이나 배포 실패에 표시해.

왜 어려울까

  • 베이스라인 이탈 — 베이스라인을 언제 업데이트할까? 단순 개선일 때는 매 배포 성공마다 자동 업데이트해도 괜찮아. 하지만 동작이 바뀌면 사람의 승인이 필요해.
  • 점수 노이즈 — 평가 점수에는 분산이 있어. 1% 하락은 노이즈일 수 있으니 허용 밴드를 정의해야 해.
  • 비용 — 모든 PR마다 전체 평가를 돌리면 비싸. PR에는 스모크 게이트를, main 머지에는 전체 게이트를 써.
  • 슬라이스 회귀 — 전체 점수는 평평할 수 있지만 한국어 입력이 8% 떨어질 수 있어. 슬라이스 지표가 이걸 잡아내지.

약속

평가 게이트는 누군가 '그냥 이 한 케이스만 동작하게' 하려고 프롬프트를 수정할 때, 게이트가 무엇을 망가뜨렸는지 알려줘. 프로덕션에는 더 이상 조용한 회귀가 없어지는 거지.

Code

전체 평가 게이트 워크플로·yaml
name: eval-gate
on:
  push: { branches: [main] }
  pull_request: {}
permissions:
  contents: read
  pull-requests: write

jobs:
  eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: astral-sh/setup-uv@v3
      - run: uv sync --all-extras --dev
      - name: Fetch baseline
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh release download eval-baseline --pattern 'baseline.json' --output baseline.json
      - name: Run eval
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: uv run python -m evals.run --output candidate.json
      - name: Gate
        run: |
          uv run python -m evals.compare \
            --baseline baseline.json \
            --candidate candidate.json \
            --tolerance 0.02 \
            --report report.md
      - if: failure() && github.event_name == 'pull_request'
        uses: marocchino/sticky-pull-request-comment@v2
        with:
          path: report.md

  promote-baseline:
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'
    needs: eval
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: |
          # On a successful main merge, promote the candidate to baseline
          gh release upload eval-baseline candidate.json --clobber
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

External links

Exercise

AI 서비스 하나에 최소 평가 게이트를 세워봐: 10개 예제, 1개 채점기, 릴리스 아티팩트로 저장된 베이스라인. 점수가 5% 이상 떨어지면 게이트가 실패하게 해. 의도적으로 한 예제를 회귀시키고 PR이 빨간색으로 변하는지 확인해봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.