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

ブログ    

推薦する

...

私の国は自動運転のための最初の閉鎖された高速道路テスト環境を構築しました

1月21日、公安部交通管理科学研究所は、工業情報化部、公安部、江蘇省人民政府が共同で建設する「国家イ...

北京市、企業のコンピューティングパワー使用コストを削減するためのAIコンピューティングバウチャー実施計画を発表

10月11日、北京市経済情報化局は「人工知能コンピューティングパワーバウチャー実施計画(2023~2...

大企業が AI 関連の合併や買収に夢中になっていることについてどう思いますか?

[51CTO.com からのオリジナル記事] ご存知のとおり、AI は医療から旅行まで、あらゆる分...

IoTとAIの組み合わせがもたらす大きなチャンス

食器洗い機がどれくらいの時間稼働するか知っていますか? 多くの人はおそらく退屈だと言うでしょう。この...

国内初の大規模模造品対策訴訟:アリババクラウドが偽造同義千聞アプリを提訴、一審で勝訴

1月16日、中国における大型モデルの偽造品撲滅活動で初の成功事例が発表された。アリババクラウドとアリ...

...

優れた LLM アプリケーションを構築するための 4 つの重要なポイントのうち、どれを見つけましたか?

これらの提案により、LLM 申請の精度が向上し、適切な LLM を選択する方法についての考慮事項も含...

2024年以降の5つのAIトレンド

GPT-4 以降: OpenAI GPT-3 は、その自然言語機能で大きな話題を呼びました。 GPT...

マスク氏が「アイアンマン」のようなロボットを発売!テスラが世界最速のAIコンピューターを発表

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

機械学習でよく使われる7つの線形次元削減手法の概要

前回の記事では主に非線形次元削減手法についてまとめました。この記事では、一般的な線形次元削減手法につ...

OpenAIがGPTストアを正式に開始

1月11日、リーダーシップの混乱を経験した後、人工知能スタートアップOpenAIは製品とサービスのプ...

人工知能の大学が雨後の筍のように次々と誕生しています。そこでは何を教えるのでしょうか?どのように教えるか?

[[240090]] 2018年グローバル人工知能製品アプリケーション博覧会で、来場者がテーマポス...

GPT-3オープンソースのPutianバージョン:事前学習済みモデルGPT Neoと同等の再現

[[389187]] GPT-3 はオープンソースですか? Eleuther AI のオープンソース...