評価を GitHub Actions に統合する

完了

自動評価を GitHub Actions に統合すると、運用環境に到達する前に品質回帰をキャッチする継続的な品質ゲートが作成されます。

Adventure Works シナリオでは、チームはデプロイ前にプロンプトの更新を検証する必要があります。 GitHub Actions では、プル要求に対して評価が自動的に実行され、マージの決定を導く客観的な品質メトリックが提供されます。

ここでは、自動評価用に GitHub Actions ワークフローを構成し、結果を解釈して決定を導く方法について説明します。

ワークフロー コンポーネント 目的
トリガーの構成 pull request イベントで評価を実行する
Python 環境 前のユニットからの依存関係をインストールする
Azure 認証 セキュリティで保護されたアクセス用にフェデレーション資格情報を構成する
評価スクリプトを実行する 前のユニットから Python スクリプトを実行する
結果レポート プル要求コメントとしてメトリックを投稿する

pull request 評価ワークフローを理解する

プル要求 (PR) ワークフローは、変更がマージされる前に品質チェックを自動化し、品質回帰が運用環境に到達するのを防ぎます。

評価ワークフローは、次の手順に従います。

  1. 開発者が PR を作成する: モデルの構成またはプロンプトに変更を提案する
  2. GitHub Actions トリガー: ワークフローで構成ファイルの変更が検出される
  3. 評価の実行: スクリプトはテスト データセットに対して実行されます
  4. 投稿された結果: メトリックは、合格/失敗状態の PR コメントとして表示されます
  5. チームが決定する: 結果を確認し、変更を承認または要求する

これにより、手動介入なしで体系的な品質ゲートが作成されます。

自動評価は、一貫した品質メトリックを提供することで、人間のレビューを強化します。

GitHub Actions ワークフロー ファイルを構成する

GitHub Actions ワークフローは、評価を実行するタイミングと方法を定義する .github/workflows/ 内の YAML ファイルです。 このワークフローは、前のユニットの 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 を承認し、マージしてください
  • ❌ 失敗: しきい値を下回る 1 つ以上のメトリック - 出力を確認し、スコアが削除された理由を調査し、プロンプトに変更を要求します

自動評価は一貫した品質メトリックを提供しますが、コンテキストを解釈して最終的なマージの決定を行うには、人間の判断が不可欠です。

自動評価を GitHub Actions ワークフローに統合する方法を理解したら、この継続的な品質保証システムの設定を練習する準備ができました。