
Semble: поиск по коду с 98% экономией токенов
Semble — open-source MCP-сервер для Claude Code, который ищет код семантически и тратит на 98% меньше токенов, чем grep+read. Разбираем, как это работает.
Введение: Claude Code жжёт ваши токены — и вы, скорее всего, об этом не знаете
Представьте: вы просите Claude Code «найти логику авторизации» в своём проекте. Агент запускает grep, получает сорок файлов, содержащих слово «auth», и начинает читать их все — один за другим. Каждый прочитанный файл полностью попадает в контекст и тарифицируется.
Это не баг — именно так Claude Code устроен: когда он ищет по grep, то читает целые файлы, затем запускает субагенты, и вы платите за каждый токен кода, даже если тот не имеет отношения к задаче.
Проблема кроется в фундаментальных ограничениях grep: он сопоставляет строки, а не намерения, поведение или паттерны реализации. Совпадения на уровне строк автоматически не включают окружающий класс, зависимости, тесты или граф вызовов.
Именно эту проблему и решает Semble — open-source MCP-сервер от команды MinishLab, который вышел буквально на днях и мгновенно собрал внимание сообщества разработчиков.
Что такое Semble и в чём суть идеи
Semble — это библиотека поиска по коду, созданная специально для агентов. Она возвращает именно те фрагменты кода, которые нужны агенту, используя на ~98% меньше токенов, чем grep+read, и сокращая задержку на каждом шаге.
Никакой начальной настройки: сервер работает на CPU без API-ключей, GPU или внешних сервисов. Semble работает как MCP-сервер — готовый инструмент для Claude Code, Cursor, Codex, OpenCode и любого агента, поддерживающего MCP.
Ключевые характеристики в цифрах
Индексирование и поиск по всей кодовой базе от начала до конца занимает менее секунды — примерно в 200 раз быстрее индексирования, чем у специализированного code-трансформера, и в ~10 раз быстрее при запросах, при этом достигая 99% его качества поиска.
Semble использует на 98% меньше токенов в среднем и достигает 94% recall при бюджете всего 2k токенов, тогда как grep+read требует полного контекстного окна в 100k токенов для достижения лишь 85% recall.
| Метрика | grep + read | Semble |
|---|---|---|
| Токены на запрос | ~100 000 | ~2 000 |
| Recall@10 | ~85% | ~94% |
| Скорость индексирования | — | < 1 секунды |
| Требуется GPU | нет | нет |
| Требуются API-ключи | нет | нет |
| Работает локально | да | да |
Как Semble работает внутри: архитектура гибридного поиска
Semble — это не просто «grep с эмбеддингами». Под капотом — продуманный стек из нескольких взаимодополняющих компонентов.
graph TD
A[Исходный код проекта] --> B[Разбивка на чанки - Chonkie]
B --> C[Семантические эмбеддинги - Model2Vec potion-code-16M]
B --> D[Лексический индекс - BM25]
C --> E[Reciprocal Rank Fusion - RRF]
D --> E
E --> F[Code-aware ранжирование]
F --> G[Топ-K релевантных фрагментов]
G --> H[Claude Code / Cursor / Codex]
Шаг 1: Разбивка кода на чанки
Semble разбивает каждый файл на code-aware фрагменты с помощью Chonkie, затем оценивает каждый запрос по чанкам с помощью двух дополняющих друг друга ретриверов: статических эмбеддингов Model2Vec с использованием специализированной для кода модели potion-code-16M для семантического сходства и BM25 для лексических совпадений по идентификаторам и именам API.
Шаг 2: Статические эмбеддинги Model2Vec
Модель Model2Vec — это «секретное оружие» Semble. Model2Vec — это техника превращения любого sentence transformer в очень маленькую статическую модель, уменьшающую размер модели до 50 раз и ускоряющая модели до 500 раз при незначительном падении качества.
Поскольку модель эмбеддингов является статической и не требует прямого прохода через трансформер во время запроса, всё это работает за миллисекунды на CPU.
Шаг 3: Слияние через RRF и code-aware ранжирование
Semble разбивает файлы на code-aware чанки с помощью Chonkie, затем оценивает каждый запрос с помощью двух ретриверов: статических эмбеддингов Model2Vec для семантического сходства и BM25 для лексических совпадений. Два списка результатов объединяются с помощью Reciprocal Rank Fusion (RRF).
После слияния происходит дополнительное интеллектуальное ранжирование:
- Адаптивные веса: symbol-подобные запросы (
Foo::bar,_private,getUserById) получают больший лексический вес, а запросы на естественном языке остаются сбалансированными. - Definition boosts: чанк, который определяет искомый символ (класс, def, func и т.д.), ранжируется выше, чем чанки, которые лишь на него ссылаются.
- Identifier stems: токены запроса стемятся и сопоставляются со стемами идентификаторов в чанке — это даёт дополнительный вес релевантным фрагментам.
«Semble достигает 99% производительности 137M-параметрового CodeRankEmbed Hybrid, индексируя в 218 раз быстрее и отвечая на запросы в 11 раз быстрее.»
Установка и настройка: 5 минут до первого запроса
Установка через pip или uv
pip install semble
# или
uv add semble
Использование как CLI
# Поиск по локальному репозиторию
semble search "authentication flow" ./my-project
# Поиск символа или идентификатора
semble search "save_pretrained" ./my-project
# Поиск по удалённому репозиторию (клонируется автоматически)
semble search "save model to disk" https://github.com/MinishLab/model2vec
# Найти похожий код по известной локации
semble find-related src/auth.py 42 ./my-project
Используйте semble search для поиска кода по описанию того, что он делает, или по имени символа/идентификатора — вместо grep. Используйте semble find-related, чтобы найти код, похожий на известную локацию.
Настройка как MCP-сервер для Claude Code
{
"mcpServers": {
"semble": {
"command": "uvx",
"args": ["--from", "semble[mcp]", "semble", "mcp"]
}
}
}
Запустите Semble как MCP-сервер — и любой агент (Claude Code, Cursor, Codex, OpenCode и т.д.) получит мгновенный доступ к любому репозиторию, который будет клонирован и проиндексирован по требованию.
Рекомендуемый рабочий процесс:
- Начните с
semble search, чтобы найти релевантные чанки. - Просматривайте полные файлы только тогда, когда возвращённого чанка недостаточно для контекста.
- Опционально используйте
semble find-relatedсfile_pathиlineиз перспективного результата, чтобы обнаружить связанные реализации.
Использование как Python-библиотека
from semble import SembleIndex
# Индексируем локальный проект
index = SembleIndex.from_path("./my-project")
# Индексируем удалённый git-репозиторий
index = SembleIndex.from_git("https://github.com/MinishLab/model2vec")
# Поиск по запросу на естественном языке или коду
results = index.search("save model to disk", top_k=3)
# Находим похожий код
related = index.find_related(results[0], top_k=3)
# Каждый результат содержит метаданные чанка
print(results[0].chunk.file_path) # "model2vec/model.py"
print(results[0].chunk.start_line) # 127
print(results[0].chunk.content) # "def save_pretrained(self, path: ..."
Контекст: почему проблема с токенами острее, чем кажется
Многие разработчики не задумываются о расходе токенов, пока не получают неожиданный счёт. Давайте разберём механику.
Каждый раз, когда Claude Code что-то ищет, он по умолчанию использует grep. Это сопоставление ключевых слов, а не намерений. Поищите слово «parse» — и получите каждый парсер конфигов, URL, всё что связано с parse и parsing. Claude затем читает (и тарифицирует) все эти файлы.
Традиционный grep возвращает десятки или сотни результатов, каждый из которых Claude должен прочитать и оценить. Это создаёт каскадный эффект, при котором один поисковый запрос может породить несколько субагентов, каждый со своим контекстным окном и расходами на кэш.
По данным одного из анализов, типичная конфигурация с четырьмя MCP-серверами в Claude Code добавляет около 7 000 токенов накладных расходов на каждое сообщение, а более тяжёлые конфигурации пересекают отметку в 50 000 токенов ещё до того, как набран хоть один промпт.
Semble vs. конкуренты: сравнение решений
Semble — не единственный инструмент в этой нише. Вот как он соотносится с альтернативами:
| Инструмент | Экономия токенов | Локальный запуск | GPU/API | Язык | Скорость индекса |
|---|---|---|---|---|---|
| Semble | ~98% | ✅ | Не нужен | Python | < 1 сек |
| CocoIndex Code | ~70% | ✅ | Опционально | Python/TS | Быстро |
| GrepAI | ~27–97% | ✅ | Ollama (локально) | — | Средне |
| Claude Context | ~40% | ❌ | OpenAI + Milvus | TypeScript | Медленно |
| codebase-memory-mcp | ~99% | ✅ | Не нужен | Go | Мс |
Агенты получают только те несколько чанков, которые имеют значение — а не целые файлы. Это экономит ~70% токенов и ускоряет каждый шаг — в случае CocoIndex Code. Semble же идёт дальше, достигая 98% экономии.
Контролируемая оценка Claude Context демонстрирует ~40% снижение потребления токенов при эквивалентном качестве поиска. Это транслируется в существенную экономию затрат и времени в продакшн-окружениях.
Главное преимущество Semble над Claude Context: полная локальность. Всё работает на CPU без API-ключей, GPU или внешних сервисов. Claude Context, напротив, требует и OpenAI API для эмбеддингов, и Milvus/Zilliz Cloud для векторной базы данных.
Бенчмарки: реальные цифры качества
Команда MinishLab проводила бенчмарки качества и скорости по всем методам на ~1250 запросах по 63 репозиториям на 19 языках программирования. По оси X — общая задержка (индекс + первый запрос); по оси Y — NDCG@10.
Semble достигает 99% производительности 137M-параметрового CodeRankEmbed Hybrid, индексируя в 218 раз быстрее и отвечая на запросы в 11 раз быстрее.
Fast: индексирует репозиторий за ~250 мс и отвечает на запросы за ~1.5 мс — всё на CPU.
Accurate: NDCG@10 = 0.854 на бенчмарках — на уровне специализированных трансформеров для кода, но при минимальном размере и стоимости.
Для сравнения масштаба: пять структурных запросов потребляют ~3 400 токенов через codebase-memory-mcp против ~412 000 токенов при file-by-file grep-исследовании — снижение на 99,2%.
Заключение: новый стандарт для агентного поиска кода
Semble — это убедительный ответ на реальную боль каждого, кто регулярно использует Claude Code для работы с нетривиальными кодовыми базами. Команда MinishLab нашла элегантное решение: вместо тяжёлых трансформеров — статические эмбеддинги Model2Vec, вместо внешних сервисов — всё локально на CPU, вместо файлов целиком — только релевантные чанки.
Ключевые выводы:
- 98% экономии токенов — это не маркетинг, а измеримый результат на реальных бенчмарках
- Нулевая инфраструктура: установка одной командой, работа на CPU без GPU и API-ключей
- Скорость: индекс за 250 мс, запросы за 1.5 мс
- Точность: 94% recall при бюджете 2k токенов vs 85% у grep при бюджете 100k
- Совместимость: работает с Claude Code, Cursor, Codex, OpenCode и любым MCP-клиентом
Если вы платите за Claude Code API или регулярно упираетесь в лимиты контекстного окна — Semble стоит попробовать уже сегодня. Это редкий случай, когда инструмент одновременно быстрее, дешевле и точнее того, что используется по умолчанию.
# Установка — одна команда
pip install semble
# Первый поиск
semble search "authentication logic" ./your-project