Разработчики Qwen открыли исходный код zg (zvec-grep): локально-ориентированного поискового слоя, объединяющего ripgrep, BM25 и векторный поиск
Кодирующие агенты тратят значительную часть своего бюджета инструментов на поиск. Когда целевой объект — известный символ, ripgrep находит его точно. Когда цель описана простым языком, сопоставление по ключевым словам часто не срабатывает, и агенту приходится угадывать термины, читать целые файлы и вручную собирать контекст. Каждый такой обходной путь требует дополнительных вызовов инструментов, токенов и времени.
Команда Qwen Developer объявила о выпуске zg (zvec-grep) — локально-ориентированного поискового слоя с открытым исходным кодом, который объединяет семантический поиск, BM25 и ripgrep в одном интерфейсе для людей и агентов. Код опубликован в организации zvec-ai на GitHub под лицензией Apache 2.0.
Можно ли его развернуть? Да, уже сегодня. Он устанавливается из npm как @zvec/zvec-grep, требует Node.js 22 или новее на macOS, Linux или Windows, не нуждается в GPU при использовании модели по умолчанию, а лицензия Apache 2.0 разрешает коммерческое использование.
Один индекс, четыре маршрута поиска
zg один раз индексирует рабочее пространство, после чего предоставляет несколько способов выполнять запросы. В документации по конвейеру поиска определены четыре маршрута: гибридный вариант по умолчанию, объединяющий намерение с лексическими якорями; --fts для точных терминов, ранжированных по BM25; --vector для концептуального сходства без лексического ранжирования; и --rg для исчерпывающего поиска по литералам или регулярным выражениям. Первые три используют индекс. Маршрут --rg вообще не требует индекса, что важно, если репозиторий ещё не был проиндексирован.
Анонимный индекс рабочего пространства хранится в <root>/.zvec-grep/. Каталоги .git и .zvec-grep всегда исключаются, как и распространённые каталоги зависимостей, сборки, кэша и журналов, а также всё, что исключается собственными правилами игнорирования репозитория. Повторный запуск zg index обновляет индекс инкрементально; для смены модели эмбеддингов требуется явно указать --rebuild, поскольку векторные пространства разных моделей несовместимы даже при одинаковой размерности.
Результаты индексированного поиска содержат состояние актуальности fresh или possibly_stale, поэтому агент может использовать достаточно хороший результат, не выполняя предварительную проверку состояния.
Поверхность MCP, которую фактически видят агенты
zg install обнаруживает на компьютере Codex, Claude Code, Cursor и OpenCode и настраивает локальную интеграцию MCP. Сервер использует MCP Streamable HTTP на доступной только через loopback конечной точке http://127.0.0.1:7999/mcp, с опциональной аутентификацией bearer-токеном.
Заслуживающее внимания проектное решение — сдержанность. Согласно руководству по MCP, набор инструментов agent по умолчанию предоставляет ровно два инструмента: zvec_grep_search — когда намерение известно, но точная строка неизвестна, и zvec_grep_rg — когда известны символ, путь или регулярное выражение. Жизненный цикл индекса остаётся в CLI. Набор из шести инструментов для совместимости, дополненный командами создания, удаления и проверки состояния индекса, а также проверки состояния сервера, существует, но подключается отдельно через zg server on --mcp-toolset full; в документации указано, что агент ни в коем случае не должен незаметно создавать, перестраивать или удалять постоянный индекс.
Формат вывода оптимизирован для экономии контекста. Результаты возвращаются сгруппированными по файлам с диапазонами строк, а предварительный просмотр индексированного исходного кода по умолчанию не включается, если его явно не запросить. zg также отклоняет изменяющие вывод флаги ripgrep, такие как --json, --count, -l и --vimgrep, чтобы сохранялся компактный формат результатов.
Эмбеддинги по умолчанию выполняются на устройстве
В каталоге эмбеддингов в настоящее время документированы десять локальных моделей и три удалённых конечных точки Qwen. Вариант по умолчанию в кратком руководстве, local/potion-code-16m-v2, — это статическая модель Model2Vec с выходом размерностью 256 и ограничением на вход в 8 192 токена; поскольку она использует статический поиск векторов, выбор GPU не ускоряет её работу. К более тяжёлым локальным вариантам относятся jina-embeddings-v2-base-code, embeddinggemma-300m и qwen3-embedding-0.6b. Среди удалённых вариантов — qwen/qwen3.7-text-embedding со 128 000 входных токенов и мультимодальная модель qwen/qwen3-vl-embedding.
Удалённое использование ограничено. Настройка учётных данных провайдера не даёт разрешения на передачу данных; для этого требуется либо --allow-remote для одной команды, либо подписанное разрешение рабочего пространства через zg auth grant, которое можно отозвать с помощью zg auth revoke. В публикации о запуске упоминаются одиннадцать моделей, работающих на устройстве, тогда как в текущей документации указано десять; это небольшое расхождение стоит отметить.
Что показывают результаты бенчмарков
Результаты оценки опубликованы в сообщении о запуске, а не в репозитории, где раздел с бенчмарками пока остаётся заполнителем. Оба запуска представляли собой парные A/B-тесты с фиксированными агентом, моделью, промптом, средой выполнения и ограничениями задач; в условии с zg добавлялись только предварительно созданный индекс, инструменты MCP и рекомендации по использованию. Стоимость построения индекса в таблицы не включалась.
На выборке из 20 вопросов SWE-QA-Bench zg сократил количество вызовов инструментов более чем наполовину, а число входных токенов — почти наполовину, одновременно повысив оценку Judge на 1,50 балла. На выборке из 80 вопросов BrowseComp-Plus точность выросла с 98,67% до 99,00%, тогда как количество входных токенов снизилось на 37,56%, вызовов инструментов — на 43,52%, а время работы агента — на 38,58%. Кроме того, сообщается, что индексация репозитория Django (3 457 файлов) завершается менее чем за 30 секунд на Apple M4 Pro.
Размеры выборок — 20 и 80 вопросов — невелики, а заявленные сокращения получены в собственных запусках разработчика, поэтому следующим очевидным шагом должна стать независимая проверка.
Интерактивное объяснение
Основные выводы
- zg объединяет ripgrep, BM25 и векторный поиск в одном локально-ориентированном интерфейсе для людей и агентов.
- Набор инструментов MCP по умолчанию предоставляет только два инструмента; жизненный цикл индекса намеренно остаётся в CLI.
- Индексация, создание эмбеддингов и поиск выполняются на устройстве; для удалённых эмбеддингов требуется явная авторизация для отдельной команды или рабочего пространства.
- В собственных A/B-тестах разработчика сообщается о сокращении количества вызовов инструментов и входных токенов примерно на 40–50% на небольших выборках.
- Apache 2.0, установка через npm, Node.js 22+, GPU не требуется при использовании модели по умолчанию.
Ознакомьтесь с zvec-ai/zvec-grep, публикацией о запуске Qwen Developersт и дорожной картой. Также подписывайтесь на нас в Twitter и не забудьте присоединиться к нашему сабреддиту о машинном обучении с более чем 150 тыс. участников и подписаться на нашу рассылку. Постойте! Вы есть в Telegram? теперь к нам можно присоединиться и в Telegram.
Хотите сотрудничать с нами в продвижении своего репозитория GitHub, страницы Hugging Face, выпуска продукта, вебинара и т. д.? Свяжитесь с нами
Переведено автоматически с английского. Оригинал статьи — по ссылке ниже.