PR Eval Gate
PR Eval Gate
풀 리퀘스트(PR)를 평가 회귀(regression) 기준으로 게이트하는 기능이에요. AI, 결정적(deterministic) PR, 또는 수동 방식으로 설정할 수 있어요.
PR Eval Gate는 매 풀 리퀘스트마다 고정된 데이터셋으로 LLM 앱을 실행하고, 메트릭 컬렉션으로 결과를 채점한 뒤 GitHub check-run을 게시해요. 메트릭 점수가 베이스 브랜치 대비 회귀했는지(설정한 허용 오차 범위 안에서)에 따라 통과, 실패, 또는 중립(neutral) 으로 표시돼요.
이를 위해 저장소에 두 가지가 필요해요:
.github/workflows/confident-eval-gate.yml— 앱(Python + 의존성)을 준비하고 Confident가 게시한 러너 Action을 실행하는 워크플로우예요.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은 단일 턴 데이터셋만 지원해요 — 게이트를 단일 턴 데이터셋으로 지정해요 |