大規模なモデルの場合、ローカライズされたエンコード タスクが得意です。
タスクに複数の相互依存ファイルが含まれる場合、LLM ではこの問題を解決できません
マイクロソフトの研究者は、この目的のために CodePlan と呼ばれるツールを設計しました タスクに依存しないニューラル ネットワーク フレームワーク
写真
論文アドレス: https://arxiv.org/pdf/2309.12499.pdf
この論文では、CodePlan は複数ステップの編集連鎖を統合しています。これは、プログラム分析、計画、LLM を組み合わせた新しい手法です。
CodePlan がどのように設計されているかを詳しく見てみましょう。
パッケージの移行、静的分析またはテストのためのバグ レポートの修正、およびへの報告などのソフトウェア エンジニアリング活動においてコード ベースにタイプ ヒントやその他の規則を追加するには、コード リポジトリ全体を広範囲に編集する必要があります。
研究者は、「リポジトリ レベルのコーディング タスク」を可能にするためにこれらの活動を計画しています。
GitHub Copilot、Code Whisperer などのコーディング ツールを入手しました。大規模なモデル機能のサポートにより、局所的なコーディング問題に対する解決策がプログラマーに提供されます
ただし、実際には、「リポジトリ レベルのコーディング タスク」はより複雑であり、直接解決することはできません。 LLM、リポジトリ内のコードは相互依存しているため、リポジトリ全体が大きすぎてプロンプトに含めることができない可能性があります
この調査では、Microsoft チームはライブラリ レベルのコーディング フレームワークを使用しました。を計画問題として捉え、CodePlan と呼ばれるタスクに依存しないフレームワークを提案します。
CodePlan は、複数ステップの編集チェーン (プラン) を結合し、その各ステップがコードの位置で LLM を呼び出します。そのコードの場所のコンテキストは、リポジトリ全体、以前のコードの変更、およびタスク固有の指示から取得されます。
CodePlan は、増分依存関係分析、変更の影響の可能性分析、および適応型計画アルゴリズムに基づいた新しい組み合わせです
Picture
下の図は、複数ライブラリ API の変更を示しています。マイクロソフトの研究者は、この変更に従ってコード ベースを移行する任務を負っています。
図
図 3 の左側は、複数形ライブラリの使用に関連するコード ベースの部分を示しています
具体的には、Create.cs ファイルのメソッド func はライブラリの create_complex メソッドを呼び出し、Process.cs ファイルのメソッド Process.cs は func を呼び出します。
図
研究者は、図 1 のタスクの説明と関数本体を LLM に渡し、次のように変更された関数コードを生成します。図 3
LLM が create_complex API の呼び出しを正しく編集し、2 つの float の代わりに Complex 型のオブジェクトを返すことがわかります。価値観。
この編集により、メソッド func のシグネチャが変更されたことに注意してください。メソッドは Complex 型のオブジェクトを返すようになりました。
変更する必要があるのは、図の左下隅に示すように、Process.cs ファイル内の process メソッドなど、メソッド func の呼び出し元を変更する必要があることです。 3. process メソッドの本体を適切に変更しないと、コードはビルドされません。
図 3 の右下は、コンパイル中にエラーが発生しないように、リポジトリを一貫した状態にすることができる process メソッドへの適切な変更を示しています。
#研究者の主なタスクは、編集に必要な派生仕様を自動的に生成できる「リポジトリ レベルのエンコーディング システム」を確立することです
LLM 主導のライブラリ レベルのコーディング タスクは次のように定義されます:
図
CodePlan の全体的なフレームワークでは、入力にはリポジトリ、自然言語命令を通じて表現されたシード仕様、または一連の初期コード編集が含まれます。タスク、正しさのオラクル、および LLM
CodePlan は、各ノードが LLM が実行する必要があるコード編集タスクを表し、エッジが必要なターゲット ノードを表すプラン グラフを作成します。次に、ノードは
CodePlan を実行してコード編集を監視し、プラン グラフを適応的に展開します。
計画のすべてのステップが完了すると、Oracle によってリポジトリが分析されます。 Oracle がリポジトリを検証すると、タスクは完了です。エラーが見つかった場合、エラー レポートは、次のプラン生成と実行のシード仕様として機能します。
図
さらに、CodePlan アルゴリズムは依存関係グラフも維持します。図 4 は、依存関係グラフの構造を示しています。
写真
研究者による 2 つのストレージでの CodePlan の効果は次のとおりです。ライブラリ レベルのタスクで評価されました: パッケージ マイグレーション (C#) および一時的なコード編集 (Python)
各タスクは複数のコード ベースで評価されました。各コード ベースはすべて、複数のコード ベースに対する相互依存の変更を必要とします。ファイル (2 ~ 97 ファイル)。
図
これほど複雑なレベルのコーディング タスクを自動化するために LLM が使用されたことはこれまでにありませんでした。
調査結果は、CodePlan がベースラインよりもグラウンド トゥルースとの一貫性が高く、5/6 リポジトリがエラーのないビルドや正しいコード編集などの妥当性チェックに合格できることを示しています全体として、CodePlan は、複雑なライブラリ レベルのコーディング タスクを自動化し、生産性と精度の両方を向上させる有望なアプローチを提供します
#多くの課題にうまく対処し、効率的で信頼性の高い新しい可能性を切り開きます。ソフトウェア エンジニアリングの実践
参考:
https://www.php.cn/link/23b1f559d8bd157d0d741c83957ed4f2
以上がプログラマーたちは大喜びです! Microsoftは、168のコードベースにわたるLLMコーディングタスクを自動化するCodePlanを提案しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。