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

AI 개발 흐름에 평가 통합하기

~18 min · evals, workflow, ci

Level 0추측자
0 XP0/55 lessons0/10 achievements
0/150 XP to next level150 XP to go0% complete

평가는 어디에 들어가야 할까

연구자가 기억날 때만 실행하는 평가는 제대로 된 평가 체계가 아니야. 핵심 질문은 이것이야. 개발 주기의 어느 시점에 평가 모음을 실행할까?

  1. 로컬 개발. 5~20개 사례로 구성한 빠른 간이 평가를 몇 초 안에 실행해 개발자가 푸시하기 전에 결과를 확인하게 해. just eval-fast.
  2. 풀 리퀘스트. 100~500개 사례로 구성한 전체 결정론적 평가를 CI 단계에서 실행해. 통과율이 기준값 아래로 떨어진 PR은 병합할 수 없게 해.
  3. 출시 전. 유료 LLM 판정 모델과 사람이 평가한 사례까지 포함한 전체 평가로 출시 태그 생성을 통제해.
  4. 정기 실행 (야간 실행). 전체 데이터셋을 대상으로 시간이 오래 걸리는 평가 모음을 실행하고, 운영 로그와 비교해 분포 변화를 확인해.
  5. 온라인 (운영 환경). 표본 추출 계층에서 실시간 요청을 수집하고 채점해 회귀를 알려 줘. 새로 발견한 경계 사례는 오프라인 데이터셋으로 다시 보내.

PR 단계 평가가 가장 큰 효과를 내

한 가지만 할 수 있다면 PR 관문부터 만들어. 대부분의 회귀는 프롬프트를 한 번 수정할 때 생기고, 평가 모음을 다시 실행하지 않아서 그대로 남아. 모든 PR에서 평가 통과 여부를 확인하면 수정 비용이 가장 적게 드는 시점에 회귀를 잡을 수 있어.

원칙: 개발 흐름에서 평가를 일찍 실행할수록 회귀를 수정하는 비용이 적게 들어. 로컬 < PR < 출시 전 < 운영 환경.

운영 관측 데이터가 개선의 고리를 완성해

운영 요청의 1~5%를 추출해 온라인 평가 파이프라인으로 보내면 오프라인 평가의 효과를 크게 높일 수 있어. 실제 환경에서 발견한 문제는 다음 날의 회귀 테스트가 돼. Braintrust와 Inspect AI 같은 도구는 이 과정을 구체적으로 지원해.

Code

GitHub Actions — 평가를 PR 관문으로 만들기·yaml
# .github/workflows/evals.yml
name: Evals
on: [pull_request]
jobs:
  fast-eval:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with: { python-version: '3.12' }
      - run: pip install -r requirements.txt
      - name: Run fast eval suite
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: just eval-fast
      - name: Compare to baseline
        run: python scripts/eval_diff.py --base origin/main --threshold 0.02
      # PR fails if pass rate dropped by more than 2 points.
운영 환경 표본 추출기 — 오프라인 데이터셋에 사례 추가하기·python
import random
import time

def log_for_eval(request, response):
    """Sample 2% of production calls into the eval queue."""
    if random.random() < 0.02:
        record = {
            "timestamp": time.time(),
            "input": request["input"],
            "output": response["text"],
            "model": response["model"],
            "latency_ms": response["latency_ms"],
        }
        eval_queue.publish(record)

# Downstream worker scores each record async, alerts on anomalies,
# and adds the most informative ones to the offline regression set.

External links

Exercise

다섯 가지 통합 지점인 로컬, PR, 출시 전, 야간 실행, 온라인 가운데 팀에 없는 것 하나를 골라 추가해. 4시간 안에 끝내도록 범위를 제한해. 보통은 PR 관문이 투자 대비 효과가 가장 큰 선택이야.

Progress

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

댓글 0

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

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