1741805024
2025-03-12 17:26:00
の最初の発売を発表できることを楽しみにしています 微妙な、LLMSに正確なコールグラフコンテキストを提供するオープンソースPythonライブラリ。関数関係を分析することにより、コード依存関係の構造化された表現を生成します。これは、AIコーディングアシスタントがコードベースについてより多くの情報に基づいた決定を下すのに役立つ、より豊かなコンテキストレイヤーを構築するための最初のステップです。
AIコーディングに関連するコンテキストが必要な理由
AIコーディングアシスタントは、コード構造の理解に関しては驚くほど原始的です。これらのアシスタントに電力を供給するLLMSは、開発者が当たり前のことと思っている言語サーバープロトコル(LSP)と同等のものではありません。定義にジャンプしたり、参照を見つけたり、型階層を理解したりすることはできません。
代わりに、限られたコンテキストウィンドウを持つテキスト(トークン)のチャンクとしてソースコードを調べ、埋め込みを使用します。これは、統計パターンをキャプチャしますが、実際のプログラム構造を保存しないベクトル表現です。
この「AIの開発ツール」の欠如は大きなギャップを生み出します。パターンマッチングとローカル変換に優れている間、コンパイラーと開発者が使用する基本的なプログラム分析機能がありません。これらの機能には、フォローコントロールフロー、データ依存関係の理解、ランタイムの動作に関する推論が含まれます。
これは、LLMが関数の署名または動作を変更することを提案する場合、変更の結果としてその関数に依存するか、または壊れる可能性があるコードベースの他の部分を確実に識別できないことを意味します。彼らは次のような基本的な質問に苦労しています 「この返品タイプを変更した場合、何が壊れますか?」 または 「この関数に依存するコンポーネントはどれですか?」 彼らはコードベースの本当の意味的な理解を欠いているからです。
解決策は、圧倒的なLLMSではありません 全て 可能なコンテキスト – それは、特定のタスクごとに最も関連性の高いコンテキストを特定して提供することです。これは、特定の変更に重要な関数の関係と依存関係を正確に抽出することで行うことができます。
微妙なコードグラフの紹介
微妙なレバレッジの静的分析は、コードベースからコールグラフを抽出します。現在のAIツールで使用される限られたコンテキストウィンドウまたは埋め込みに依存するのではなく、ASTを解析して、関数関係の移動可能なグラフを構築します。結果は、実際のプログラムの動作をキャプチャする構造化された意味情報です。
ライブラリは2つの主要なインターフェイスを提供します。
initコールグラフを生成するためenrich特定の関数を照会するため。
init:コールグラフの初期化
# Create a call graph for your module
$ nuanced init .
init コマンドは、指定されたモジュール内のpythonファイルを分析し、 .nuanced 分析の結果を保存するディレクトリフルコールグラフが呼ばれるファイルに書き込まれる場所 nuanced-graph.json、およびaを返します CodeGraphResult グラフまたは遭遇したエラーのいずれか。
enrich:関数関係のクエリ
# Find what a specific function calls
$ nuanced enrich app/helpers.py format_data
{
"app.helpers.format_data": {
"filepath": "/app/helpers.py",
"callees": [
".dict",
"app.utils.validate_input",
".str"
]
}
}
redichコマンドは2つの引数を取ります:(1)関数を含むPythonファイルへのパス、および(2)関数名(完全に資格のある名前ではなく、名前のみ)、そして EnrichmentResult 見つかったときに関数のコールグラフを含む、および遭遇したエラー(例: ValueError 複数の一致関数が存在する場合)。の結果とは異なり init、ファイルに書き込まれ、結果 enrich メモリに保持されています。
これにより、開発者が依存しているのと同じ構造化プログラムの理解にAIツールがアクセスできます。これは、埋め込みまたは正規表現の一致からの確率的推測ではなく、実際のコールパスと依存関係です。
関数の呼び出し関係を抽出することにより、NuancedはAIコーディングツールがインポートを解決し、効率的に照会できる構造化グラフを維持するのに役立ちます。
微妙なものが今日提供するもの
この最初のリリースは次のことに焦点を当てています。
- コールグラフ生成: 関数関係のクエリ可能なJSON表現を作成します
- 関数発見: 特定の機能とその依存関係を見つけます
- 単純なCLI: コード構造を探索するための使いやすいコマンド
始めましょう
Pythonバージョン> = 3.10ではNuancedがサポートされています。
# Install
$ uv tool install nuanced
# Initialize graph for current module
$ cd your_project
$ nuanced init .
# Query specific functions
$ nuanced enrich path/to/file.py function_name
グラフの更新
微妙なコールグラフは、それらがあなたにとって最も役立つときはいつでも更新できます。コミットフックで自動的に更新したり、デバッグ中に手動で実行したり、CIパイプラインの一部としてセットアップしたりする場合があります。たとえば、複雑な依存関係チェーンの調査中、モジュールのインターフェイスをリファクタリングする際、または最近の変更を視覚化するコードレビュー中に、コールグラフを更新できます。ライブラリを使用すると、開発プロセスを混乱させることなく、コード内の関係をキャプチャできます。
微妙なランニング
Nuanced Runsは、Python 3.10+がインストールされている場所にあります。特別な依存関係も複雑なセットアップもありません。ラップトップでコーディングする、CI、サンドボックスで実行する、またはクラウド環境に展開するかどうかと同じ方法で機能します。軽量設計により、互換性や環境固有の構成を心配することなく、あらゆるPythonプロジェクトにドロップすることができます。
微妙な環境で完全に実行され、外部からデータを送信することはないため、コード分析を完全に制御できます。独自のコードを使用していようと、デリケートなプロジェクトを使用している場合でも、システムを離れるデータなしでコールグラフを生成できます。ライブラリの最小要件により、簡単なセットアップとインストールにより、これらすべての環境で一貫したコールグラフ生成が保証されます。
アーキテクチャ:ジャービスに建設
微妙な構築を開始したとき、Pythonコールグラフ生成のための強固な基盤が必要でした。いくつかのツールを評価した後(PYCG、 ツリーシッタースタックグラフ、 収集、 scip-python、 そして pytype)、私たちは選びました ジャービス 出発点として。
Pythonの静的分析を構築しようとした人なら誰でも、動的輸入、モンキーパッチング、機能を変換するデコレーター、メタプログラムなど、課題を知っています。 Jarvisは、私たちが評価したほとんどのツールよりもこれらのPythonの癖をうまく処理します。
- それはほとんどのインポートパターンを正しく解決します(奇妙なパターンでも)
- 変数を介して通話を追跡し、属性を合理的にうまく追跡します
- 完全に適格な名前を再構築するのに十分なコンテキストを保存します
実際のコードベースを使用したテストでは、PYCGは大規模なプロジェクトで重要な接続またはタイムアウトを定期的に逃しましたが、Jarvisは優れたパフォーマンスを維持しました。それは完璧ではありません – Pythonの静的アナライザーはそうではありません – しかし、それは私たちに基づいて構築するための実用的な基盤を与えました。
いくつかの実用的な改善でジャービスを拡張しました。
- 奇形のPythonのより良いエラー処理
- グラフのさまざまな部分にわたる一貫した関数識別
- 開発者が実際にプロジェクトをナビゲートする方法で機能するパス解像度
- AIツール統合専用に設計されたよりシンプルなクエリインターフェイス
私たちの目標は、完璧な静的アナライザーを作成することではなく、実際に十分に機能するものを構築するために、AIツールに今日よりも良いコンテキストを提供することです。
ロードマップ
私たちは、より包括的なAIを搭載したコード分析ツールキットに向けて構築しています。将来の仕事には以下が含まれます:
- 関数純度分析: 状態修正の検出。
- コードの複雑さメトリック: リファクタリングのニーズを強調します。
- タイプの推論: パラメーターと返品タイプの抽出。
- デッドコード検出: 未使用関数を見つける。
- データフロートラッキング: 関数呼び出し全体で変数変換をマッピングします。
未来を形作るのを手伝ってください
正確な機能レベルの分析に焦点を当てており、ランタイムの洞察に向けて進化しています。フィードバックが必要です。AIツールにはどのようなコンテキストが必要ですか?大きなコードベースをナビゲートするときに、どのような問題に直面していますか?
Nuancedはオープンソースであり、人間の開発者とAIツールの両方のために構築されています。私たちはあなたを歓迎します:
私たちとつながります x または電子メール [email protected]。
#初期起動AIコーディングツールの微妙なコールグラフコンテキストレイヤー