ホームへ戻る

GitHub Repo

Graphify 0.9.68、増分インデックスの欠落エッジを修正し、ファイル間の依存関係を保持

新バージョンでは変更されていないファイルのシンボルも解析に含め、部分更新後にエージェント向けナレッジグラフの接続が失われる問題を修正した。修正版はPyPIで公開済みだが、ほかのインポート解析の不具合や旧グラフの復元については、別途検証が必要だ。

GitLab, Inc. · MIT · Image source
zh-Hant

Graphifyは9月25日、増分更新でファイル間の関係が失われる不具合を修正したバージョン0.9.68をリリースした。影響を受ける処理には、更新、コードのみの抽出、監視モードが含まれる。エージェントがプロジェクトを継続的に変更すると、グラフにはノードがすべて残っていても、インポートや呼び出しの関係が徐々に抜け落ちることがあった。修正は[リリースノート](https://github.com/Graphify-Labs/graphify/releases/tag/v0.9.68)に記載されている。

このツールは、コードエージェント向けの検索可能なナレッジグラフを構築する。コードはローカルで構文木を解析するため、大規模言語モデルやベクトルデータベースは必要ない。ドキュメントなどのコンテンツには、別のセマンティック処理パイプラインが用意されている。エンジニアはグラフをたどって依存関係や呼び出し経路を調べられるため、関係の欠落はエージェントに渡すコンテキストに直接影響する。公式パッケージ名は y が2つ並ぶ `graphifyy` で、[PyPI](https://pypi.org/project/graphifyy/0.9.68/) では同日にアップロードされたソース配布物とwheelが公開されている。

この問題は当初、0.9.65を使っていたユーザーから報告された。Pythonファイル約130個、ノード3,277個のプロジェクトで、増分更新後の関係がクリーンビルドより65件少なくなった一方、ノード数は完全に同じだったという。報告によると、強制再ビルドでも64件不足しており、出力ディレクトリを削除してから再ビルドすると、ようやく一致した。これは特定の環境での観察であり、すべてのプロジェクトにおける欠落率を示すものではない。ただし、ノード数だけを確認しても、インデックスの完全性は検証できないことを示している。[問題の記録](https://github.com/Graphify-Labs/graphify/issues/3776)

根本原因はシンボル解決にあった。以前の処理では、今回再抽出したノードだけをインデックス化していたため、対象の関数が変更されていないファイルにあると、パーサーが見つけられず、接続を省略していた。修正では、変更されていないファイルのシンボルを読み取り専用のコンテキストとしてインデックスに含め、新たに抽出したデータを優先しながら、削除されたインポートをクリーンアップする仕組みも維持した。メンテナーによると、修正はリベース後にリリースへ取り込まれ、「インポートを削除した後に古い接続が復活しない」ことを確認する逆方向のテストも追加された。増分更新と解析のテストはPython 3.10および3.13で通過した。一方、相対インポートではない場合の `imports_from` ターゲットの正規化は別の問題として扱われており、すべての欠落エッジが解決したとは言えない。[修正に関する議論](https://github.com/Graphify-Labs/graphify/pull/3812)

この仕組みから推測すると、今回の修正により、エージェントが「グラフに経路がない」ことを「コードに依存関係が存在しない」ことと誤認するリスクは低減する。コードベースを継続的に監視するチームは、既存の環境で同じソースコードを使い、増分ビルドとクリーンビルドの関係集合を比較したうえで、新規追加、維持、削除の各ケースを検証するとよい。旧グラフを完全に復元できるかどうかや、大規模プロジェクトで追加のインデックスコストがどれほど発生するかは、引き続き実測が必要だ。

出典

  1. Graphify v0.9.68 發布紀錄
  2. graphifyy 0.9.68 套件與發布檔案
  3. Issue #3776:增量更新悄悄遺失跨檔案關係
  4. PR #3812:保留增量更新中的跨檔案關係