C.W.K.
Stream
Lesson 12 of 12 · published

Eval-gate 패턴

~13 min · eval-gate, deploy, regression

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

이 track 전체를 묶는 패턴

Eval gate 는 deploy pipeline 의 job — 후보 버전에 대해 eval suite 실행하고 합의된 metric 이 regression 하면 승격 거부.

모양

  1. 후보 빌드 (모델 checkpoint, prompt 세트, 코드).
  2. 후보에 대해 eval. 현재 production baseline 과 비교.
  3. 후보 ≥ baseline (허용 내): 승격, deploy.
  4. 후보 < baseline: deploy 실패. Diff (어떤 prompt 가 regression) PR 이나 deploy 실패에 표시.

왜 어려운가

  • Baseline drift — 언제 baseline 업데이트? 단조 개선엔 매 성공 deploy 마다 자동 업데이트 OK; 동작 변경은 사람 승인 필요.
  • 점수 noise — Eval 점수는 분산. 1% 하락은 noise 일 수 있음. 허용 밴드 정의.
  • 비용 — 매 PR 의 full eval 비쌈. PR 엔 smoke gate, main merge 엔 full gate.
  • Slice regression — 전체 점수 평평할 수 있지만 한국어 입력이 8% 저하. Slice metric 이 잡음.

약속

Eval gate 는 누군가 'just 이 한 케이스 동작' 을 위해 prompt tweak 할 때 gate 가 뭘 깼는지 알려줌. Production 에 더 이상 조용한 regression 없음.

Code

Full eval-gate workflow·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 서비스 하나에 최소 eval gate 세움: 10 예제, 1 scorer, release asset 으로 저장된 baseline. 점수가 5% 이상 떨어지면 gate 가 실패하게. 의도적으로 한 예제 regression 시키고 PR red 로 변하는지 확인.

Progress

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

댓글 0

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

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