【Show HN】Semble:エージェント向けのコード検索。grep より約 98% 少ないトークン数で実現。

2026/05/18 0:37

【Show HN】Semble:エージェント向けのコード検索。grep より約 98% 少ないトークン数で実現。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

改善された要約: Semble は、GPU、外部 API、高価なトランスフォーマーを必要とせず、AI エージェントが entire リポジトリから直ちに関連するコードを検出することを可能にする、高速で CPU だけのライブラリです。137M パラメータモデルの検索品質の約 99% を達成しながら、索引化は 200 倍高速、クエリ処理は 10 倍高速です。本ツールは完全にローカルで動作し、フルファイルの読み込みを回避することで従来の「grep-and-read」手法に比べてトークン使用量を約 98% 削減します。Semble は Model2Vec エンベディングと BM25 テキスト一致を融合させたハイブリッドランキングシステムを採用しており、相互順位フージョンと適応的加重によって強化されています。インストール方法として MCP サーバー(Claude Code などのツール向け)または pip/uv 経由のいずれもをサポートし、CLI(

semble search
semble find-related
)および Python API を直接提供します。主な機能には、ローカルファイルが変更された際の自動再索引化、ローカルパスおよび Git リポジトリの両方のサポートが含まれ、重量型 LLM ベースのコード検索ツールに対する軽量で低レイテンシーな代替手段となります。

本文

Semble はエージェント向けに設計されたコード検索ライブラリです。必要なコード断片を瞬時に返し、grep+read に比べてトークン数を約 98% 削減し、各ステップの遅延時間を短縮します。完全なコードベースのエンドツーエンドでのインデックス作成および検索には 1 秒以下しかかからず、コード特化型トランスフォーマーと比較してインデックス化速度は約 200 倍高速でクエリ速度も約 10 倍高速化し、かつ検索品質の 99% を達成しています(ベンチマーク参照)。すべての処理は CPU 上で実行され、API キーや GPU、外部サービスの利用は不要です。MCP サーバーとして動作させるか、AGENTS.md を経由してシェルから呼び出すことで、Claude Code、Cursor、Codex、OpenCode などあらゆるエージェントがリポジトリの任意の箇所に瞬時にアクセスできるようになります。

クイックスタート

あなたのエージェントは、コードを検索する必要があるたびに自動的に Semble を使用します。キーワードで grep 検索し完全なファイルを読み取る代わりに、自然言語でクエリを行います(例: "認証はどのように実装されていますか?")そして、関連するコンテキストのみを返されます。Semble は MCP サーバーまたは Bash ツールとして設定できます:

MCP

Claude Code に Semble を追加します(uv のインストールが必要):

claude mcp add semble -s user -- uvx --from "semble[mcp]" semble

他のエージェントハンデスを使用している場合は、Codex、OpenCode、Cursor およびその他の MCP クライアント向けのセットアップ手順については MCP サーバー セクションを参照してください。

Bash / AGENTS.md

まず Semble をインストールし、次に

AGENTS.md
または
CLAUDE.md
にコード検索スニペットを追加します:

pip install semble       # pip を使ってインストール
uv tool install semble   # または uv を使ってインストール

注記:Claude Code や Codex CLI サブエージェントの場合、MCP ではなく Bash インテグレーションを使用するか、併用してください。

Semble の更新については Updating を参照してください。

Semble がどれだけのトークン节省をもたらしたか気になった場合は、

semble savings
を実行して確認できます。詳細については Savings をご覧ください。

メイン機能

  • 高速: 平均的なリポジトリをインデックス化するのに約 250ms かかり、クエリへの回答には約 1.5ms です(すべて CPU で動作)。
  • 正確: ベンチマークにおける NDCG@10 は 0.854 で、コード特化型トランスフォーマーモデルと同水準でありながら、サイズとコストはfractionに過ぎません。
  • トークン効率的: 関連する断片のみを返し、grep+read に比べて約 98% トークンを削減します。
  • セットアップ不要: API キー、GPU、または外部サービスの必要なく、CPU だけで動作します。
  • MCP サーバー: Claude Code、Cursor、Codex、OpenCode およびその他の MCP 互換エージェント向けのドロップインツールです。
  • ローカルおよびリモート: ローカルパスまたは Git URL を渡すことができます。

MCP サーバー

Semble は MCP サーバーとして動作し、エージェントがあらゆるコードベースを直接検索できるようにします。リポジトリは必要な時にクローンされインデックス化され、インデックスはセッションのlifetime 동안 キャッシュされます。ローカルパスはファイル変更を監視し、自動的に再インデックスされます。

セットアップ

uv
のインストールが必要です。

Claude Code

claude mcp add semble -s user -- uvx --from "semble[mcp]" semble

Codex

~/.codex/config.toml
に追加:

[mcp_servers.semble]
command = "uvx"
args = ["--from", "semble[mcp]", "semble"]

OpenCode

~/.opencode/config.json
に追加:

{
  "mcp": {
    "semble": {
      "type": "local",
      "command": ["uvx", "--from", "semble[mcp]", "semble"]
    }
  }
}

Cursor

~/.cursor/mcp.json
またはプロジェクト内の
.cursor/mcp.json
に追加:

{
  "mcpServers": {
    "semble": {
      "command": "uvx",
      "args": ["--from", "semble[mcp]", "semble"]
    }
  }
}

ツール

ツール説明
search
自然言語またはコードクエリでコードベースを検索します。リポジトリをローカルディレクトリパスまたは https:// Git URL として渡します。
find_related
ファイルパスと行番号が与えられた場合、その位置のコードに意味的に類似する断片を返します。

Bash インテグレーション

MCP の代替手段として、Semble を Bash を介して呼び出すことができます。Claude Code および Codex CLI 用のサブエージェントにとっては、MCP ツールを直接呼び出せないため(トップレベルのエージェントのみで遅延読み込みを行う)、これが唯一の選択肢です。

Bash サポートを追加するには、以下の内容を

AGENTS.md
または
CLAUDE.md
の末尾に追加します:

## コード検索

grep 代わりにコードを記述してその動作やシンボル/識別子を指定することで `semble search`を使用してコードを検索します:

```bash
semble search "認証フロー" ./my-project
semble search "save_pretrained" ./my-project
semble search "モデルをディスクに保存" ./my-project --top-k 10

既知の位置に類似したコードを発見するために

semble find-related
を使用します(直前の検索結果からの
file_path
line
を渡す):

semble find-related src/auth.py 42 ./my-project

path
は省略された場合は現在のディレクトリがデフォルトとなり、Git URL も受け付けられます。

semble
$PATH
に存在しない場合、代わりに
uvx --from "semble[mcp]" semble
を使用してください。

ワークフロー

  1. 関連する断片を見つけるために最初により
    semble search
    を使用します。
  2. 返された断片が十分なコンテキストではない場合のみ完全なファイルを確認します。
  3. お勧めの結果の
    file_path
    line
    を使ってオプションで
    semble find-related
    を使用して、関連実装を発見します。
  4. 網羅的な文字一致が必要であるか正確な文字列の確認を素早く行う場合にのみ grep を使用します。

Claude Code サブエージェント

Claude Code は専用のサブエージェントもサポートしています。プロジェクトのルートディレクトリで一度実行します:

semble init
# または semble が $PATH に存在しない場合:
uvx --from "semble[mcp]" semble init

これは

.claude/agents/semble-search.md
を書きます。


CLI

Semble は MCP 以外での使用のためにスタンドアロンの CLI としても提供されています。スクリプトや MCP セッションなしで検索結果が必要な場所などで便利です。

# ローカルリポジトリを検索
semble search "認証フロー" ./my-project

# シンボルまたは識別子を探索
semble search "save_pretrained" ./my-project

# リモートリポジトリを検索(必要に応じてクローン)
semble search "モデルをディスクに保存" https://github.com/MinishLab/model2vec

# 既知の位置に類似したコードを発見(以前の検索結果からの file_path と line を使用)
semble find-related src/auth.py 42 ./my-project

path は省略された場合は現在のディレクトリがデフォルトとなり、Git URL も受け付けられます。

sembl が $PATH に存在しない場合、代わりに

uvx --from "semble[mcp]" semble
を使用してください。


トークン節約額

semble savings
は、Semble によって保存されたトークンの数をすべての検索に基づいて示します:

semble savings           # 期間別のサマリー
semble savings --verbose # クールタイプ別の詳細も表示

出力例:

Semble トークン節約額
==========================
期間        呼び出し    節約額
───────────────────────────────────────
今日         42      [███████████████░]  ~58.4k トークン (95%)
過去 7 日     287     [██████████████░░]  ~312.4k トークン (90%)
全体的       1.4k    [██████████████░░]  ~1.2M トークン (89%)

節約額の計算方法: 各呼び出しごとに、返された断片を含むユニークファイルの総文字数と返された断片の文字数が記録されます。推定保存トークンは (ファイル文字 - スニペット文字) / 4(1 トークンあたり 4 文字)です。これは保守的な推定であり、基準はマッチしたファイルを完全に読み取るものであり、コーディングエージェントがしばしば新しいコードを探索する方法です。

統計データは

~/.semble/savings.jsonl
に保存されます。


アップデート

Semble を最新バージョンにアップデート/アップグレードするには:

pip install --upgrade semble   # pip 使用時
uv tool upgrade semble         # uv 使用時
uv cache clean semble          # MCP ユーザー向け(MCP クライアントを再起動してください)

Python API

Semble はプログラマティックアクセスのために Python ライブラリとしても使用でき、カスタムツールの構築または検索を直接自分のコードに統合する際に便利です。

from semble import SembleIndex

# ローカルディレクトリをインデックス化
index = SembleIndex.from_path("./my-project")

# リモート Git リポジトリをインデックス化
index = SembleIndex.from_git("https://github.com/MinishLab/model2vec")

# インデックスを検索(自然言語またはコードクエリ)
results = index.search("モデルをディスクに保存", top_k=3)

# 特定の結果に類似したコードを見つける
related = index.find_related(results[0], top_k=3)

# 各結果はマッチされた断片を公開
result = results[0]
result.chunk.file_path      # "model2vec/model.py"
result.chunk.start_line     # 127
result.chunk.end_line       # 150
result.chunk.content        # "def save_pretrained(self, path: PathLike, ..."

仕組みについて

Semble は Chonkie を使用して各ファイルをコード意識のある断片に分割し、その後各クエリに対して静的 Model2Vec エンベッディング(コード特化型

potion-code-16M
モデルによる意味的類似性)と BM25(識別子および API 名前における語彙的一致)の 2 つの補完的な検索器でスコア付けを行います。2 つのスコアリストは相互ランクフュージョン (RRF) で融合されます。

融合後、結果はコード意識のあるシグナルのセットを使用して再ランク付けされます:

ランキングシグナル

  • 適応的ウェイト: シンボルのようなクエリ(
    Foo::bar
    ,
    _private
    ,
    getUserById
    )には語彙的ウェイトが与えられ、自然言語クエリは意味的検索器と語彙的検索器の間のバランスを保ちます。
  • 定義ブースト: クエリされたシンボルを定義する断片(クラス、
    def
    ,
    func
    など)は、それを単に参照している断片よりも優先されます。
  • 識別子ステム: クエリトークンはステム化され、断片内の識別子ステムと一致するため、それらを保持する断片には追加のウェイトが与えられます。例えば、
    parse config
    をクエリすると、
    parseConfig
    ,
    ConfigParser
    ,
    config_parser
    を含む断片がブーストされます。
  • ファイル整合性: クエリに一致する複数の断片が同じファイルから来る場合、そのファイルはブーストされ、トップの結果が単一の文脈外断片ではなく広範なファイルレベルの関連性を反映します。
  • ノイズペナルティ: テストファイル、
    compat//legacy/
    シム、サンプルコード、および
    .d.ts
    宣言stub はランクダウソされますので、正統的な実装が最初に現れます。

エンベッディングモデルは静的でありクエリ時にトランスフォーマー前進行がないため、すべて CPU で数ミリ秒で動作します。


ベンチマーク

私たちが約 1,250 クエリを対象に、63 リポジトリの 19 カ国語ですべての手法について品質と速度をベンチマークしました。横軸は総遅延(インデックス + 最初のクエリ)、縦軸は NDCG@10 です。マーカーサイズはモデルパラメータ数を反映します。

方法NDCG@10インデックス時間クエリ p50
CodeRankEmbed ハイブリッド0.86257 秒16 ミリ秒
sembra0.854263 ミリ秒1.5 ミリ秒
CodeRankEmbed0.76557 秒16 ミリ秒
ColGREP0.6935.8 秒124 ミリ秒
BM250.673263 ミリ秒0.02 ミリ秒
grepai0.56135 秒48 ミリ秒
probe0.387207 ミリ秒
ripgrep0.12612 ミリ秒

Semble は 1.37 億パラメータの CodeRankEmbed ハイブリッドのパフォーマンスの 99% を達成し、インデックス化は 218 倍高速でクエリ応答は 11 倍高速です。言語別の結果、アブレーション、および方法論についてはベンチマークを参照してください。


トークン効率

grep+read を使用しているエージェントは、コンテキスト予算の大部分を関連性の低いコードに費やします。Semble はマッチする断片のみを返し、高リコールでもトークン使用量を低く保ちます。

Semble は平均で 98% の少ないトークンを使用し、2k トークンの予算ですべての回復率が 94% に達しますが、grep+read では 100k コンテキストウィンドウ全体が必要で 85% しか達成しません。詳細についてはベンチマークを参照してください。


ライセンス

MIT

引用

Semble を研究で使用する場合、以下のようにつ記してください:

@software{minishlab2026semble,
  author       = {{van Dongen}, Thomas and Stephan Tulkens},
  title        = {Semble: Fast and Accurate Code Search for Agents},
  year         = {2026},
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.19785932},
  url          = {https://github.com/MinishLab/semble},
  license      = {MIT}
}

同じ日のほかのニュース

一覧に戻る →

2026/05/18 6:40

ジェンケイアド

## 日本語訳: GenCAD は、画像から直接編集可能な 3D CAD デザインを生成する AI モデルを作成することで、エンジニアリング分野における画期的な突破を遂げています。以前の方法は複雑なデータ構造に苦戦していましたが、この新しいアプローチは Boundary Representation(B-rep)形式に関連する精度上の課題を克服します。これは、latent command representations と diffusion modeling を含む独自の 4 つのステップのプロセスを通じて実現されており、結果を静的な形状ではなく、実行可能なパラメトリックコマンドとしてデコードします。 この技術は、製造業者やエンジニア向けに設計ワークフローを変革し、完全にモディフィ可能で高精度なモデルを瞬時に作成することを可能にしています。以前は、簡易的な 3D ビジュアルを調整可能なエンジニアリングファイルに変換するには、きつ手間のかかる手作業が必要でしたが、GenCAD はこの障壁を取り除き、ユーザーが設計を容易に反復して改善できる完全な CAD プログラムへの即座のアクセスを提供します。その結果、産業全体が大幅な効率向上を実感し、自律的なツールによって現在、さらなる開発に必要な柔軟性を備えた洗練された編集可能な幾何形状が生成されています。

2026/05/18 6:56

ThinkPad:IBM の弁当箱から、レノボの AI ワークステーションへ

## Japanese Translation: ThinkPad ノートパソコンファミリーは、IBM での公式発売(1992 年 10 月 5 日)以降、同社の所有期間(1992–2005 年)および Lenovo による継承期間(2005 年〜現在)にわたり、連続した納品を実現している長年のエンジニアリングの遺産です。当初は 700C カップシェルとして発表され、Richard Sapper の象徴的なマットブラックケース、10.4 インチの有源マトリックスカラー TFT ディスプレイ、そして Ted Selker の開発した TrackPoint II——ホームROWから指を動かす時間を短縮するポインティングスティック——を搭載していました。2010 年までには納品台数が 6000 万台を超え、買収後のブランドの存続と IBM の元々のエンジニアリング原則の維持を証明しました。デザインは 30 年にわたり大きく進化しましたが、1992 年の時代から現代のモデルである 2025/2026 年製の P14s Gen 6 や X1 Carbon に至るまで視覚的な連続性を保ち続けています。これらの現行モデルは「Strix Point」CPU を採用し、高度な NPU とプレミアム OLED ディスプレイを備えています。初期モデルでは 2012 年まで 7 レーキストANDARD化されており、その後は Precision キーボードに置き換えられましたが、後期の世代では 2012 年から開始されたハンダ付けメモリ制限などの課題もありました。一方、近年の傾向としては、薄い筐体にユーザー交換可能な DDR5 SODIMM を採用するなど、修理可能性への再注力が進んでいます。また、専用ドックから汎用的な USB-C/Thunderbolt 規格へも円滑に移行しています。結局のところ、ThinkPad の成功は、元々のデザイン哲学を尊重しつつ最新技術を統合することで、長期的な市場優位性を維持できることを示しています。

2026/05/18 6:15

プロログによるコーディング・ホラー。

## Japanese Translation: 本記事は、純粋で単調なコーディング慣行への厳格な遵守が、堅牢な Prolog プログラムにとって不可欠であるという主張を展開している。一般的な産業パターンへ偏离することは、言語の述語論的性質を破損させ、高価な欠陥をもたらす。`!/0`、`(->)/2`、および `var/1` などの非単調な構造は、意図された解の喪失か不適切な結果を生じる。`assertz/1` および `retract/1` でグローバルデータベースを改変することは、隠れた依存関係を創出し予期せぬ失敗を引き起こすため、状態は世界の改変を通じてではなく述語の引数を通じて伝達されるべきである。`(is)/2`、`(=:=)/2`、および比較演算子のような低水準のアリティム操作は、開発者に矛盾する述語論的および操作的意味を両立させるよう迫り、プログラムを理解しやすくし、学習・テスト・推論を行うことを難しくする。不純な出力操作もまた、解答を Prolog タームとして記号論的に考察することを阻止する。純粋で単調な Prolog 部分集合を採用し、`dif/2` のような近代の述語論的ツール、`if_/3` のようなメタ述語、およびクリーンなデータ構造を活用することで、開発者はパフォーマンスを維持しつつ一般性・柔軟性・厳格なテスト可能性を取り戻し、プロフェッショナル環境での利用を制限するレガシーの負担から Prolog を解放することができる。