イリノイ大学アーバナ・シャンペーン校の科学者たちは、書かれた指示に応答する OpenAI のチャットボット、ChatGPT を利用して、多額の費用をかけずにソフトウェアのバグを修復しました。
大学院研究助手である Chunqiu Steven Xia 氏と、コンピュータサイエンスの准教授である Lingming Zhang 氏は、最近のプレプリント論文「会話を続ける: ChatGPT を使用して 337 個のバグのうち 162 個を 0.42 ドルで修正」のタイトルで驚きの結末を公開しています。
確かにもっと払うこともできます。
2 人の研究者は、プログラミングのバグを自動的に修正する技術の開発に重点を置いた新しい分野である自動プログラム修復 (APR) の改善に着手しました。
彼らの論文によると、従来のAPR技術は、多様性に欠けるパッチを生成する傾向があり、多くの手作業による微調整が必要になるという。LLMを用いた最近の研究では、より良い結果が得られているものの、基本的な技術は依然として同じである。つまり、初期入力サンプルから多数のパッチを生成し、それぞれを検証するという手法である。
彼らは、このアプローチは誤ったパッチを繰り返し生成し、失敗から学ぶことができないと主張している。そして、これは時間と計算リソースの面で非常に現実的なコストを伴う。
シア氏とチャン氏は、「ChatRepair」と呼ばれる自動バグ修復プロセスを開発しました。このプロセスは、ソフトウェアテストの失敗に関する情報を組み込み、会話入力だけでなく、成功と失敗のプロセスを通して学習します。論文に添付されている図からもわかるように、「HAL、バグを修正して」と言うよりも少し複雑ですが、難解なエラーメッセージよりはましかもしれません。
ChatRepair会話フロー図 - クリックして拡大
「既存の LLM ベースの APR 技術のようにバグのあるコードに基づいて直接パッチを生成するのではなく、ChatRepair は、パッチ生成において LLM をさらに支援するための貴重なテスト失敗情報も提供します」と研究者らは論文で説明しています。
さらに、従来の LLM ベースの APR 技術のように同じプロンプトから継続的にサンプリングするのではなく、ChatRepair は会話履歴を追跡し、プロンプトを介して同じバグの以前のパッチ適用の失敗と成功からさらに学習します。
コードは間違っているかもしれないが、役に立つ
Xia氏とZhang氏は、誤ったパッチと関連するテスト失敗データを統合することで、モデルがコードの改善を導き出すにつれて、ChatRepairに入力するプロンプトを改良できることを示しました。これにより、同じ間違いを繰り返すことを防ぐと同時に、妥当なパッチのバリエーションを生成することで、正しい修正の可能性を高めることができます。
The Register宛てのメール(ChatGPT が書いたものではないことは確か) の中で、Xia 氏はテスト失敗データの追加が ChatRepair の改善に大きく貢献したと述べています。
「テスト失敗エラーや失敗したテスト名といった有用な情報を含めることで、バグの種類(例:NULLポインター例外)やコードの正しい動作の予測といった追加情報が得られることが分かりました」と彼は説明した。「このようなテスト失敗情報を活用しない従来のAPRツールと比較して、ChatRepairはChatGPTの強力な理解能力を活用して、より多くのバグを修正します。」
- ChatGPTがあなたの仕事を狙っています ― 少なくともひどい仕事は
- 欧州のプライバシー規制当局はイタリアのChatGPT禁止を嗅ぎつけ、ピザをその行動とみなす
- FTCはOpenAIの「偏った、欺瞞的な」GPT-4を凍結するよう要請
- OpenAIのボットを統合したいとお考えですか?ソフトウェアセキュリティスキャナSocketでそれがどのように機能したかをご紹介します。
Xia氏は、この情報を組み込むことの価値は、テスト失敗データなしでChatGPTを実行したベースライン比較で確認できると述べました。テスト失敗データにアクセスすることで、修正されたバグの数が40%以上増加したとのことです。
さらに良いことに、同じ効果のないパッチを繰り返し生成しないことにより、研究者は冗長な API 呼び出しと無駄な GPU 実行時間のコストを回避できます。これは、OpenAI のモデルを自社製品に統合する方法を模索している人々が共通して懸念していることです。
「コストを抑えるために、ChatGPTの会話的な側面を活用しました。これにより、以前の出力を追跡し、過去の履歴と私たちから提供されたフィードバック(テスト失敗情報)に基づいて将来の生成を調整することができます」とシア氏は説明した。
「この機能を使用して、以前に生成された誤ったパッチを ChatGPT に提供することで、同じ誤ったパッチを何度も繰り返しサンプリングすることを避け、サンプル数を削減し、バグを修正するためのコストを削減できます。」
Xia 氏は、APR は開発者の労力を最小限に抑えてソフトウェア バグの修復を完全に自動化することを目指しているものの、その目標にはまだ遠いと述べた。
「ChatRepairは、このような修復プロセスが会話で実現できることを初めて示しました」とシア氏は述べた。「人間の開発者も関与することで、修復プロセスをスピードアップし、さらに優れたパフォーマンスを実現できると考えています。」
これを実現するために、今後の取り組みでは、ChatGPTのような強力なLLMと人間の開発者との間のダイナミクスにさらに重点を置き、人間の直感とコードベースの理解をさらに追加して、より効果的なバグ修正を実現する必要があります。」®