Przejdź do głównej zawartości

Strategie wyszukiwania i indeksowania

Pytasz AI “gdzie obsługujemy webhooki płatności?” AI spędza 30 sekund na czytaniu całego katalogu src/, znajduje sześć plików wspominających o “płatności,” czyta je wszystkie i w końcu daje odpowiedź — ale zużyło 15 000 tokenów kontekstu. Tymczasem dobrze zaindeksowany projekt zwróciłby odpowiedni plik w mniej niż sekundę z minimalnymi kosztami kontekstu.

To, jak twoje narzędzie AI znajduje kod, ma równie duże znaczenie jak to, co znajduje. Różnica między narzędziem, które grepuje na ślepo, a takim, które używa rozumienia semantycznego, decyduje o tym, czy twoje okno kontekstu przetrwa wystarczająco długo, aby faktycznie wdrożyć poprawkę.

  • Jasne zrozumienie, jak każde narzędzie indeksuje i przeszukuje bazę kodu
  • Strategie optymalizacji wyników wyszukiwania w każdym narzędziu
  • Prompty kierujące efektywnym odkrywaniem kodu bez marnowania kontekstu
  • Wzorce konfiguracji dla plików ignorowania, ustawień indeksowania i zawężania wyszukiwania

Trzy narzędzia stosują zasadniczo różne podejścia do odkrywania kodu, a zrozumienie tych różnic pomaga efektywniej z nimi pracować.

Cursor używa wyszukiwania semantycznego opartego na embeddingach generowanych przez AI. To najbardziej zaawansowane podejście:

  1. Gdy otwierasz workspace, Cursor skanuje pliki i dzieli je na znaczące fragmenty (funkcje, klasy, bloki logiczne)
  2. Każdy fragment jest konwertowany na embedding wektorowy, który chwyta jego znaczenie semantyczne
  3. Embeddingi są przechowywane w bazie wektorowej zoptymalizowanej pod szybkie wyszukiwanie podobieństwa
  4. Gdy ty lub agent przeszukujecie, zapytanie jest również konwertowane na wektor i porównywane z przechowywanymi embeddingami

Co to oznacza w praktyce: Możesz wyszukiwać według znaczenia, a nie tylko tekstu. Pytanie “gdzie jest obsługiwana autentykacja” znajdzie auth.ts, session-manager.ts i login-handler.ts, mimo że żaden z nich nie zawiera słowa “autentykacja” w nazwie pliku.

Cursor używa również tradycyjnego grepa obok wyszukiwania semantycznego. Agent decyduje, które podejście zastosować na podstawie zapytania — dokładne dopasowania wzorców używają grepa, zapytania koncepcyjne używają wyszukiwania semantycznego.

Kluczowa konfiguracja:

  • Sprawdź status indeksowania w Cursor Settings > Indexing & Docs
  • Wyszukiwanie semantyczne staje się dostępne przy 80% ukończenia indeksowania
  • Indeks automatycznie aktualizuje się co 5 minut, przetwarzając tylko zmienione pliki
  • Użyj .cursorignore do wyłączenia plików z indeksowania

Najważniejsza rzecz, jaką możesz zrobić dla jakości wyszukiwania we wszystkich narzędziach: używaj opisowych, spójnych nazw.

# Źle: AI musi przeczytać każdy plik, żeby wiedzieć, co jest w środku
src/
utils.ts
helpers.ts
service.ts
handler.ts
# Dobrze: AI może znaleźć to, czego potrzebuje, po samych nazwach plików
src/
payment-webhook-handler.ts
email-notification-service.ts
password-validation.ts
date-formatting.ts

Każde narzędzie respektuje .gitignore, ale powinieneś również skonfigurować ignorowanie specyficzne dla narzędzia dla plików śledzonych w git, ale nieistotnych dla pracy z AI.

Stwórz plik .cursorignore w katalogu głównym projektu:

# Duże pliki danych
data/fixtures/*.json
scripts/migration-data/
# Wygenerowany kod (czytaj źródło zamiast tego)
src/generated/
src/__generated__/
# Zbudowana dokumentacja
docs/build/
# Pliki lock (za duże, za zaszumione)
pnpm-lock.yaml

Ignorowanie dużych plików poprawia zarówno prędkość indeksowania, jak i dokładność odpowiedzi, ponieważ AI skupia się na kodzie źródłowym, a nie na szumie.

Gdy musisz zrozumieć, jak funkcja działa w wielu warstwach (route -> controller -> service -> baza danych), pokieruj AI, aby efektywnie prześledziło ścieżkę.

Wyszukiwanie semantyczne Cursor może znaleźć koncepcyjnie podobny kod:

Find all places in the codebase where we handle errors from
external API calls. I want to see if we have a consistent pattern
or if each service handles errors differently.

Wyszukiwanie semantyczne zwraca nieistotne wyniki. Zwykle oznacza to, że indeks zawiera za dużo szumu (artefakty budowania, vendored code, duże pliki danych). Zaktualizuj pliki ignorowania i pozwól indeksowi się przebudować.

AI czyta za dużo plików podczas wyszukiwania. Ustaw jawne limity w promptach: “Nie czytaj więcej niż 5 plików.” W Claude Code użyj subagentów do szerokich wyszukiwań, aby utrzymać główny kontekst czysty.

Wyszukiwanie znajduje złą wersję funkcji. W bazach kodu z wieloma implementacjami tego samego konceptu (np. v1 i v2 API), powiedz AI, na której wersji ma się skupić. Wskaż konkretny katalog lub plik.

Indeksowanie trwa za długo lub się nie udaje. Duże bazy kodu (100K+ plików) mogą się wolno indeksować. W Cursor upewnij się, że .cursorignore wyłącza duże katalogi. Indeks buduje się przyrostowo, więc możesz zacząć pracować, gdy osiągnie 80% ukończenia.