lightonai/next-plaid

NextPlaid, ColGREP: Multi-vector search, from database to coding agents.

このプロジェクトの概要

LightOn AI によって構築された 2 つの関連ツール:

  • NextPlaid — テキストのマルチベクター表現を保存し、REST API 経由で検索クエリを提供する検索データベース。マシン上でローカルに実行されます。
  • ColGREP — NextPlaid 上に構築されたコード検索ツール。"database connection pooling" のような質問を入力すると、プロジェクト内の関連コードを、従来の正規表現マッチングとセマンティックランキングを組み合わせて見つけます。すべてマシン上で実行され、コードが外部に送信されることはありません。

両方ともオープンソース(Apache-2.0)です。

ColGREP:セマンティックコード検索

ColGREP は単一の Rust バイナリです — サーバーなし、API なし、依存関係なし。Homebrew またはシェルインストーラーでインストールし、次に:

colgrep init /path/to/project   # インデックスを一度構築
colgrep "database connection pooling"   # 検索

インデックスは初回使用時に自動的に構築され、ファイルの変更に応じてインクリメンタルに更新されます。

2 つの検索モード:

  • 直接検索 — コードベースに対するセマンティックランキング。正規表現と組み合わせることもできます:colgrep -e "async.*await" "error handling" は、パターンと意味の両方で結果を絞り込みます。
  • エージェントモード — colgrep --agent "where is the database connection pool configured" は、サブエージェントのように動作する小型のローカルモデル(一度きり、2.5 GB)をダウンロードします:検索し、候補ファイルを読み、質問に答える正確な行番号を返します。大規模なコーディングモデルはこれに委任でき、自身のコンテキストウィンドウを節約できます。

ColGREP がコードをインデックスする方法

  1. 解析 — Tree-sitter がコードを関数、メソッド、クラスに解析します。
  2. 構造化 — 各コードユニットは構造化テキストに変換されます:シグネチャ、パラメータ、呼び出し、docstring、コード本体。
  3. 埋め込み — 小型モデル(lightonai/LateOn-Code-edge、1700 万パラメータ)がその構造化テキストをコードユニットごとに複数のベクトル(マルチベクター埋め込み)に変換します。CPU で実行。
  4. インデックス — NextPlaid はこれらのベクトルを量子化されたメモリマップドバイナリインデックスに保存します。

この構造化表現は、生のコードだけよりもモデルに豊富なシグナルを提供します。

モデル切り替え

埋め込みモデルを交換できます(colgrep set-model、--model フラグ、colgrep status でインデックスが何で構築されたかを確認)。各(プロジェクト、モデル)ペアには独自のインデックスがあるため、切り替えても既存のインデックスが壊れることはありません。プライベート HuggingFace モデルは HF_TOKEN で使用できます。

エージェント統合

Claude Code(--install-claude-code)、OpenCode、Codex、Hermes 用のフックをインストールします。Claude は完全なフックサポートを備えています。他の 3 つは現時点では基本的なものです。

ベンチマーク

Semble 公開コード検索ベンチマーク(1,251 クエリ × 63 リポジトリ × 19 言語)で、ColGREP は LateOn-Code モデルで NDCG@10 = 0.859、小型の edge モデルで 0.846 をスコアし、以前のモデル(semble potion-code-16M の 0.853)をわずかに上回りました。

なぜマルチベクターなのか?

従来のベクトル検索はドキュメント全体を1 つの埋め込みに圧縮します — 損失のある要約です。これはコードには不適切で、単一の関数には名前、パラメータ、docstring、制御フロー、依存関係があります。

マルチベクター検索は、ドキュメントごとに約 300 個の次元 128 の埋め込みを保持します。クエリ時には、各クエリトークンがすべてのドキュメントトークンの中で最良のマッチを見つけます(MaxSim と呼ばれる手法)。トレードオフ — より多くのストレージ — は、NextPlaid が量子化とメモリマップドインデックスで解決します。

NextPlaid:基盤となるエンジン

NextPlaid は、REST API を備えた汎用のローカルファーストマルチベクターデータベースです。機能:

  • 組み込みエンコーディング — 生のテキストを送信して結果を取得。別の推論サーバーは不要。ColBERT モデル用の ONNX Runtime が同梱されています。
  • メモリマップドインデックス — インデックスはディスク上にあり、必要に応じてページインされるため、RAM フットプリントは低く保たれます。
  • 積量子化 — 2 ビットまたは 4 ビット圧縮。100 万ドキュメントがメモリに収まります。
  • インクリメンタル更新 — 再構築なしでドキュメントを追加/削除。
  • メタデータ事前フィルタリング — 組み込み SQLite ストアの SQL WHERE 句はスコアリングの前に実行されるため、一致するドキュメントのみがスコアリングされます。
  • CPU 最適化、オプションの CUDA サポート。

FastPlaid との関係: FastPlaid は、大規模な単一パスワークロード向けの GPU バッチインデクサーです。NextPlaid は同じアルゴリズムを、ストリーミング取り込みとサービス提供に適した本番 API にラップしています。

クイックスタート:Docker コンテナ(CPU または CUDA イメージ)を実行し、Python クライアント(pip install next-plaid-client)を使用してインデックスを作成、ドキュメントを追加、検索、メタデータでフィルタリング、削除します。Swagger UI は http://localhost:8080/swagger-ui で利用できます。

API ベンチマーク

エンコーディング時間を含むエンドツーエンドで測定(モデルは API 内で実行)。セットアップ:GTE-ModernColBERT-v1 を NVIDIA H100 80GB で使用、top_k=100。BEIR データセットでのサンプル結果:

  • quora(522,931 ドキュメント):NDCG@10 = 0.8519、インデックス速度 105 ドキュメント/秒、GPU で約 21 QPS、CPU で約 18 QPS。
  • nfcorpus(3,633 ドキュメント):NDCG@10 = 0.3828、GPU で約 7 QPS。
  • scifact(5,183 ドキュメント):NDCG@10 = 0.7593。

完全なテーブルは 6 つのデータセットをカバーし、MAP、NDCG@10/100、Recall@10/100、スループット、レイテンシ百分位数を含みます。

モデル

任意の HuggingFace ColBERT スタイルモデルは、pylate-onnx-export を使用して ONNX 形式にエクスポートできます(デフォルトで FP32 と INT8 バリアント。INT8 は約 4 倍小さく高速で、品質損失は最小限)。すぐに使えるモデル:

モデル 用途
lightonai/LateOn-Code-edge コード検索、軽量
lightonai/LateOn-Code コード検索、正確
lightonai/mxbai-edge-colbert-v0-32m-onnx テキスト検索、軽量
lightonai/answerai-colbert-small-v1-onnx テキスト検索、軽量
lightonai/GTE-ModernColBERT-v1 テキスト検索、正確

結論

ColGREP は単一のバイナリでセマンティックコード検索を自分のマシンにもたらします。NextPlaid はその下にある再利用可能なマルチベクターデータベースです。ストリーミングサービスではなくバルク GPU インデックスが必要な場合は、姉妹プロジェクト FastPlaid が代替手段です。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト