「ツールよりもプロンプトのほうが、隙間がなくて効率的なのでは?」... ああ、面倒なブログになるな、とおれは直感した。
はじめに
近年、プルリクエスト(PR)の管理が開発フローにおいてますます重要な位置を占めるようになっています。ただし、PRをより良く作る作業は往々にして煩雑で手間がかかりがちです。その解決策として、Codium AIによって開発されたPR-Agentが脚光を浴びています。このAIソフトウェアは、OpenAIのGPT-4技術を基盤にしており、単にOpenAIのAPIキーを設定するだけで、既存のCI/CDパイプラインに簡単にインテグレーションできます。
PR-Agentの主な機能
PR-Agentは、様々なPR関連作業を自動化するための多機能なオープンソースプロジェクトです。具体的には、以下のような機能群を提供しています。
- /describe: タイトル、種類、要約、コードの詳細説明、およびラベルを自動で作成するためのPR(プルリクエスト)説明自動生成機能。
- /review: PRの主題、種類、関連テスト、セキュリティ問題、評価スコア、その他のフィードバックを調整可能に提供する自動レビュー機能。
- /ask ...: PRに関するフリーテキスト質問に回答する質問応答機能。
- /improve: PRを改善するためのコミット可能なコード提案を行うコード改善提案機能。
- /update_changelog: PRの変更内容に基づき、CHANGELOG.mdファイルを自動で更新する更新履歴自動更新機能。
PR-AgentはOpenAIのAPIキーを設定するだけでCI環境に簡単に組み込め、開発者が効率的なPR作成と管理を行えるよう支援します。このツールはGPT-4を用いて高精度なソースコード解析とレビューを自動で行い、開発者が重要なポイントに集中できるようにします。さらに、「PR Compression Strategy」と呼ばれる独自のアルゴリズムによって、大規模なPRでも重要なファイルと主要な言語のコードブロックに焦点を当てた効率的なレビューが可能です。それ以外にもさまざまな設定により、PR-AgentはPR作成とレビューのプロセスを自動化し、効率化する強力なツールであり、大規模プロジェクトにおいてもスムーズかつ効率的なレビュープロセスを実現します。これらをどのように動作させればよいのかはUsage guideを読んでみてください。
PR-Agent のPrompt
PR Compression Strategyにより、送信するファイルの戦略が定められています。その設定に加えて、pr-agent/pr_agent/settings/ ディレクトリには、TOML形式でプルリクエスト(PR)のレビュープロンプトのテンプレートが含まれています。具体的には、pr_review_prompt
はpr_reviewer_prompts.toml
ファイルに定義されており、これがPRのレビュープロセスにおける基本的な指示とフォーマットを規定しています。この構成により、PRレビューが一貫性を持ち、効率的に行えるよう設計されています。
pr_reviewer_prompts.toml 解説
pr_reviewer_prompts.tomlは、Pull Request(PR)レビューに関する設定と指示を定義する設定ファイルです。この設定ファイルは、PRレビューを自動化する際に利用されます。
pr_review_prompt セクション
system
この設定は、レビュワーがどのような役割を果たすべきかを定義しています。具体的なPR Diffの入力例も提供され、新しく追加されたコード(+で始まる行)に焦点を当てるよう指示されています。
system="You are PR-Reviewer, a language model designed to review git pull requests. ..."
num_code_suggestions
コード提案が必要な場合、その数や重要度についての指示がこの部分に記載されています。
{%- if num_code_suggestions > 0 %} - Provide up to {{ num_code_suggestions }} code suggestions. ... {%- endif %}
extra_instructions
パラメータで、追加的な指示や設定を行うために使用されます。この項目は主に以下のような用途で利用されることが多いです。
{%- if extra_instructions %} Extra instructions from the user: {{ extra_instructions }} {% endif %}
YAMLスキーマ
この部分で、PRレビュワーが出力するレビュー結果のYAMLフォーマットが定義されています。
Main theme, PR summary, Type of PR, etc.
これらは、PRに関する基本情報を整理するためのフィールドです。
Main theme: type: string description: a short explanation of the PR
Score, Relevant tests added, Insights from user's answer, etc.
これらのフィールドは、PRに関する詳細な評価やテスト情報、ユーザーからのフィードバックに基づく評価を行います。
Score: type: int description: Rate this PR on a scale of 0-100 ...
General suggestions, Code feedback, Security concerns
これらのフィールドは、具体的なコード提案やセキュリティ上の懸念など、PRのコードに関する詳細なフィードバックを提供します。
General suggestions: type: string description: General suggestions and feedback for the contributors ...
user セクション
このセクションは、PR作成者から提供される情報(タイトル、ブランチ、説明文など)を取り込む場所です。
user="PR Info: Title: '{{title}}' Branch: '{{branch}}' Description: '{{description}}' ..."
この設定ファイルによって、PRレビューのプロセスが自動化され、一貫性を持つようになります。特定のプロジェクトやチームに特有の要件に応じて、これらの設定はカスタマイズ可能です。
まとめ
pr_reviewer_prompts.toml
といった設定ファイルを読んで全体としてPRのフォーマットに忠実にプロンプトを作成していったのがわかりました。参考にしていきたいと思います。