DUICUO

オープンソース プロジェクト向けの ChatGPT ベースのコード レビュー ボット。

翻訳者 |ブガッティ

校正者 | Chonglou

コードレビューは、現代のソフトウェア開発において非常に重要な側面です。GitHubワークフローでは、コードレビューはマージリクエスト PRの作成から始まり PRが承認、マージ、または拒否された時点で終了しますレビュー担当者は通常、上級開発者またはアーキテクトです。彼らはリポジトリに送信されたコードが正確で、保守性、拡張性、そしてセキュリティに優れていることを確認します。これは、オープンソースプロジェクトにとって特に重要です。なぜなら、提供されるコードの多くはコミュニティから提供される可能性があるからです。

しかし、マージ リクエストにおけるコード レビューはソフトウェア開発業界における最大の問題点の 1 つとなることがよくあります

  • 上級開発者非常に忙しく、費用も非常に高額です彼らはコードレビューに最も少ない時間を費やします
  • しかしコードレビューがなければ、開発プロセス(例:プルリクエストのマージ前進できません。開発者はレビューをただ待つばかりです。オープンソースコミュニティ開発者にとって、タイミングの悪いコードレビューは、さらなる貢献を妨げるだけです
  • 経営陣は上級開発者に、 PRに関連する重要な変更点やリスク要因報告と説明を頻繁に求めておりこれによりプロセスがさらに遅延します。

26,000人開発者による70万件以上のマージリクエストを対象とした調査では1件のマージリクエストのレビューに平均4日以上かかることが明らかになりました。提出されたマージリクエスト1件につき開発者の自由時間2日間も無駄になり生産性に重大な影響を与えています

このブログ記事では、 Cloud Native Computing Foundation ( CNCF )WasmEdgeコミュニティ作成したGitHub PRコードレビューボットについて説明します。このボットはオープンソースのWasmEdgeランタイム環境上で動作し ChatGPT/GPT4を使用してコードレビュータスクを実行します。WasmEdgeコードリポジトリに既にデプロイされており、すべてのマージリクエスト自動的にレビューできます時間がない場合でも 5以内にGitHubに独自のコードレビューボットを作成してデプロイできます

実例

しかし、 ChatGPT/4コードレビューをするほど賢いのでしょうか?それは上級開発者の仕事ではないでしょうか話を元に戻して、例を見てみましょう。下の画像は、WasmEdgeオープンソースリポジトリの1つに送信されたマージリクエストです入力た数値が素数かどうかを確認するためのcheck_prime()関数が追加されています。実装は非常に標準的です。2からnの平方根までループし各整数が割り切れるかどうかを試します。

図 1. n が素数かどうかをチェックするこのコードに問題を見つけましたか? ChatGPT が見つけました!

ロボットプログラムは、以下のコードレビューコメントを提供します。そのパフォーマンスは紛れもなく驚異的です

図2. ChatGPTからのコードレビュー

会話を続けると、 ChatGPT/4を使用してコードをさらに改良し、ループ内ですでに見つかった素数の倍数をすべてスキップするソリューションを提案できます。

マネージャー/メンテナーとして、コードレビューボットプログラミングの技術的な概要は非常に役立つと思います。

図3. マージリクエストにおけるコード変更の概要

どのように機能しますか?

コードレビューボットはRustで記述されたサーバーレス関数(ストリーム関数)近々 JavaScriptでも記述される予定です。Wasmコンパイルされ、flows.networkがホストするWasmEdgeランタイム環境で実行されます

flows.networkは、WasmEdgeの機能を実行し、外部API( GitHubなどに接続するためのユーザーインターフェース( UI とホスティングサービスを提供するPaaSです無料版も提供しています。もちろん、ご希望に応じて独自のWasmEdgeクラウドサービスを実行することもできます。

接続されたGitHubリポジトリマージリクエストが作成される、ストリーム関数がトリガーされます。ストリーム関数はマージリクエストからパッチとファイルを収集し、ChatGPT/4にレビューと要約を依頼します。その結果はコメントとしてマージリクエストに返されます

ボットはマージリクエスト内の新しいコミットと更新を継続的に監視し必要に応じてマージリクエスト内のコードレビューコメントを更新上書きします。

ボットはマージリクエストのコメント欄にマジックフレーズを入力することで起動できます例えばレビュアーがボットにサマリーを更新させたい場合は、 flows summarize 」とコメントするだけです

独自のロボットプログラムを作成する

独自のコード レビュー ボットを作成して展開するには 5 分以内次の3 つの簡単な手順に従ってください

ロボットテンプレートは2種類から選択できます。1つはマージリクエスト内の各コミットを要約するもの(つまりロボットを作成するもの)です。もう1つはマージリクエスト内の変更されたファイルをレビューするもの(つまりロボットを作成するもの)です。前者の方法の手順は以下のとおりです。

図4. テンプレートからロボットプログラムを作成する

1. flows.network にコードレビューボットテンプレートを読み込みます。このテンプレートにはボット自体のソースコードが含まれています。ソースコードはGitHubアカウントにクローンされているので、後で変更やカスタマイズが可能です 「作成してデプロイ」をクリックしてください。

2. OpenAI APIキーをロボットプログラムに提供します以前にAPIキーを保存している場合は、この手順をスキップしてキー再利用できます

3.ボットにGitHubへのアクセスを許可します。`github_owner`と`github_repo`は、ボットがマージリクエストをレビューする対象のGitHubリポジトリを指します 承認をクリックして、ボットにGitHub上で必要な権限を付与します

下の画像は上記の手順23を示しています

GitHub が提供する OAuth UI を使用して、ボット プログラムがWasmEdge/WasmEdge-db-examples GitHubコード リポジトリにアクセスできるように承認します

これで完了です。github_owner /github_repoリポジトリ新しいマージリクエストを作成してボットがどのように動作するかを確認しましょう

カスタマイズされたロボットプログラム

上記のプロセスでは、まずテンプレートからボットのソースコードを自分のGitHubアカウント(例: your_id/summary-GitHub-pull-requestsリポジトリクローンします次に、このソースコードからボットを作成します。自分のアカウント内でソースコードを変更することで、ボットの動作をカスタマイズまたは変更できます

flows.network が変更を受信して​​ボット プログラム (つまり、ストリーム関数)を再構築するボット プログラムのソース コードへの変更を GitHub にプッシュする必要があります

ボットプログラムをカスタマイズするために、いくつかの簡単なコード変更を加えることができますご自身のクローンリポジトリにあるソースコードファイル`src/github-pr-summary.rs`を以下のように変更してください。変更内容を GitHub にプッシュして、flows.network がそれを受信できるようにしてください

1.のモデルを選択してくださいロボットプログラムはデフォルトでGPT 3.5モデルを使用します。より高度なGPT-4モデルを使用できる場合は以下のソースコード GPT35Turbo GPT4 変更してください。GPT4はコードレビューの精度が向上しますが、コストは高くなります。

 static MODEL : ChatModel = ChatModel::GPT35Turbo; // static MODEL : ChatModel = ChatModel::GPT4;

2. ChatGPTのヒントを設計します。例えば、ChatGPTを経験豊富なJava開発者のように動作させ、Javaソースコードファイルをレビューさせることができます。カスタムヒントを使用すると、ボットがコードの特定の側面セキュリティ問題やパフォーマンスなどに焦点を当てるように指示できます。また、変更を提案するコードスニペットを提供したり、セキュリティ問題の重要なポイントを列挙したりするなど特定の種類のレビューコメントヒントを与えることもできます以下のコードはテンプレートからのヒントです。多くのヒントライブラリからヒントを得ることができます

 let chat_id = format!("PR#{pull_number}"); let system = &format!("You are an experienced software developer. You will act as a reviewer for a GitHub Pull Request titled \"{}\".", title); let mut reviews: Vec<String> = Vec::new(); let mut reviews_text = String::new(); for (_i, commit) in commits.iter().enumerate() { let commit_hash = &commit[5..45]; let co = ChatOptions { model: MODEL, restart: true, system_prompt: Some(system), retry_times: 3, }; let question = "The following is a GitHub patch. Please summarize the key changes and identify potential problems. Start with the most important findings.\n\n".to_string() + truncate(commit, CHAR_SOFT_LIMIT);

3.ボットよりユーザーフレンドリーにしましょう。以下のソースコード内の「 Hello, I am a code review bot on flows.networkで始まる文を変更するだけで、ボットのマージリクエストコメントの内容とスタイルを変更できます例えばコミュニティメンバー向けのカスタムグリーティングを追加できます。

 let mut resp = String::new(); resp.push_str("Hello, I am a [code review bot](https://github.com/flows-network/github-pr-summary/) on [flows.network](https://flows.network/). Here are my reviews of code commits in this PR.\n\n------\n\n"); if reviews.len() > 1 { let co = ChatOptions { model: MODEL, restart: true, system_prompt: Some(system), retry_times: 3, };

4.レビュー戦略をカスタマイズします。デフォルトでは、ボットはマージリクエスト内のすべての変更されたファイルとコミットをレビューします。ソースコードを編集することで、特定のファイルのみ、または特定の開発者による変更のみをレビューするように設定できます。

複数のコードリポジトリボットを使用する

1つのコードリポジトリでボットが正常に動作するようになったらリポジトリコードを確認することをお勧めしますもちろんテンプレートを使用してリポジトリごとに異なるボットをデプロイすることも可能です。ただし、この場合、各ボットが独自のソースコードを管理する必要があり、管理が困難になる可能性があります。同じボットのソースコードを使用して複数のボットを作成することもできます。flows.networkではボットを「フロー呼びます

まずストリームを作成をクリックしてボットプログラムのソースコードをそのストリームにインポートします。ボットプログラムのソースコードは、テンプレートからクローンしたGitHubリポジトリにあります。マージリクエストのレビューのためにボットプログラムをデプロイするリポジトリと混同しないようにご注意ください

次に 詳細セクションで、ボットがマージリクエストを確認する対象の GitHubリポジトリを指すように github_owner と github_repo 設定を追加できます

以下の図は、「テンプレートから複製された既存のロボット プログラムソース コード ライブラリから新しいロボット プログラム (フロー)を作成する」手順を示しています


最後にボット プログラム (ストリーム)に OpenAI API キーへのアクセスを許可し、ボット プログラムを対象の GitHub コード リポジトリにデプロイするプロセスを完了します

次は何?

AI支援によるコードレビューは急速に進化する分野です。CNCFのWasmEdgeは、コードレビューボットアプリケーションのための効率的なランタイム環境を提供します。コミュニティはボットテンプレートの改善に向けて、多くの新しいアイデアを実験しています。近い将来に期待される改善点をいくつかご紹介します。

  • Claude、PaLM、その他の LLM など、コーディング タスク用の他の大規模言語モデル (LLM) のトレーニングをサポートします。
  • CVE データベースでトレーニングされた Llama モデルなどの微調整されたモデルをサポートします。
  • 問題追跡ツールやプロジェクト管理ツールなどの他の R&D 管理ツールと統合します。
  • GitHub 以外のコード ホスティング サービスをサポートします。

オープンソース ソフトウェア リポジトリのコード品質と開発者の生産性を向上させるには、今が最適なタイミングです。

原題:オープンソースプロジェクト向けの ChatGPT 搭載コードレビューボット、著者: Miley Fu