コンテンツにスキップ

PR Agent

はじめに

本サイトにつきまして、【IT技術の知見】はじめに - 俺の技術ノート をご認識のほど宜しくお願いいたします。


01. PR Agent とは

メンションに応じて自動で PR の内容を読み取り、レビューを実施する。


02. セットアップ

GitHub Actions 上で実行する場合

.github/workflows/pr-agent.yml に配置し、PR の作成・更新時に describe、review、improve を順に実行する。処理が失敗しても、ワークフロー全体は失敗させない。

name: PR Agent

on:
  pull_request:
    types: [opened, reopened, synchronize]

permissions:
  contents: read
  pull-requests: write

jobs:
  pr-agent:
    runs-on: ubuntu-latest
    continue-on-error: true
    container:
      image: pr-agent:latest
    env:
      # Cross-region-inferenceに対応する場合はusを指定する
      AWS_REGION_NAME: us-east-1
      config__git_provider: github
      github__user_token: ${{ secrets.GITHUB_TOKEN }}
      OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
    steps:
      # Bedrockを使用する場合は、ここでAWSの資格情報を取得する
      - name: Describe, review, and improve PR
        env:
          PR_URL: ${{ github.event.pull_request.html_url }}
        run: |
          cd /app
          echo "Running PR Agent action step"
          echo "PR_URL=$PR_URL"
          python -m pr_agent.cli --pr_url="$PR_URL" describe
          python -m pr_agent.cli --pr_url="$PR_URL" review
          python -m pr_agent.cli --pr_url="$PR_URL" improve

pr-agent:latest は PR Agent とモデル設定を含むイメージを用意する想定である。OpenAI を使う場合は Actions secrets に OPENAI_KEY を登録し、Bedrock を使う場合は AWS の認証とモデル設定を用意する。


自動レビュー

レビュー依頼前

  1. PR Agent を CI に導入する
  2. 開発者は PR 上で PR-Agent にコメントをもらい、レビューをお願いする前に、ある程度問題点を修正しておく


レビュー依頼後

  1. レビュアーは手元で生成 AI に git diff develop をさせて、作業ブランチと develop ブランチの差分を読み取らせる
  2. 生成 AI に次を読み取らせ、レビューしてもらう
  • 保守性や可読性などのルールをまとめたオリジナルのドキュメント
  • すでに作成いただいている仕様書
  1. レビュアーは自身の観点と生成 AI の観点を合わせて、必要であればコメントをする


02. Webhook

Webhook を使用した CI 発火

PR 上で /<コマンド> を実行することで、Webhook を介して PR-Agent を実行できる。

プッシュのたびに PR-Agent を実行させるとレビューへの修正負荷が高いため、PR-Agent の発火は Webhook で制御したほうがよい。


/describe

変更内容から、自動的に MR の種別や変更内容などを description に記載する。

/review

変更したコードの問題点やセキュリティ的な脆弱性などをレビューし、PR にコメントする。

/improve

コードの改善点を MR にコメントする。

/ask <質問内容>

PR 全体や特定の行について質問する。

/config

現在の pr-agent の設定を出力する。

/help

pr-agent の使い方を出力する。


03. config セクション

model

メインで使用する model を設定する。

[config]

model="bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0"


fallback_models

処理に失敗した際の fallback で使用する model を設定する。

[config]

fallback_models=["bedrock/anthropic.claude-3-haiku-20240307-v1:0"]


response_language

言語を設定する。

[config]

response_language="ja-JP"


verbosity_level

大きい値を設定するとより詳細にログ出力する。

[config]
# 0,1,2
verbosity_level=0


log_level

[config]

log_level="INFO"


use

Webhook 側ではなく本リポジトリ側の設定を優先する。

[config]

use_repo_settings_file=true
use_global_settings_file=false
use_wiki_settings_file=false


04 github_app セクション

handle_push_trigger

プッシュで PR-Agent が起動するフラグを設定する。

[github_app]
handle_push_trigger=false


05. pr_description セクション

enable_help

Help セクションを設定する。

[pr_description]

enable_help_comment = false
enable_help_text=false


enable_pr_diagram

Diagram セクションを設定する。

[pr_description]

enable_pr_diagram=true


enable_pr_type

PR Type セクションを設定する。

[pr_description]

enable_pr_type=false

inline_file_summary、collapsible_file_list、enable_semantic_files_types

Changes walkthrough セクションを設定する。

[pr_description]

inline_file_summary=false
collapsible_file_list=false
enable_semantic_files_types=false

enable_help

Help セクションを設定する。

[pr_description]

enable_help_comment = false
enable_help_text=false


extra_instructions

PR の説明欄に関するプロンプトを設定する。

[pr_description]

extra_instructions="""\
- impactレベルは「high」または「medium」のみを使用すること。「low」のimpactレベルを提案することは禁止である。
"""


06. pr_reviewer セクション

enable_help_text

Help セクション設定する。

[pr_reviewer]

enable_help_text=false


extra_instructions

PR レビューに関するプロンプトを設定する。

[pr_reviewer]

extra_instructions="""\
- impactレベルは「high」または「medium」のみを使用すること。「low」のimpactレベルを提案することは禁止である。
"""


require_score_review

PR スコア算出のフラグを設定する。

[pr_reviewer]

require_score_review=true


07. pr_code_suggestions セクション

extra_instructions

コード提案に関するプロンプトを設定する。

[pr_code_suggestions]

extra_instructions="""\
- impactレベルは「high」または「medium」のみを使用すること。「low」のimpactレベルを提案することは禁止である。
"""


persistent_comment

レビューのたびに新しいコメントを追加するフラグを設定する

[pr_code_suggestions]

persistent_comment=false