GitHub ActionsでAI呼び出し

すごく久しぶりにブログを書く。3ヶ月ぶりくらい?

↓この記事を読んで「へー。どういうこと?」ってなったので遊んでみた。

GITHUB_TOKEN でGitHub Modelsを呼び出せるようになったよ!PAT(Personal Access Tokens)はもう使わなくていいよ!」って書いてある。そもそもGitHub Modelsを知らんかったけど、GitHub Copilotとかで使ってるAIのモデルたちのことかな。

やってみた

GitHub ActionsでAIの呼び出しができるよってことだろうなと思って適当に作ってみた。「今日の運勢を教えて!」って投げるだけのGitHub Actions。

「今日は新しいことにチャレンジする絶好の日!」ふむふむー。

コード

github.com

name: GitHub Models API Example

on:
  workflow_dispatch:

permissions:
  models: read

jobs:
  call-model:
    runs-on: ubuntu-latest
    steps:
      - name: Call AI model
        id: model-call
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          PROMPT: "今日の運勢を教えて!"
        run: |
          # API呼び出しと生のレスポンスの保存
          RAW_RESPONSE=$(curl "https://models.github.ai/inference/chat/completions" \
             -H "Content-Type: application/json" \
             -H "Authorization: Bearer $GITHUB_TOKEN" \
             -d '{
              "messages": [
                  {
                     "role": "user",
                     "content": "'"$PROMPT"'"
                  }
               ],
               "model": "openai/gpt-4o"
            }')

          # 生のレスポンスを一時ファイルに保存
          echo "$RAW_RESPONSE" > raw_response.json

          # レスポンスからコンテンツ部分を抽出
          CONTENT=$(echo "$RAW_RESPONSE" | jq -r '.choices[0].message.content')

          # 整形したレスポンスを一時ファイルに保存
          echo "$CONTENT" > model_response.txt

          # GitHub Actionsのoutputとして設定
          echo "response<<EOF" >> $GITHUB_OUTPUT
          echo "$CONTENT" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

          echo "raw_response<<EOF" >> $GITHUB_OUTPUT
          echo "$RAW_RESPONSE" >> $GITHUB_OUTPUT
          echo "EOF" >> $GITHUB_OUTPUT

      - name: Output response as log
        run: |
          echo "=========================================="
          echo "GitHub Modelsからのレスポンス:"
          echo "=========================================="
          echo "${{ steps.model-call.outputs.response }}"
          echo "=========================================="

          echo ""
          echo "=========================================="
          echo "GitHub Modelsからの生のJSON レスポンス:"
          echo "=========================================="
          echo "${{ steps.model-call.outputs.raw_response }}"
          echo "=========================================="

簡単だね。ちなみにこのGitHub ActionsのYAMLは適当にドキュメントからコピペしてきたものに対して、GitHub Copilot Chatでちょこちょこ依頼をして仕上げただけ。

コミットメッセージも最初だけ自分で書いて「あ、これも書いてもらえばいいか」って、途中からはCopilotに書いてもらった。

自分ではほぼ何もしてない。

最近はCursorでコードを書いてたけど、VS CodeのCopilotのAgentモードもだいぶCursorに近いね。まだちょっとCursorのほうが使いやすいかな、くらい。

ということで

何かしらGitHub ActionsでAIに問いかけたいときは便利なのかな。今はまだ何にも具体的な用途を思いついてないけど、こういうこともできるって頭にいれておこっと。