概要
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、その他関連モジュールも進化が早いたえ、自分の環境にマッチする内容を探すのが大変な印象です。
本ポストも同様、すぐに古くなりますので、各種記事は参考にしつつ、最新の公式情報をベースにするのが良いと思います。





