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

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

翻訳者 |ブガッティ

レビュー | Chonglou

コードレビューは、現代のソフトウェア開発において重要な側面です。 GitHubワークフローでは、コードレビューはマージリクエスト( PR )が作成されたときに開始され PRが承認、マージ、または拒否されたときに終了しますレビュー担当者は通常、上級開発者またはアーキテクトです。これらはコードリポジトリにコミットされたコードが正確で、保守可能、スケーラブルかつ安全であることを保証するのに役立ちます。寄付されたコードの多くはコミュニティから来る可能性があるため、これはオープンソース プロジェクトにとって特に重要です

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

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

26,000 人の開発者が作成した700,000 件を超えるマージリクエストの調査よるとマージ リクエストのレビューには平均4以上かかります開発者は、マージリクエストを送信するたび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 にそれらを確認して要約するように依頼します。結果はマージリクエストへのコメントとして返されます

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

ボットはマージリクエストのコメントセクションにあるマジックフレーズによってトリガーされますたとえばレビュー担当者がロボットに要約を更新してほしい場合は、 フロー要約と注釈を付けるだけで済みます

独自のボットを作成する

独自のコードレビュー ボットを作成して展開するには 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にあるソース コード ファイルを変更するだけです flows.network が変更を取得できるように、必ず変更を GitHub にプッシュしてください

1.のモデルを選択しますボットはデフォルトで GPT 3.5 モデルを使用します。より高度な GPT-4モデルにアクセスできる場合は以下のソースコード GPT35Turbo 「 GPT4 変更してください。 GPT4 はより優れたコードレビューを提供しますが、コストが高くなります。

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

2. ChatGPT プロンプトを設計します。たとえば経験豊富なJava 開発者である ChatGPT に 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_owner および github_repo 設定を追加して、ボットがマージ リクエストを確認するターゲット GitHubリポジトリを指すようにすることができます。

次の図は、テンプレート (フロー)から複製された既存のボットソース コード リポジトリから新しいボットを作成する手順を示しています


最後にボット (フロー)が OpenAI API キーとボットをデプロイするターゲット GitHub リポジトリにアクセスできるようにするプロセスを実行します

次は何ですか?

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

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

今すぐオープンソース ソフトウェア リポジトリのコード品質と開発者の生産性を向上させましょう。

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


<<:  黄仁勲のNVIDIAの1兆ドル規模のビジネスを管理するクレイジーな方法:計画なし、レポートなし、階層なし

>>:  Antの信用リスク管理の実践

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

遅い二次アルゴリズムと高速なハッシュマップについての簡単な説明

みなさん、こんにちは!昨日、プログラミング面接の準備をしていて、アルゴリズムの基礎を学ぼうとしている...

逆転!清華大学の卒業生の死はグーグルのレイオフとは無関係、家庭内暴力の詳細が明らかに、男性は殺人罪で起訴された

地元警察は、ここ数日話題になっている「グーグルの人員削減により清華大学の夫婦が自殺」事件の詳細を発表...

AIRankingsが世界の大学AIランキングを発表

今年も大学入試シーズンがやってきました。私が大学受験をしていた頃には、この言葉が流行っていたのを覚え...

生物学的ニューラルネットワークから人工ニューラルネットワークへ

今日、人工知能について話すとき、私たちは数学モデルを使用してデータからパターンの表現を抽出することで...

カメラか LiDAR か?堅牢な 3D オブジェクト検出を実現するにはどうすればよいでしょうか?最新レビュー!

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

GPT-4Vがロボットの頭脳として機能すると、AIで計画を立てることができなくなる可能性があります

GPT-4V はすでに、Web サイトのコード設計やブラウザの制御に役立っています。これらのアプリケ...

人工知能はセキュリティの優れた防御線である

2021年を迎え、私たちは新しい働き方や新しい労働環境に慣れてきました。多くの人は、デジタル通信手段...

効果はGen-2を超えます! Byte の最新ビデオ生成モデルは、一文でハルクに VR メガネをかけさせます

一言で言えば、ハルクに VR メガネをかけさせるのです。 4K品質。パンダのファンタジーの旅これは、...

描いた場所に画像が動きます! Gen-2の新機能「マジックブラシ馬良」が大ヒット、ネットユーザー:緊急、緊急、緊急

動画生成AIはここまで進化したのか? !写真をスワイプするだけで、選択したターゲットが動きます。明ら...

シングルチッププロセッサの終焉?アップルとNVIDIAはマルチチップパッケージングに興味を持っており、相互接続技術が鍵となる

3月10日、Appleは2022年春のカンファレンスで、M1 Maxチップのアップグレード版であるM...

...

人工知能の時代、主役となるのは誰でしょうか?

[[382357]] 1990年代、米国はコンピュータ産業の早期発展の機会をいち早く捉え、デジタル...

解釈可能な機械学習のための Python ライブラリ

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

今後3年間で、人工知能は全国の小売業界に影響を与える大きな嵐となるでしょう。排除されてしまうのでしょうか?

10 年前、ほとんどの人は、今日では現金やカードを持ち歩かずに携帯電話だけを持って街を歩き回り、買...