オープンソースプロジェクト向けの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の信用リスク管理の実践

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

推薦する

2018年のAIトレンドはこちら

ビッグデータの計算分析は決して時代遅れではありません。それどころか、データ量が増え続けるにつれて、デ...

人工知能が医療画像をどのように変えるか AI は医療画像の世界における第二の目となる

人工知能は多くの分野に影響を及ぼしています。しかし、いくつかの大きな変化が起こっており、その 1 つ...

推奨される 5 つのオープンソースオンライン機械学習環境

[51CTO.com クイック翻訳] 機械学習は、機械が直接プログラムされることなく学習できるように...

DeepMindの論文がNatureに掲載されました。大規模なモデルが、数学者を何十年も悩ませてきた問題に新たな解決策を発見しました。

今年の AI 界のトップトレンドである大規模言語モデル (LLM) は概念を組み合わせるのが得意で、...

新しい研究:ハトは人工知能と同様の方法で問題を解決する

オハイオ州立大学とアイオワ大学の研究者による研究で、ハトは問題を解決する際に人工知能に似た「力ずく」...

農業ロボットは好機を迎え、10億ドル規模のビジネスになりつつある

最近、国連経済社会局は「世界人口見通し2022」を発表しました。この報告書によると、世界の人口は20...

AIを活用してよりスマートな電子データ交換を実現

電子データ交換 (EDI) の歴史は、企業がより効率的に電子的にデータを交換する方法を模索し始めた ...

ワークステーションはクライアント側の大規模モデルの「幸せな家」です

MacでSiriを呼び出したことがありますか?とにかく一度も合格していない。 AIの世界では「ベテラ...

...

...

...

...

2020 年に AI、分析、データ ガバナンスに影響を与える 5 つのトレンド

企業レベルの人工知能は、まさに臨界質量に達しました。 AI があらゆるビジネスの主要な構成要素となる...

雪の結晶がどのように形成されるかは、これまでずっと謎でした。この物理学者は、その謎を解明したいと考えています。

テクノロジートラベラー北京ニュース 1 月 3 日:ケネス・リブブレヒトは、この寒い冬に暖かく快適な...