LocAgent:オープンソースのコード位置特定支援ツール
LocAgentとは?
LocAgentは、スタンフォード大学、イェール大学、南カリフォルニア大学などの研究機関によって共同で開発されたコードローカリゼーションフレームワークです。コードベースを有向異種グラフとして解析し、コードの構造と依存関係を捉えることで、開発者が迅速かつ正確に修正が必要なコード部分を特定するのを支援します。

コア技術
グラフベースのコード表現:LocAgentはコードベースを有向異種グラフとして解析します。ノードはコードベース内のエンティティ(ファイル、クラス、関数など)を表し、エッジはこれらのエンティティ間の関係(ファイル間のインポート関係、関数間の呼び出し関係、クラス間の継承関係など)を表します。このグラフ構造は、コード内に潜む複雑な依存関係を明らかにし、その後のコードローカリゼーションタスクのための堅固な基盤を提供します。
マルチホップ推論メカニズム:大規模言語モデル(LLM)のマルチホップ推論能力に基づき、LocAgentは複数層の依存関係を貫通し、問題のあるコードの根本原因を特定します。例えば、複雑なコードベースを扱う際、目標コードが問題の説明で明示的に言及されていなくても、LocAgentはグラフ構造を通じて推論し、関連するコードエンティティを見つけることができます。
スパース階層インデックス:LocAgentはスパース階層エンティティインデックスによって検索能力を強化します。このインデックス機構は、グラフの各ノードに対して、エンティティIDに基づくインデックス、エンティティ名に基づくインデックス、BM25アルゴリズムに基づく転置インデックスなどを作成します。これらのインデックスにより、LocAgentは数秒以内に問題記述に関連するコードエンティティを迅速に特定でき、大規模なコードベースでも高效的なパフォーマンスを維持できます。
主な機能
問題コードの迅速な特定:自然言語で記述された問題(エラーメッセージ、機能リクエスト、パフォーマンス問題、セキュリティ脆弱性など)に基づいて、LocAgentはコードベース内の修正が必要な特定のファイル、クラス、関数、またはコード行を迅速に特定できます。
多様な問題タイプのサポート:LocAgentは、エラー修正、機能追加、パフォーマンス最適化、セキュリティ脆弱性の修正など、多種多様なソフトウェア開発・保守タスクに対応しています。
智能的な依存関係分析:コードエンティティ間の複雑な呼び出し関係を自動的に追跡します。
パフォーマンス
SWE-Bench-Liteデータセットにおいて、LocAgentがQwen2.5-32Bモデルを使用した場合、ファイルレベルの特定精度は92.7%に達し、Claude-3.5の86.13%を大幅に上回りました。
Loc-Benchデータセットにおいて、LocAgentは84.59%のAcc@5と87.06%のAcc@10のファイルレベル特定精度を実現しました。
LocAgentのコスト効率も非常に高く、Qwen2.5-7Bモデルを使用した場合、サンプルあたりのコストはわずか0.05ドルで、Claude-3.5の0.66ドルと比較してコストが約86%削減されました。
応用シーン
エラー修正:エラーの原因となるコード位置を迅速に特定し、デバッグ時間を短縮します。
機能追加:開発者が新機能を追加する必要があるコード位置を特定するのを支援します。
パフォーマンス最適化:パフォーマンスに影響を与えるコード部分を特定し、最適化を行います。
セキュリティ脆弱性の修正:セキュリティ脆弱性に関連するコードを迅速に発見し、速やかに修正します。
技術原理
グラフベースのコード表現
LocAgentはコードベースを有向異種グラフとして解析します。ノードはコードエンティティ(ファイル、クラス、関数など)を表し、エッジは呼び出し関係や継承関係などの依存関係を表します。この構造は、複雑なコードベースの階層構造と意味的関連を捉えることができます。
多層インデックス検索システム
エンティティIDインデックス:精确なマッチングをサポートします(特定のクラスやメソッドの検索など)。
セマンティックあいまいインデックス:BM25アルゴリズムに基づき、自然言語クエリ(「注文の支払いを処理するロジック」など)を可能にします。
構造特徴インデックス:コードスケルトンの特徴(関数のパラメータリストなど)により「構造による類似検索」をサポートします。
3つの主要な智能ツール
SearchEntity:キーワードによって智能スキャンを起動し、NLPを活用してコアエンティティを抽出してマッチング結果を返します。
TraverseGraph:呼び出しチェーンや継承チェーンなどの関係に沿ってマルチホップ探索を行い、複雑な依存関係を貫通します。
RetrieveEntity:エンティティの完全な属性(コード内容、ファイルパスなど)を取得し、詳細な分析を支援します。
LocAgentの使用方法
環境準備
依存関係のインストール:LocAgentはPython環境に依存しており、Python 3.8以降のバージョンが必要です。さらに、torch、transformersなどいくつかのPythonパッケージをインストールする必要があります。以下のコマンドでインストールできます:
pip install -r requirements.txt
コードベースのダウンロード:LocAgentはSWE-Bench_LiteやLoc-Benchなど、複数のデータセットをサポートしています。ニーズに合わせて適切なデータセットを選択し、ローカルにダウンロードできます。例えば:
git clone https://github.com/czlll/SWE-bench_Lite.git
コードベースの解析
グラフインデックスの生成:LocAgentはコードベースを有向異種グラフとして解析し、グラフインデックスを生成する必要があります。以下のコマンドで実行できます:
python parse.py --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index
ここで、--datasetはデータセット名を指定し、--repo_pathはコードベースのパスを指定し、--index_dirは生成されたグラフインデックスの保存先を指定します。
LocAgentの起動
スクリプトの実行:コードローカリゼーションのためにLocAgentを起動するには、以下のコマンドを使用します:
python run.py --localize --dataset czlll/SWE-bench_Lite --repo_path ./SWE-bench_Lite --index_dir ./index --use_function_calling True
ここで、--localizeはローカリゼーション処理の起動を示し、--use_function_callingはLLMの関数呼び出し機能を有効にします。
結果の評価
ローカリゼーション結果の評価:ローカリゼーション完了後、結果はJSONLファイルに保存されます。LocAgentが提供する評価ツールを使用して結果を評価できます。例えば:
python evaluation/run_evaluation.py --result_file ./results.jsonl
ここで、--result_fileはローカリゼーション結果ファイルのパスを指定します。
Githubプロジェクト:https://github.com/gersteinlab/LocAgent
脚本プランナー▸
AIアプリ
AIニュース 