Skip to main content

Индексы для быстрого поиска по коду

В нашем плагине есть два типа поиска: similar search и exact search.

Оба индекса построены на классических методах информационного поиска, поэтому они очень быстрые и могут вычисляться на слабых компьютерах. Эти индексы не используют никаких ML-ресурсов, в частности, эмбеддингов, векторных баз данных и т.п.

Exact search ищет произвольную подстроку в исходном коде проекта. Его индекс — это обратный индекс n-gram, в которые преобразуются тексты и запросы. На больших проектах такой поиск работает быстрее встроенного поиска IntelliJ Platform.

Используйте exact search, когда уже знаете точный текст: имя идентификатора, фрагмент сообщения об ошибке, строковый литерал или часть конфигурации. Например, так можно найти все места, где код формирует сообщение Connection refused.

Чтобы выполнить поиск:

  1. Укажите агенту точный фрагмент и область поиска: файл, каталог или весь проект.
  2. Если регистр важен, явно попросите учитывать его.

Пример запроса:

Найди точную строку Connection refused во всём проекте с учётом регистра.

Similar search в коде проекта

Similar search является облегчённой альтернативой семантическому поиску через эмбеддинги. Он ищет по смыслу с помощью BM25 и анализатора, который поддерживает ключевые слова, морфологию естественных языков, camel case, синонимы и языко-специфичные оптимизации.

Используйте similar search, когда знаете назначение кода, но не знаете точное имя класса, метода или файла. Например, поиск по смыслу поможет найти код, который обновляет просроченный токен доступа, даже если в реализации используются имена renewCredentials и refreshSession.

Опишите агенту, что делает нужный код. Агент сам подготовит поисковый запрос и добавит подходящие ключевые слова.

Пример запроса:

Найди код, который обновляет просроченный токен доступа.

Similar search в зависимостях

Индекс similar search включает доступные исходники библиотек. Используйте поиск в зависимостях, когда нужно найти подходящий API именно в подключённой версии библиотеки, а точное имя типа или метода неизвестно. Например, так можно найти в HTTP-клиенте обработчик повторного запроса после ошибки авторизации.

Назовите библиотеку или задачу, которую должен решать её API, и попросите искать в исходниках зависимостей. Агент сам подготовит ключевые слова для вызова инструмента. После поиска он может открыть найденный исходник и проверить сигнатуру.

Пример запроса:

Найди в исходниках зависимостей API HTTP-клиента для повторного запроса после ошибки авторизации и проверь сигнатуру.