Vera、AIエージェント向けのローカルファーストなコード検索(Rust, ONNX, 63言語, CLI + SKILL/MCP)

Reddit r/LocalLLaMA / 2026/3/28

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • Veraは、AIエージェントを支援するために特化して作られたローカルファーストのコード索引・検索ツールであり、既存のMCPコード検索ツールの一部で見られる評価品質の後退を回避し、摩擦を減らすことを目指しています。
  • 並列のBM25キーワード検索とベクトル類似度を組み合わせ、Reciprocal Rank Fusion(逆順位融合)で結果を統合したうえで、クエリと候補テキストを共同でスコアリングするクロスエンコーダのリランカーを適用して、検索品質を向上させます。
  • このプロジェクトでは、リランキングを用いた場合にMRR@10が0.60になるのに対し、ベクトル検索のみの場合は0.28であるとして、大きな品質向上を報告しています。
  • Veraは、クラウドストレージを要求したり、Qdrantのような外部システムの実行を必要としたりせずに、SQLite + sqvec + Tantivy(組み込み)を用いることで、完全にローカルで動作することを強調しています。
  • tree-sitterによる構造解析(.gitignoreと設定可能な .veraignore を使用)で63言語のコードをインデックス化し、CLIに加えてSKILL/MCP向けのモードを備えた単一の静的Rustバイナリとして提供されます。

SanityHarnessのコーディングエージェント評価やリーダーボードで、あなたも私を見かけたことがあるかもしれません。ここ数か月、調査・テスト・開発を重ねて、新しいツール「Vera」を作りました。これはAIエージェント向けに特化したコードのインデックス作成と検索ツールで、できるだけローカル・ファーストで、摩擦が少ないように設計されています。

https://github.com/lemon07r/Vera/

既存のコードのインデックス作成・検索ツールの多くは、重くて大げさです。最近約9種類のMCPツールをテストしたところ、ほとんどが実際にはエージェント評価(eval)のスコアを悪化させていることが分かりました。Serenaのようなツールは、評価に対して負の影響を与えました。きちんと機能して良い結果だった最も近い代替はClaude Contextでしたが、ストレージのためにクラウドサービスが必要だった(やだ)うえ、リランキングのサポートがありませんでした。リランキングの有無は、検索品質に大きな違いをもたらします。Roo Codeも残念ながら同じような問題があり、クラウドストレージが必要でした(またはローカルでqdrantを動かす複雑なセットアップ)加えて、リランキングのサポートがありません。

私は以前、誰かのコード検索ツールをフォークしたPampaxをメンテしていました。時間が経つにつれて、たくさんの改善を加えましたが、土台となるアップストリームはかなり脆かったのです。深く根の張ったバグ、疑わしい設計の選択、そしてどれだけパッチを当てても、新しい問題にぶつかり続けました。

そこで、「もっと良いものを作れたはずだ」と気づいたことをきっかけに、ゼロから作ることにしました。

コア

VeraはBM25のキーワード検索とベクトル類似検索を並列で実行し、それらをReciprocal Rank Fusionで統合した後、上位候補をクロスエンコーダでリランキングします。このリランキング段階が最大の差別化ポイントです。ほとんどのツールは候補を取得してそこで止まります。Veraは実際に、クエリと候補をセットで読み取り、関連性を共同でスコアリングします。違いは、リランキングありでMRR@10が0.60、ベクトル取得のみだと0.28です。

完全ローカルストレージ

私は複数のストレージバックエンド(LanceDBなど)を評価し、RustでSQLite + sqvec + Tantivyを採用することにしました。これは、私の全テストにおいて一貫して最速かつ最高品質の検索(取得)コンボでした。この解決策は埋め込み型で、別のqdrantインスタンスを立てる必要もなく、クラウドサービスや何か余計なものも不要です。ストレージのオーバーヘッドも小さく、インデックスは通常、インデックス対象のコードサイズの約1.33倍です。10MBのコード = 約13.3MBのデータベース。

63言語

Tree-sitterによる構造解析は、関数・クラス・メソッド・構造体を任意の行範囲ではなく、個別のチャンクとして抽出します。未対応のファイル拡張子もテキストのチャンク分割によりインデックス化されます。 .gitignoreが尊重され、さらに .veraignore で補足または上書きできます。

単一バイナリ、ゼロ依存

Pythonは不要、NodeJSも不要、言語サーバーも不要、Milvus/Qdrant用のDBサーバーも不要、言語ごとのツールチェーンも不要です。63個すべての文法をコンパイルした1つの静的バイナリのみ。APIモードではそれ以外は一切不要で、ONNXモードではONNXランタイムを自動的にダウンロードしてくれます。

ローカル推論

この部分は、このスレッドで最も関心を持たれるところだと思っています。正直なところ、最初は「あると嬉しい」程度のボーナス機能として始めたのですが、今ではツールの中核となる重要な部分になっています。しかも、あまりに速いので、私の新しいお気に入りの使い方でもあります。Veraには厳選したONNXモデルが付属しており、1コマンドでダウンロードできます(vera setup):

  • jina-embeddings-v5-text-nano-retrieval(239Mパラメータ): 埋め込み用
  • jina-reranker-v2-base-multilingual(278Mパラメータ): クロスエンコーダによるリランキング用

ローカル推論に最適なものを見つけるために、小さなモデルを調査しテストするのにかなりの時間を費やしました。この2つは、私のテストにおいて、精度とサイズの比率が大きく最も良い結果でした。

GPUバックエンドは選択または自動検出できます:CUDA(NVIDIA)、ROCm(AMD)、DirectML(Windows)、CoreML(Apple)、OpenVINO(Intel)。RTX 4080でONNXのCUDAを使ってVeraのコードベース全体をインデックス化すると、かかるのは約8秒です。参考までに、私がテストした最速の埋め込みプロバイダであるNebiusは、同じコードベースをQwen3-Embedding-8Bでインデックス化するのに56秒かかります。

CPUでも動きますが遅いです(Ryzen 5 7600X3Dで約6分)。可能ならGPUまたはiGPUをおすすめします。最初のインデックス作成後は、vera update .で変更されたファイルだけが再埋め込みされます。インクリメンタル更新はCPUだと数秒程度で済むはずで、他ならほぼ一瞬です。

モデルおよびプロバイダ非依存

Veraは完全にモデルに依存しないため、任意のローカル推論エンジン、またはリモートプロバイダのAPIに接続できます。OpenAI互換のエンドポイントなら、llama.cppのようなローカルのものも含めて何でも動作します。

ベンチマーク

曖昧な主張をせず、地に足のついた形で示したかったのです。ベンチマークデータ、再現ガイド、アブレーション研究はすべてリポジトリにあります。

同じワークロードに対する他のアプローチとの比較(v0.4.0、ripgrep/flask/fastifyにまたがる17タスク):

指標 ripgrep cocoindex-code vector-only Vera hybrid
Recall@5 0.2817 0.3730 0.4921 0.6961
Recall@10 0.3651 0.5040 0.6627 0.7549
MRR@10 0.2625 0.3517 0.2814 0.6009
nDCG@10 0.2929 0.5206 0.7077 0.8008

この比較以降、Veraはかなり改善されています。同じ21タスクスイート(ripgrep、flask、fastify、turborepo)でのv0.4.0と現在の比較:

指標 v0.4.0 v0.7.0+
Recall@1 0.2421 0.7183
Recall@5 0.5040 0.7778(約54%改善)
Recall@10 0.5159 0.8254
MRR@10 0.5016 0.9095
nDCG@10 0.4570 0.8361(約83%改善)

類似ツールは「トークン使用量を70〜90%削減」といった常軌を逸した主張をよくします。私はこれを自分でベンチマークしていないので、そんな根拠のない数字を適当に投げません(正直に言うと、決定論的にベンチマークするのはかなり難しいと思います)。ただし削減自体は事実です。こうしたツールは、肥大化した検索結果にトークンを燃やす代わりに、コードエージェントがコンテキストウィンドウをより効果的に使えるようになります。Veraも冗長なJSONではなく、トークン効率の良いMarkdownコードブロックをデフォルトにしており、出力サイズを約35〜40%削減します。

インストールと使い方

bunx @vera-ai/cli install # または: npx -y @vera-ai/cli install / uvx vera-ai install vera setup # ローカルモデルをダウンロードし、GPUを自動検出 vera index . vera search "authentication logic" 

コマンド1つでインストール、コマンド1つでセットアップして完了です。CLIとしてもMCPサーバーとしても動作します。Veraには、あなたのエージェントに「効果的なクエリの書き方」や、「いつ `rg` のようなツールに頼るべきか」を指示するエージェント用スキルファイルも付属しており、どんなプロジェクトにもインストールできます。GitHub上のドキュメントには、ここで触れていないことも含めて大抵の情報が載っています。

ユーザーの要望に基づく最近の追加事項:

  • MCP向けのDocker対応(CPU、CUDA、ROCm、OpenVINOイメージ)
  • セットアップの問題を診断するためのvera doctor
  • 不足しているローカルアセットを再取得するためのvera repair
  • バイナリの更新を調査して適用するためのvera upgrade
  • 自動アップデートのチェック

Discordサーバーのユーザーの皆さんに大きく感謝しています。バグの発見、提案、そして良いアイデアなど、多くの助けになりました。サポートや要望、あるいはLLMやツールについて雑談するだけでも構いませんので、ぜひ参加してください。 https://discord.gg/rXNQXCTWDt

投稿者: /u/lemon07r
[リンク] [コメント]
広告