GitHub Actions에 평가 통합
팁 (조언)
자세한 내용은 텍스트 및 이미지 탭을 참조하세요.
자동화된 평가를 GitHub Actions에 통합하면 프로덕션에 도달하기 전에 품질 회귀를 포착하는 연속 품질 게이트가 생성됩니다.
Adventure Works 시나리오에서 팀은 배포 전에 프롬프트 업데이트의 유효성을 검사해야 합니다. GitHub Actions는 끌어오기 요청에 대한 평가를 자동으로 실행하여 병합 결정을 안내하는 객관적인 품질 메트릭을 제공합니다.
여기서는 자동화된 평가를 위해 GitHub Actions 워크플로를 구성하고 결과를 해석하여 의사 결정을 안내하는 방법을 알아봅니다.
| 워크플로 구성 요소 | 목적 |
|---|---|
| 트리거 구성 | 끌어오기 요청 이벤트에 대한 평가 실행 |
| Python 환경 | 이전 단원의 종속성 설치 |
| Azure 인증 | 보안 액세스를 위해 페더레이션된 자격 증명 구성 |
| 평가 스크립트 실행 | 이전 단원에서 Python 스크립트 실행 |
| 결과 보고 | 풀 리퀘스트 코멘트로 메트릭 지표를 게시합니다 |
끌어오기 요청 평가 워크플로 이해
PR(끌어오기 요청) 워크플로는 변경 내용 병합 전에 품질 검사를 자동화하여 품질 회귀가 프로덕션에 도달하지 못하도록 합니다.
평가 워크플로는 다음 단계를 수행합니다.
- 개발자가 PR을 만듭니다. 모델 구성 또는 프롬프트에 변경 내용 제안
- GitHub Actions 트리거: 워크플로에서 구성 파일 변경 내용을 검색합니다.
- 평가 실행: 테스트 데이터 세트에 대해 스크립트 실행
- 게시된 결과: 메트릭이 통과/실패 상태의 PR 주석으로 표시됨
- 팀 결정: 결과 검토 및 변경 승인 또는 요청
이렇게 하면 수동 개입 없이 체계적인 품질 게이트가 생성됩니다.
비고
자동화된 평가는 일관된 품질 메트릭을 제공하여 사용자 검토를 보강합니다.
GitHub Actions 워크플로 파일 구성
GitHub Actions 워크플로는 평가가 실행되는 시기와 방법을 정의하는 YAML 파일 .github/workflows/ 입니다. 이 워크플로는 이전 단원에서 Python 평가 스크립트를 자동화합니다.
끌어오기 요청에 대한 평가 워크플로:
# .github/workflows/evaluate-on-pr.yml
name: Evaluate Prompt Changes
on:
pull_request:
branches: [main]
paths:
- 'prompts/**'
- 'config/**'
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
run-evaluation:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: pip install -r requirements.txt
- name: Azure login
uses: azure/login@v2
with:
client-id: ${{ vars.AZURE_CLIENT_ID }}
tenant-id: ${{ vars.AZURE_TENANT_ID }}
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
- name: Run evaluation script
run: |
python run_evaluation.py \
--test-data test-data/test_dataset.jsonl \
--output results.json
env:
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
FOUNDRY_PROJECT_NAME: ${{ vars.FOUNDRY_PROJECT_NAME }}
- name: Post results to PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const results = JSON.parse(fs.readFileSync('results.json'));
const comment = `## Evaluation Results
**Metrics:**
- Groundedness: ${results.metrics.groundedness.toFixed(2)}
- Relevance: ${results.metrics.relevance.toFixed(2)}
- Coherence: ${results.metrics.coherence.toFixed(2)}
**Status:** ${results.passed ? '✅ PASSED' : '❌ FAILED'}
Evaluated ${results.total_examples} examples.`;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
});
주요 요소:
- 트리거: PR이 프롬프트 또는 구성 파일을 수정할 때 자동으로 실행
-
Python 설치: 다음에서 Python 3.11 및 종속성을 설치합니다.
requirements.txt - Azure 인증: 보안 액세스를 위해 페더레이션된 자격 증명 사용
- 환경 변수: 평가 스크립트에 Azure 구성 전달
-
결과 게시:
github-script액션을 사용하여 PR에 메트릭을 주석으로 달기
Azure 인증 설정
GitHub Actions에는 Microsoft Foundry에 대한 보안 액세스가 필요합니다. 키 없는 인증에 페더레이션 ID 자격 증명을 사용합니다.
Azure 서비스 주체 구성:
# Create app registration
az ad app create --display-name "github-actions-eval"
APP_ID=$(az ad app list --display-name "github-actions-eval" --query "[0].appId" -o tsv)
# Create federated credential
az ad app federated-credential create --id $APP_ID --parameters '{
"name": "github-main",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:YOUR_ORG/YOUR_REPO:ref:refs/heads/main",
"audiences": ["api://AzureADTokenExchange"]
}'
# Assign permissions
az role assignment create \
--assignee $APP_ID \
--role "Cognitive Services User" \
--scope /subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{foundry}
GitHub 변수 추가:
리포지토리 설정>비밀 및 변수>작업>변수 탭으로 이동하여 다음을 추가합니다.
-
AZURE_CLIENT_ID: 서비스 주체의 애플리케이션 ID -
AZURE_TENANT_ID: Azure 테넌트 ID -
AZURE_SUBSCRIPTION_ID: 구독 ID -
AZURE_RESOURCE_GROUP: Foundry 프로젝트를 포함하는 리소스 그룹 -
FOUNDRY_PROJECT_NAME: Microsoft Foundry 프로젝트 이름
팁 (조언)
여러 배포 대상(개발, 스테이징, 프로덕션)에 GitHub 환경을 사용합니다.
CI/CD에 대한 평가 스크립트 준비
이전 단원의 평가 스크립트는 워크플로가 구문 분석하고 표시할 수 있는 구조화된 형식으로 결과를 출력해야 합니다.
필수 스크립트 출력 형식 (results.json):
{
"metrics": {
"groundedness": 4.25,
"relevance": 4.10,
"coherence": 3.85
},
"passed": true,
"total_examples": 150,
"failed_examples": 5
}
종속성 파일 (requirements.txt):
azure-ai-evaluation
azure-identity
azure-ai-inference
pandas
워크플로는 이러한 종속성을 설치하고, 테스트 데이터 세트를 사용하여 스크립트를 실행하고, JSON 출력을 구문 분석하여 형식이 지정된 결과를 끌어오기 요청에 게시합니다.
평가 결과 해석
워크플로는 평가 결과를 PR 주석으로 게시하여 품질 메트릭 및 통과/실패 상태를 표시합니다. 이러한 결과를 사용하여 변경 내용을 병합하거나 요청할지 여부를 결정합니다.
PR 주석 예제:
## Evaluation Results
**Metrics:**
- Groundedness: 4.25
- Relevance: 4.10
- Coherence: 3.45 ⚠️
**Status:** ❌ FAILED
Evaluated 150 examples.
병합 결정에 결과를 사용하는 방법:
- ✅ 통과됨: 모든 메트릭이 임계값을 충족합니다. PR 승인 및 병합
- ❌ 실패: 임계값 미만의 하나 이상의 메트릭 - 출력을 검토하고, 점수가 삭제된 이유를 조사하고, 프롬프트에 대한 변경 내용을 요청합니다.
자동화된 평가는 일관된 품질 메트릭을 제공하지만 컨텍스트를 해석하고 최종 병합 결정을 내리는 데는 인간의 판단이 필수적입니다.
이제 자동화된 평가를 GitHub Actions 워크플로에 통합하는 방법을 이해했으므로 이 지속적인 품질 보증 시스템을 설정하는 방법을 연습할 준비가 되었습니다.