このコーナーでは、2014年から先端テクノロジーの研究を論文単位で記事にしているWebメディア「Seamless」(シームレス)を主宰する山下裕毅氏が執筆。新規性の高い科学論文を山下氏がピックアップし、解説する。
Twitter: @shiropen2
Microsoft Researchに所属する研究者らが発表した論文「CodePlan: Repository-level Coding using LLMs and Planning」は、単なる一部のコード編集にとどまらず、リポジトリ全体のコーディング作業を計画的に自動編集するための大規模言語モデル(LLM)を使用したフレームワークを提案する研究報告である。
近年、LLMによるプログラミングの自動化が進展を見せている。「Amazon Code Whisperer」「GitHub Copilot」「Replit」などのツールは、自然言語の意図やコードの文脈を元にコードの補完や、自然言語の指示に基づく編集を行うために広く使用されている。
しかし、これらのプログラミング補助ツールは、小規模なコーディング問題のサポートに特化しており、リポジトリ全体の変更には対応が難しいのが現状である。なぜなら、リポジトリ内のコードは相互に関連しているため、全体を一気に考慮するのは困難だからである。
例として、特定のライブラリの新バージョンがリリースされ、APIの仕様が変更された場合、そのライブラリを使用しているプロジェクト全体での変更が必須となる。これは、単に1つの関数やメソッドを変更するだけではなく、ライブラリの変更に影響を受ける全てのコード部分を確認し、適切に更新する作業が求められる。
この問題を解決する新たなフレームワークとして「CodePlan」を提案する。CodePlanは複数のステップから成る計画を作成し、その計画に基づいてコードの編集を行う。
リポジトリ全体のコードを調査し、どの部分が他の部分にどのような影響を与えるかを分析する。その情報に基づき、どの部分をどの順序で修正すべきかの「計画」を策定。その計画に従い、コードの各部分を順に修正していく。
具体的には、グラフ構造とLLMを組み合わせて実現している。この文脈の「グラフ構造」とは、棒グラフや円グラフのようなデータの視覚化とは異なり、対象をノード(頂点)とエッジ(辺)で表現したデータ構造のことを指す。
このグラフでは、ノードはLLMが実施すべき特定のコード編集を示しており、エッジはある編集の完了後に次に行うべき編集の関連性や順序を示している。
このようなグラフ構造を用いることで、CodePlanは編集作業の流れや依存関係を効率的に追跡・管理できる。このグラフは動的に更新されるため、CodePlanはコード編集をリアルタイムで監視し、必要に応じてグラフを更新して、新たな編集のタスクや関係性を追加できる。
全てのステップが完了した後、変更されたリポジトリが正しいかどうかを専門のツールで検証する。問題が検出された場合、その情報を基に計画を見直し、作業を継続する。
「gpt-4-32kモデル」を活用して、C#のパッケージ移行とPythonの時系列に基づくコード編集という2つのリポジトリレベルのコーディングタスクを試験した。1つ目のタスクは、C#で書かれたソフトウェアリポジトリで特定のパッケージやライブラリを新しいバージョンや別のものに変更する場合を指す。2つ目のタスクは、Pythonのリポジトリで過去のコード変更履歴を参照してコード編集を行う場合を指す。
実験結果から、CodePlanは期待される結果や正確な編集結果と高い一致性を示した。これは、CodePlanがコード編集タスクを高精度で行えることを示唆している。さらに、テスト対象となった6つのリポジトリのうち、CodePlanを使用した5つのリポジトリが正当性の検証をクリアした。これは、CodePlanによる編集後のコードがエラーなく正確に動作することを意味する。
Source and Image Credits: Ramakrishna Bairi, Atharv Sonwane, Aditya Kanade, Vageesh D C, Arun Iyer, Suresh Parthasarathy, Sriram Rajamani, B. Ashok, Shashank Shet. CodePlan: Repository-level Coding using LLMs and Planning
Copyright © ITmedia, Inc. All Rights Reserved.
Special
PR