
actions/ai-inference を使って GitHub Actions のワークフローから AI モデルを呼び出す
actions/ai-inference は GitHub Actions のワークフローから AI モデルを呼び出すための公式のアクションです。これを使用することで CI/CD のワークフローから AI モデルを簡単に利用できるようになります。この記事ではプルリクエスト上で AI に記事のレビューをしてもらうという実践的な使用例を紹介します。
音声による概要
この音声概要は AI によって生成されており、誤りを含む可能性があります。
actions/ai-inference は GitHub Actions のワークフローから GitHub Models を呼び出すための公式のアクションです。これを使用することで CI/CD のワークフローから AI モデルを簡単に利用できるようになります。
使用例
まずは簡単な使用例を見てみましょう。.github/workflows/ai-inference.yml
に以下のようなワークフローを追加します。
name: 'AI inference'
# 手動でワークフローをトリガーするための設定
on:
workflow_dispatch:
# ワークフローの入力としてプロンプトを受け取る
# これは GitHub Actions の UI から入力できる
inputs:
prompt:
description: 'Prompt for the AI model'
required: true
jobs:
inference:
# GitHub Models を読み取るための権限を付与
permissions:
models: read
runs-on: ubuntu-latest
steps:
- name: Test Local Action
id: inference
# actions/ai-inference アクションを使用して AI モデルを呼び出す
uses: actions/ai-inference@v1
with:
# プロンプトには GitHub Actions の入力を指定
prompt: "${{ github.event.inputs.prompt }}"
# GitHub Models で使用可能な AI モデルを指定
# デフォルトは gpt-4o
model: "gpt-4o"
- name: Print Output
id: output
# AI モデルの出力を表示
run: echo "${{ steps.inference.outputs.response }}"
このワークフローは on: workflow_dispatch
によって GitHub Actions の UI から手動でトリガーできます。inputs
を使用することにより手動実行する際にユーザー入力を受け取ることができます。ここで受け取った入力は AI モデルのプロンプトとして使用されます。
inference
ジョブでは actions/ai-inference
アクションを使用して AI モデルを呼び出します。このアクションを使用するためには、permissions
で models: read
の権限を付与する必要があります。これは GitHub Models を読み取るための権限です。prompt
には AI モデルに渡すプロンプトを指定します。ここでは ${{ github.event.inputs.prompt }}
を指定することで、手動実行時に入力されたプロンプトを使用しています。model
には使用する AI モデルを指定します。デフォルトでは gpt-4o
が指定されていますが、他のモデルも使用可能です。使用可能なモデルの一覧は GitHub Models - Catalog を参照してください。
steps.inference.outputs.response
には AI モデルの出力が格納されます。これを echo
コマンドで表示しています。
実際にこのワークフローを実行してみましょう。GitHub のレポジトリの Actions タブに移動し、AI inference
ワークフローを選択します。右上の Run workflow
ボタンをクリックすると、プロンプトを入力するためのダイアログが表示されます。
ダイアログにはプロンプトを入力するためのテキストボックスが表示されます。ここにプロンプトを入力して Run workflow
ボタンをクリックすると、ワークフローが実行されます。
ワークフローの実行結果を確認すると、「こんにちは!😊 今日はどんなお手伝いをしましょうか?」と出力されていることが確認できました。
記事のレビューを CI で実行する
基本的な使い方を確認したところで、実践的な使用例を試してみましょう。プルリクエスト上で AI に記事のレビューをしてもらうというものです。具体的に以下のようなワークフローを構築します。
- プルリクエストが作成されたときにワークフローをトリガーする
- 変更されたファイルを取得する
- 変更されたファイルの内容を AI モデルにプロンプトとして渡す
- AI モデルの出力をコメントとしてプルリクエストに投稿する
ファイルの内容は以下のようになります。
name: 'Review with AI'
on:
pull_request:
paths:
# 記事を保存しているディレクトリが変更されたときのみワークフローを実行する
- contents/blogPost/**/*.md
jobs:
review:
permissions:
models: read
# ファイルをプロンプトとして渡すために必要な権限
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
# 変更されたファイルを取得する
- name: Get changed files in the contents folder
id: changed-files-specific
uses: tj-actions/changed-files@4cd184a1dd542b79cca1d4d7938e4154a6520ca7 # v46.0.0
with:
files: |
contents/**
- name: Test Local Action
id: inference
uses: actions/ai-inference@f8ee4c952b7dca7b8a4529edd04dc5cc3d49c435 # v1.0.0
if: steps.changed-files-specific.outputs.all_changed_files != ''
env:
ALL_CHANGED_FILES: ${{ steps.changed-files-specific.outputs.all_changed_files }}
with:
system-prompt: |
あなたはプロフェッショナルなテックブログ・レビューアー AIです。
あなたの役割は、開発者や技術者が書いたブログ記事を技術的正確性・表現の明確さ・構成の論理性・読者への価値提供という観点でレビューし、フィードバックを提供することです。
# 変更されたファイルの内容をプロンプトとして渡す
prompt-file: "${{ env.ALL_CHANGED_FILES }}"
- name: Comment on PR
id: comment
if: steps.changed-files-specific.outputs.all_changed_files != ''
env:
RESPONSE: ${{ steps.inference.outputs.response }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# gh CLI を使用してプルリクエストにコメントを投稿する
run: |
echo "${{ env.RESPONSE }}" > comment.txt
gh pr comment ${{ github.event.pull_request.number }} --body-file comment.txt
echo "Commented on PR #${{ github.event.pull_request.number }} with response: ${{ env.RESPONSE }}"
このワークフローは on: pull_request
によってプルリクエストが作成または編集されたときにトリガーされます。paths
で指定したパスに変更があった場合のみワークフローが実行されます。ここでは contents/blogPost/**/*.md
を指定しているため、contents/blogPost
ディレクトリ以下の .md
ファイルが変更されたときのみワークフローが実行されます。
tj-actions/changed-files
アクションを使用して変更されたファイルを取得します。steps.changed-files-specific.outputs.all_changed_files
には変更されたファイルのパスが格納されます。これを ALL_CHANGED_FILES
環境変数に渡します。この値は複数のファイルが変更された場合には空白区切りの文字列になります。ここでは簡単のために 1 つのファイルしか変更されていないことを前提にしています。
actions/ai-inference
アクションを使用して AI モデルを呼び出します。prompt-file
を使用するとファイルの内容をプロンプトとして渡すことができます。
steps.inference.outputs.response
には AI モデルの出力が格納されます。これを gh pr comment
コマンドでプルリクエストにコメントとして投稿します。GITHUB_TOKEN
は GitHub Actions が自動的に提供するトークンで、プルリクエストにコメントを投稿するために使用します。
実際にこのワークフローを実行した結果は以下のようになります。
まとめ
actions/ai-inference
アクションを使用すると GitHub Actions のワークフローから AI モデルを呼び出すことができるprompt
を使用してプロンプトを指定するmodel
を使用して使用する AI モデルを指定する。デフォルトではgpt-4o
が指定されているpermissions
でmodels: read
の権限を付与する必要があるprompt-file
を使用してファイルの内容をプロンプトとして渡すことができる