日本語版
最新ニュース
科学&テクノロジー

Rustassistant:LLMSを使用してRustコードのコンピレーションエラーを修正する

フリードリケニードナー、Microsoft Research AI Frontiersのプリンシパルテクニカルリサーチプログラムマネージャー:次の講演では、LLMの能力を活用してコードを理解および作成する2つのプロジェクトを組み合わせています。どちらも、開発者が安全な低レベルプログラミングの困難に取り組むのを支援することを目指しています。レガシーCコードのメモリの安全性を確保するため。もう1つは、開発者が錆のコンピレーションエラーを自動的に修正するためのツールであるRustassistantを提示します。 Aseem Rastogi: こんにちは、私の名前はAseem Rastogiであり、Microsoft Researchのスケーラブルなソフトウェアエンジニアリング組織の将来の研究者です。 「メモリセーフティのためのLLM支援」という論文についてお話しします。この論文は、今年5月後半に第47回のソフトウェアエンジニアリング会議で発表されます。 CやC ++などの低レベルの言語でのメモリ安全性の欠如は、ソフトウェアセキュリティの脆弱性の主要な原因の1つです。たとえば、Microsoftの調査では、Microsoftが毎年CVEを修正および割り当てるセキュリティバグの70%がメモリの安全性の問題によるものであると推定しました。研究者は、たとえばCの安全な方言を提案しています。たとえば、追加のソースレベルの注釈の助けを借りて、パフォーマンスのオーバーヘッドが低いことでメモリ安全保証を提供します。ただし、これらの注釈を追加するコストとそれらを有効にするために必要なコード再構築は、これらのツールの採用におけるボトルネックになります。一般に、実際のソフトウェアへの正式な検証の適用は、同じ課題に直面しています。 私たちの論文では、コードの再構築のタスクと推測のタスクを支援するための前提条件の大規模な言語モデルの使用を調査します。 n 要素。この関数のメモリの安全性について推論するために、チェックされたCには注釈が必要です p。そのような注釈の1つは、ここに示されているとおりです。これはコンパイラにそれを伝えます p 少なくともアレイです n この関数でメモリの安全性を確保するのに十分な要素。また、この関数の発信者に適切なサイズの配列を渡さなければならないという明示的な義務を課すのにも役立ちます。 私たちの目標は、LLMSの助けを借りてそのような注釈を推測することです。この問題では、LLMSは完璧なマッチのように見えます。シンボリックツールの実際のコードと複雑なコードパターンに関する推論をエンコードすることは困難です。一方、LLMは、実際のコードであっても、プログラマーが持っているものと同様の途方もないコードの理解と推論機能を実証しています。第二に、LLMの幻覚は誤った注釈につながる可能性がありますが、記憶の安全性を損なうことはできません。注釈がコードに追加されると、チェックされたCコンパイラは、注釈が正しくない場合でもメモリの安全を保証します。このようにして、私たちは両方の世界のベストを獲得します! ただし、大規模なコードベースでのプログラム全体の変換のためにLLMSを使用することは、別の課題を表しています。各プロンプトに関連するシンボリックコンテキストを追加しながら、LLMプロンプトに適合できる小さなサブタスクにタスクを分割する必要があります。別の言い方をすれば、LLMがプログラマーのように推論できるようにするためには、プログラマーがそうでなければ考慮するコンテキストを提供する必要があります。私たちの論文は、LLMSと連携して動作するプログラム依存グラフの助けを借りて、まさにそれを行うためのフレームワークを提示します。 MSAというツールにアイデアを実装し、最大20,000行のコードの範囲の実際のコードベースで評価します。 MSAは、最先端のシンボリックツールにはできない注釈の86%を推測できることがわかります。私たちの論文はメモリの安全に焦点を当てていますが、私たちの方法論はより一般的であり、LLMSを効果的に活用して正式な検証の使用を実際のソフトウェアに拡大するために使用できます。私たちはこの研究の方向性に本当に興奮しています。 次に、私の同僚のパンタジスは、プログラマーが錆を採用しやすくするためにLLMを活用していることを教えてくれます。ありがとう。 Pantazis Deligiannis: こんにちは、みんな。私はパンタジスです。今日、私は安全な低レベルのプログラミングのための大規模な言語モデルの力を活用することに関する私たちの作業を紹介します。具体的には、Rustassistantについての最近の論文に焦点を当てます。これは、LLMSを使用してRustで書かれたコードのコンパイルエラーを自動的に修正するツールです。この作業は、画面にリストされている他の個人と一緒に行われ、この春の後半にソフトウェアエンジニアリングに関する国際会議に掲載されます。 わかりました、飛び込みましょう!錆を使用した安全な低レベルプログラミングを気にするのはなぜですか?そのため、メモリと並行性の安全性保証を備えたRustプログラミング言語は、CやC ++などの従来の安全でない代替品をより低レベルのソフトウェアシステムを構築するための実行可能な選択肢としての地位を確立しています。これらの保証は、コンパイル時にメモリと並行性の安全性を強化する強力な所有権ベースのタイプシステムから得られます。ただし、Rustは、特に所有権、生涯、特性などの高度な言語機能に関連するコンピレーションエラーに遭遇する場合、開発者に急な学習曲線をもたらします。同時に、錆びは毎年ますます人気が高まっているため、重要なソフトウェアシステムを書くためにRustを採用する開発者がますます増えているため、Rustのコードを書くことの難しさに取り組むことが不可欠です。 Microsoft Researchでは、Rustassistantというツールを作成しました。これは、最先端のLLMSの力を活用して、Rust Compilationエラーの修正を自動的に提案することで開発者を支援しました。当社のツールは、プロンプトテクニックの慎重な組み合わせと、大規模な言語モデルとRustコンパイラの間の反復を使用して、高精度の修正を提供します。 Rustassistantは、GitHubの一般的なオープンソースラストリポジトリの実際のコンピレーションエラーで、約74%の印象的なピーク精度を達成することができます。 さて、Rustassistantが段階的にどのように機能するかを見てみましょう。最初のステップから始めましょう。コードの構築とビルドエラーの解析です。このようなエラーは、単純な構文の間違いから、複数のファイルに広がる錆コードの特性、寿命、または所有権ルールを含む非常に複雑な問題にまで及びます。したがって、開発者がコンパイルしないRustコードを書き込むと、Rustコンパイラはエラーコード、エラーの位置、およびこのエラーコードに関連するドキュメントと例を含む詳細なエラーメッセージを生成します。 このプロセスを説明するために、画面上のこの非常に簡単な例を見てみましょう。この場合、開発者は、より大きいまたは等しいオペレーターを使用して、コード内のカスタムVerbosityLevel Enumerationを比較しようとしています。ただし、Rust Compilerはエラーをスローし、このバイナリ操作を冗長レベルに適用できないと述べています。コンパイラは、このエラーの背後にある理由は、冗長レベルが錆でそのような比較を実行するために必要な特性を実装していないためであることを示唆しています。この詳細なエラーメッセージは、Rustassistantがこのステップでキャプチャするものであり、次の処理段階に向けて準備します。…

1746548869
2025-05-02 17:42:00

フリードリケニードナー、Microsoft Research AI Frontiersのプリンシパルテクニカルリサーチプログラムマネージャー:次の講演では、LLMの能力を活用してコードを理解および作成する2つのプロジェクトを組み合わせています。どちらも、開発者が安全な低レベルプログラミングの困難に取り組むのを支援することを目指しています。レガシーCコードのメモリの安全性を確保するため。もう1つは、開発者が錆のコンピレーションエラーを自動的に修正するためのツールであるRustassistantを提示します。

Aseem Rastogi: こんにちは、私の名前はAseem Rastogiであり、Microsoft Researchのスケーラブルなソフトウェアエンジニアリング組織の将来の研究者です。 「メモリセーフティのためのLLM支援」という論文についてお話しします。この論文は、今年5月後半に第47回のソフトウェアエンジニアリング会議で発表されます。

CやC ++などの低レベルの言語でのメモリ安全性の欠如は、ソフトウェアセキュリティの脆弱性の主要な原因の1つです。たとえば、Microsoftの調査では、Microsoftが毎年CVEを修正および割り当てるセキュリティバグの70%がメモリの安全性の問題によるものであると推定しました。研究者は、たとえばCの安全な方言を提案しています。たとえば、追加のソースレベルの注釈の助けを借りて、パフォーマンスのオーバーヘッドが低いことでメモリ安全保証を提供します。ただし、これらの注釈を追加するコストとそれらを有効にするために必要なコード再構築は、これらのツールの採用におけるボトルネックになります。一般に、実際のソフトウェアへの正式な検証の適用は、同じ課題に直面しています。

私たちの論文では、コードの再構築のタスクと推測のタスクを支援するための前提条件の大規模な言語モデルの使用を調査します。 n 要素。この関数のメモリの安全性について推論するために、チェックされたCには注釈が必要です p。そのような注釈の1つは、ここに示されているとおりです。これはコンパイラにそれを伝えます p 少なくともアレイです n この関数でメモリの安全性を確保するのに十分な要素。また、この関数の発信者に適切なサイズの配列を渡さなければならないという明示的な義務を課すのにも役立ちます。

私たちの目標は、LLMSの助けを借りてそのような注釈を推測することです。この問題では、LLMSは完璧なマッチのように見えます。シンボリックツールの実際のコードと複雑なコードパターンに関する推論をエンコードすることは困難です。一方、LLMは、実際のコードであっても、プログラマーが持っているものと同様の途方もないコードの理解と推論機能を実証しています。第二に、LLMの幻覚は誤った注釈につながる可能性がありますが、記憶の安全性を損なうことはできません。注釈がコードに追加されると、チェックされたCコンパイラは、注釈が正しくない場合でもメモリの安全を保証します。このようにして、私たちは両方の世界のベストを獲得します!

ただし、大規模なコードベースでのプログラム全体の変換のためにLLMSを使用することは、別の課題を表しています。各プロンプトに関連するシンボリックコンテキストを追加しながら、LLMプロンプトに適合できる小さなサブタスクにタスクを分割する必要があります。別の言い方をすれば、LLMがプログラマーのように推論できるようにするためには、プログラマーがそうでなければ考慮するコンテキストを提供する必要があります。私たちの論文は、LLMSと連携して動作するプログラム依存グラフの助けを借りて、まさにそれを行うためのフレームワークを提示します。 MSAというツールにアイデアを実装し、最大20,000行のコードの範囲の実際のコードベースで評価します。 MSAは、最先端のシンボリックツールにはできない注釈の86%を推測できることがわかります。私たちの論文はメモリの安全に焦点を当てていますが、私たちの方法論はより一般的であり、LLMSを効果的に活用して正式な検証の使用を実際のソフトウェアに拡大するために使用できます。私たちはこの研究の方向性に本当に興奮しています。

次に、私の同僚のパンタジスは、プログラマーが錆を採用しやすくするためにLLMを活用していることを教えてくれます。ありがとう。

Pantazis Deligiannis: こんにちは、みんな。私はパンタジスです。今日、私は安全な低レベルのプログラミングのための大規模な言語モデルの力を活用することに関する私たちの作業を紹介します。具体的には、Rustassistantについての最近の論文に焦点を当てます。これは、LLMSを使用してRustで書かれたコードのコンパイルエラーを自動的に修正するツールです。この作業は、画面にリストされている他の個人と一緒に行われ、この春の後半にソフトウェアエンジニアリングに関する国際会議に掲載されます。

わかりました、飛び込みましょう!錆を使用した安全な低レベルプログラミングを気にするのはなぜですか?そのため、メモリと並行性の安全性保証を備えたRustプログラミング言語は、CやC ++などの従来の安全でない代替品をより低レベルのソフトウェアシステムを構築するための実行可能な選択肢としての地位を確立しています。これらの保証は、コンパイル時にメモリと並行性の安全性を強化する強力な所有権ベースのタイプシステムから得られます。ただし、Rustは、特に所有権、生涯、特性などの高度な言語機能に関連するコンピレーションエラーに遭遇する場合、開発者に急な学習曲線をもたらします。同時に、錆びは毎年ますます人気が高まっているため、重要なソフトウェアシステムを書くためにRustを採用する開発者がますます増えているため、Rustのコードを書くことの難しさに取り組むことが不可欠です。

Microsoft Researchでは、Rustassistantというツールを作成しました。これは、最先端のLLMSの力を活用して、Rust Compilationエラーの修正を自動的に提案することで開発者を支援しました。当社のツールは、プロンプトテクニックの慎重な組み合わせと、大規模な言語モデルとRustコンパイラの間の反復を使用して、高精度の修正を提供します。 Rustassistantは、GitHubの一般的なオープンソースラストリポジトリの実際のコンピレーションエラーで、約74%の印象的なピーク精度を達成することができます。

さて、Rustassistantが段階的にどのように機能するかを見てみましょう。最初のステップから始めましょう。コードの構築とビルドエラーの解析です。このようなエラーは、単純な構文の間違いから、複数のファイルに広がる錆コードの特性、寿命、または所有権ルールを含む非常に複雑な問題にまで及びます。したがって、開発者がコンパイルしないRustコードを書き込むと、Rustコンパイラはエラーコード、エラーの位置、およびこのエラーコードに関連するドキュメントと例を含む詳細なエラーメッセージを生成します。

このプロセスを説明するために、画面上のこの非常に簡単な例を見てみましょう。この場合、開発者は、より大きいまたは等しいオペレーターを使用して、コード内のカスタムVerbosityLevel Enumerationを比較しようとしています。ただし、Rust Compilerはエラーをスローし、このバイナリ操作を冗長レベルに適用できないと述べています。コンパイラは、このエラーの背後にある理由は、冗長レベルが錆でそのような比較を実行するために必要な特性を実装していないためであることを示唆しています。この詳細なエラーメッセージは、Rustassistantがこのステップでキャプチャするものであり、次の処理段階に向けて準備します。

次のステップで、Rustassistantは、前のステップで生成されたこの詳細なエラー情報を取得し、このエラーに直接関連するコードの特定の部分を抽出することに焦点を当てています。画面上の例を見ると、コードスニペットは列挙に関連しています。 log_error 機能は、ツールによって自動的に抽出されます。これには、コードの問題のある行だけでなく、エラーを理解し解決するために必要なコンテキストを提供する他のコードスニペットも含まれます。このツールは、エラーコードや、比較を実行するための欠落している特性に関する添付のコンパイラの提案など、エラーの詳細もキャプチャします。これらの抽出されたコードスニペットとエラーの詳細は、LLMのプロンプトにパッケージ化されます。これにより、LLMは、コードベースの無関係な部分に圧倒されることなく、正確な修正を提案するために必要な重要な情報のみを受信することが保証されます。この慎重なローカリゼーションステップは、特に非常に大きなコードベースを扱う場合、効率と精度の両方に非常に重要です。

それでは、最後のステップに移動しましょう。ここで、Rustassistantは、エラーの詳細と関連するコードスニペットを含む慎重にローカライズされたプロンプトを大規模な言語モデルAPIに送信します。 LLMは、コードdiffとしてフォーマットされた提案された修正を生成します。つまり、効率のためのコードスニペット全体を含めるのではなく、新しい、編集された、または削除されたコード行のみが含まれます。たとえば、ビルドエラーの場合、LLMは、画面に示されているように、欠落している特性を列挙に追加することを提案します。この修正により、より大きなまたは等しい演算子を使用した比較が意図したとおりに機能するようになります。次に、Rustassistantはこれを提案した修正を解析し、CodeBaseの適切なファイルに変更を適用します。修正が適用されると、ツールは再度実行され、ビルドエラーが解決されたかどうかを確認します。コードがコンパイルされている場合、素晴らしいニュース!これでプロセスが完了し、単体テストを実行するなど、さらに検証することができます。

ただし、新しいエラーが表示された場合、または修正が問題を完全に解決しない場合、Rustassistantは更新されたコンテキストをLLMに送り返し、コードがエラーフリーになるまで繰り返します。また、この反復プロセスにより、当社のツールは、開発者の意図との正確性と整合を確保しながら、複雑でマルチステップの修正を処理できます。もちろん、ここで示した例は非常に単純なものですが、ツールがはるかに複雑なビルドエラーを修正できると想像できます。

要約すると、Rustassistantを使用して、開発者がRustコードベースのビルドエラーを自動的に修正できるように、どのように使用できるかについての簡単なウォークスルーを提示しました。私たちの論文では、GitHubの上位100のRustリポジトリでRustassistを評価し、実際の編集エラーで約74%の印象的なピーク精度を達成できることを示しました。 ICSEペーパーは、評価結果を詳細に議論するだけでなく、プロンプトの設計方法や、精度を失うことなく非常に大きなコードベースでRustassantをスケーリングするために開発したさまざまなテクニックなど、興味深い技術的な詳細にも貢献するため、お読みください。

聞いてくれてありがとう。

#RustassistantLLMSを使用してRustコードのコンピレーションエラーを修正する

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。