概要
Github ActionsへPR-Agentを設定し、プルリクエストの自動レビューを動作させます。
生成AIはAWSの Amazon Bedrock(Anthropic Claude 3.5 Sonnect-東京リージョン)を使用します。
AWSへのアクセスについてはOpenIDを設定します。
補足:
- 現在Amazon Bedrockでは、ベースモデル・リージョンの組み合わせによって、ベースモデルのInvokeができる/できない、推論プロファイルのみ使用可能、など、少しややこしい状況となっています
 - このため、東京リージョン(ap-northeast-1)+Anthropic Calude 3.5 Sonetのベースモデル、と特定して設定します
 - Claude 3.5 Sonnetを選択しているのは、PR-Agentが対応しているBedrockモデルであるためです
 
設定手順
AWS側の設定
Amazon Bedrockを使用するための設定を行います。
AWSコンソールページで操作します。
IAMポリシー作成
[IAM > ポリシー] より新規ポリシーを作成します。
下記JSONテキストをそのままコピーペーストし、ポリシー名を GitHubAgentPolicy としました。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel",
                "bedrock:InvokeModelWithResponseStream"
            ],
            "Resource": [
                "arn:aws:bedrock:ap-northeast-1::foundation-model/anthropic*"
            ]
        }
    ]
}
IDプロバイダ作成
[IAM > IDプロバイダ] より下記を指定/入力して作成します。
プロバイダのタイプ: [OpenID Connect]
プロバイダのURL: https://token.actions.githubusercontent.com
対象者: sts.amazonaws.com
参考:
https://docs.github.com/ja/actions/how-tos/secure-your-work/security-harden-deployments/oidc-in-aws
ロール作成
[IAM > ロール] より新規ロールを作成します。
ロール作成:ステップ1
下記のように指定/入力して進めます。
信頼されたエンティティタイプ: [ウェブアイデンティティ] を選択
アイデンティティプロバイダー: [token.actions.githubusercontent.com] を選択
Audience: [sts.amazonaws.com] を選択
GitHub organization: 対象とするGitHub組織を入力
GitHub repository: *
GitHub branch: *
※前のステップで作成したIDプロバイダを選択できるようになっており、GitHub用のフォームが用意されているようです。GitHub組織、リポジトリ、ブランチは適切に指定します。
ロール作成:ステップ2
許可ポリシーは前のステップで作成した [GitHubAgentPolicy] を選択します。
ロール作成:ステップ3
ロール名は GitHubAgentRole としました。
ロール作成後、ARNをコピーし、控えておきます。
下記のようなテキストになります。
arn:aws:iam::123456789012:role/GitHubAgentRole
Github Actions用の設定
アクション実行用ファイルを作成
アクション実行するためのファイルを作成し、リポジトリへ含めます。
公式の設定を参照、アレンジします。
AWS
on:
  pull_request:
    types: [opened, reopened, ready_for_review]
  issue_comment:
jobs:
  pr_agent_job:
    if: ${{ github.event.sender.type != 'Bot' }}
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
      contents: write
      id-token: write
    steps:
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-1
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
      - name: PR Agent action step
        uses: qodo-ai/pr-agent@main
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
設定ファイルを作成
モデル指示などを行うファイルを作成します。リポジトリのトップに配置します。
[config]
model = "bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0"
[pr_reviewer]
extra_instructions = "answer in Japanese"
[pr_description]
extra_instructions = "answer in Japanese"
[pr_code_suggestions]
extra_instructions = "answer in Japanese"
[pr_add_docs]
extra_instructions = "answer in Japanese"
[pr_questions]
extra_instructions = "answer in Japanese"
[pr_update_changelog]
extra_instructions = "answer in Japanese"
[pr_test]
extra_instructions = "answer in Japanese"
[pr_improve_component]
extra_instructions = "answer in Japanese"
設定ファイルをpush
上記で作成した2つのファイルを commit、pushします。
Actions secretsを設定
GitHubのリポジトリページより、AWSアクセスに使用するロールを設定します。
Settings > Secrets and variables > Actions > Repository secrets
AWS_ROLE_ARN へ AWS側の設定で作成したロールARNを設定します。
動作確認
コードを修正してPullRequestを作成してみます。
dogと入力したら「ワンワン」と表示する処理でしたが、猫の動作を追加しています。
適当ですが、なんとなく意味のある(?)ような変更をしています。
コメントは空欄にした手抜きプルリクエストを作成します。
自動的にジョブが実行され、コメントを記述してくれていますね。
レビュー、変更についての指摘もしてくれています。
上手く動作してくれました。
最後に
GitHub ActionsとPR-Agentの設定記事はたくさんあり、参考にさせていただきました。
ただ、対応している生成AIサービスや基盤モデルが多いことや、PR-Agent、その他関連モジュールも進化が早いたえ、自分の環境にマッチする内容を探すのが大変な印象です。
本ポストも同様、すぐに古くなりますので、各種記事は参考にしつつ、最新の公式情報をベースにするのが良いと思います。





