PR Agent@LLM¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. PR Agent とは¶
メンションに応じて自動で PR の内容を読み取り、レビューを実施する。
02. セットアップ¶
GitLab¶
workflow:
rules:
- if: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH
# もし workflow のルールを設定している場合、merge_request_event をルールの条件としないと、ワークフローが起動しない
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
stages:
- build
- test
- pr_agent
pr_agent:
stage: pr_agent
image:
name: pr-agent:latest
entrypoint: [""]
variables:
# Cross-region-inference に対応するために us を指定する
# 対応不要の場合は ap-northeast-1 でもよい
AWS_REGION_NAME: "us-east-1"
before_script:
# もし AWS Bedlock を使用する場合は、資格情報を取得する
script:
- cd /app
- echo "Running PR Agent action step"
- export MR_URL="$CI_MERGE_REQUEST_PROJECT_URL/merge_requests/$CI_MERGE_REQUEST_IID"
- echo "MR_URL=$MR_URL"
- export gitlab__url=$CI_SERVER_PROTOCOL://$CI_SERVER_FQDN
- export gitlab__PERSONAL_ACCESS_TOKEN=$GITLAB_PERSONAL_ACCESS_TOKEN
- export config__git_provider="gitlab"
- python -m pr_agent.cli --pr_url="$MR_URL" describe
- python -m pr_agent.cli --pr_url="$MR_URL" review
- python -m pr_agent.cli --pr_url="$MR_URL" improve
allow_failure: true
rules:
# merge_request_event の時に Job を発火させないと、PR Agent は MR の情報を取得できずにエラーになってしまう
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
GitHub Actions¶
.github/workflows/pr-agent.yml に配置し、Actions secrets に OPENAI_KEY を登録する。PR の作成・更新時に自動レビューし、PR の会話欄で /review、/describe、/improve とコメントして再実行できる。自動レビューは同じリポジトリ内の PR を対象とし、コメントからの実行はリポジトリの所有者・メンバー・コラボレーターに限定する。
name: PR Agent
on:
pull_request:
types: [opened, reopened, ready_for_review, synchronize]
issue_comment:
types: [created]
permissions: {}
jobs:
pr-agent:
# Bot、自動レビュー対象外のfork、通常のIssueへのコメントは処理しない。
if: >-
github.event.sender.type != 'Bot' &&
((github.event_name == 'pull_request' &&
github.event.pull_request.head.repo.full_name == github.repository) ||
(github.event_name == 'issue_comment' && github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/') &&
contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'),
github.event.comment.author_association)))
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: read
issues: write
pull-requests: write
steps:
# PRの取得とコメント投稿はActionが行うため、checkoutは不要。
- uses: the-pr-agent/pr-agent@main
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@main は公式の導入例に合わせている。運用時は、動作を確認したコミット SHA に固定して更新を管理できる。Bedrock を使う場合は、後述の .pr_agent.toml のモデル設定に加え、AWS の認証とリージョンを設定する。
自動レビュー¶
レビュー依頼前¶
- PR Agent を CI に導入する
- 開発者は PR 上で PR-Agent にコメントをもらい、レビューをお願いする前に、ある程度問題点を修正しておく
レビュー依頼後¶
- レビュアーは手元で生成 AI に git diff develop をさせて、作業ブランチと develop ブランチの差分を読み取らせる
- 生成 AI に次を読み取らせ、レビューしてもらう
- 保守性や可読性などのルールをまとめたオリジナルのドキュメント
- すでに作成いただいている仕様書
- レビュアーは自身の観点と生成 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