PR Eval Gate

PR Eval Gate

풀 리퀘스트(PR)를 평가 회귀(regression) 기준으로 게이트하는 기능이에요. AI, 결정적(deterministic) PR, 또는 수동 방식으로 설정할 수 있어요.

PR Eval Gate는 매 풀 리퀘스트마다 고정된 데이터셋으로 LLM 앱을 실행하고, 메트릭 컬렉션으로 결과를 채점한 뒤 GitHub check-run을 게시해요. 메트릭 점수가 베이스 브랜치 대비 회귀했는지(설정한 허용 오차 범위 안에서)에 따라 통과, 실패, 또는 중립(neutral) 으로 표시돼요.

이를 위해 저장소에 두 가지가 필요해요:

  1. .github/workflows/confident-eval-gate.yml — 앱(Python + 의존성)을 준비하고 Confident가 게시한 러너 Action을 실행하는 워크플로우예요.
  2. confident_eval.py — 앱을 호출해 그 출력을 문자열로 반환하는 run(input) 함수예요. Confident는 데이터셋의 골든(golden)마다 이 함수를 한 번씩 호출해요.

어느 쪽이든 GitHub App이 필요해요 — 매 풀 리퀘스트마다 check-run을 게시하기 때문이에요. 아래 설정 옵션은 그 두 파일을 저장소에 어떻게 추가하느냐만 달라져요.

출처: 문서

본문

게이트 구성 (Configure the gate)

GitHub 연결 및 구성 (Connect GitHub and configure)

설정 (Settings) → 통합 (Integrations) → PR Eval Gate 로 이동해서 저장소에 Confident GitHub App을 설치하고, 저장소, 데이터셋, 메트릭 컬렉션, 회귀 허용 오차(regression tolerance)(게이트가 실패하기 전에 메트릭당 허용되는 최대 평균 점수 하락)를 선택한 뒤 Save 를 클릭해요.

설정 풀 리퀘스트 열기 (Open the setup pull request)

Open setup pull request 를 클릭하고 설정 방법을 고르세요(아래 참고). 저장은 설정을 저장할 뿐이고, 이 단계가 두 파일을 저장소에 연결해 줘요.

설정 방법 (Setup methods)

AI 지원 (AI-assisted)

에이전트가 저장소를 읽어 confident_eval.py와 워크플로우를 앱에 맞게 조정한 뒤 설정 풀 리퀘스트를 열어요. 가장 빠른 방법이에요.

수동/결정적 (Manual, deterministic)

Confident가 템플릿 파일을 담은 풀 리퀘스트를 열어요 — AI가 코드를 읽지 않아요. 머지하기 전에 run()을 채우고 워크플로우를 조정하면 돼요.

완전 수동 (Fully manual)

두 파일을 직접 추가해요. Confident는 PR을 열지 않고 — App은 check-run만 게시해요. 아래 단계를 따라 하면 돼요.

직접 설정하기 (Set it up yourself)

Confident가 PR을 열지 않게 하고 싶다면, 두 파일을 직접 추가할 수 있어요. 가장 폐쇄적인 옵션이고, API 키 시크릿도 직접 추가해요.

CI 워크플로우 추가 (Add the CI workflow)

.github/workflows/confident-eval-gate.yml을 만들어요. 앞선 단계에서 앱의 런타임(Python + 의존성)을 준비하고 러너 Action을 호출해요 — 마지막 Confident PR Eval Gate 단계의 uses: 참조와 네 개의 with: 입력을 유지해요.

name: Confident PR Eval Gate

on:
  pull_request:
  push:
    branches: ["<your-default-branch>"]

permissions:
  contents: read

jobs:
  eval-gate:
    runs-on: ubuntu-latest
    env:
      # Any runtime secrets your app needs to run, referencing repo secrets, e.g.:
      OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12" # match the version your app targets
      - name: Install dependencies
        run: pip install -r requirements.txt # match your project (poetry/uv/etc.)
      - name: Confident PR Eval Gate
        uses: confident-ai/confident-actions/actions/eval-gate@v1
        with:
          base_url: "<your-region-api-base-url>"
          dataset_alias: "<your-dataset-alias>"
          dataset_version: "latest"
          confident_api_key: ${{ secrets.CONFIDENT_API_KEY }}

base_url은 리전에 따라 달라져요: 미국은 https://api.confident-ai.com, EU는 https://eu.api.confident-ai.com을 사용해요. 게이트를 구성한 데이터셋에 dataset_alias(그리고 선택적으로 dataset_version)를 설정해요.

평가 콜백 추가 (Add the eval callback)

저장소 루트에 confident_eval.py를 만들어요. run(input)은 데이터셋 입력 하나를 받아 앱을 호출하고 그 출력을 반환해요 — Confident는 데이터셋의 모든 골든에 대해 이 함수를 실행하고 결과를 채점해요.

def run(input):
    """Return your LLM app's output for a single dataset input."""
    from my_app import agent  # import your application

    return agent(input)  # return the output as a string

저장소 시크릿 추가 (Add the repository secrets)

설정 → API 키에서 프로젝트 API 키를 만든 뒤, GitHub의 설정 (Settings) → Secrets and variables → Actions 에 CONFIDENT_API_KEY라는 이름의 저장소 시크릿으로 추가해요. 앱이 필요로 하는 런타임 시크릿(예: OPENAI_API_KEY)도 같은 방식으로 추가해요.

워크플로우와 confident_eval.py가 기본 브랜치에 올라오면, 이후의 모든 풀 리퀘스트가 게이트를 실행하고 베이스 브랜치 대비 점수 비교가 담긴 Confident PR Eval Gate check-run을 게시해요.

문제 해결 (Troubleshooting)

대부분의 잘못된 설정은 크게 실패해요 — 러너가 Confident PR Eval Gate check-run과 워크플로우의 Actions 로그에 이유를 보고해요. 소수는 조용히 실패하는데, 아래에 따로 표시해 두었어요.

증상 (Symptom) 예상 원인 (Likely cause) 해결 방법 (Fix)
PR에서 게이트가 실행되지 않음 (조용히) on: 트리거가 변경되었거나, 워크플로우가 .github/workflows/ 밖으로 이동됨 pull_request 트리거를 유지하고 파일을 .github/workflows/에 두어요
점수가 의미 없음 — 모든 것이 "None"과 비교됨 (조용히) run()이 None이나 문자열이 아닌 값을 반환함 run()에서 앱 출력을 문자열로 반환해요
could not import confident_eval.run confident_eval.py가 저장소 루트에 없거나, 함수 이름이 run이 아님 파일을 저장소 루트에 두고 함수 이름을 run으로 유지해요
app raised while producing outputs run()이 input 인자를 하나만 받지 않거나, 앱 런타임 시크릿이 빠졌음 run(input) 시그니처를 맞추고, 앱 시크릿(예: OPENAI_API_KEY)을 워크플로우 env:에 추가해요
could not pull dataset CONFIDENT_API_KEY가 없거나 회전/폐지되었거나, 데이터셋 별칭/버전/base_url이 잘못됨 시크릿을 다시 추가하고 데이터셋 별칭, 버전, 리전 base_url을 확인해요
check이 아예 나타나지 않음 (조용히) GitHub App이 제거되었거나, Actions가 비활성화되었거나, 러너 실행 전 설치 단계가 실패함 App을 다시 설치하고 / Actions를 활성화하고, 워크플로우 로그에서 설치 실패를 확인해요
일부 또는 모든 행에서 오류 발생 데이터셋에 다중 턴(multi-turn) 골든이 포함됨 v1은 단일 턴 데이터셋만 지원해요 — 게이트를 단일 턴 데이터셋으로 지정해요

더 알아보기