Prawdziwie praktyczny RAG? To nie jest tylko zbudowanie wektorowego indeksu i nadzieja, że LLM znajdzie wszystko sam. Gdy pracujesz nad projektem, liczysz na asystenta, który naprawdę rozumie Twój kod, kontekst i Twoje pytania. Dlatego powstał Refio – open source’owy, lokalny asystent AI do IntelliJ, napisany w Kotlinie, ze wszystkimi danymi trzymanymi lokalnie.

W tym artykule:

  • Pokazuję jak działa Refio (od środka, nie marketingowo)
  • Wyjaśniam, czym jest Retrieval-Augmented Generation (RAG) w praktyce
  • Przedstawiam 6 konkretnych technik RAG, które robią różnicę – i jak można je wykorzystać w Refio, żeby nie tylko „szukał”, ale trafiał w sedno
  • Podaję gotowe przykłady scenariuszy

Refio – co to jest i po co to komu?

Refio to plugin do IntelliJ, który:

  • działa całkowicie lokalnie (SQLite, embeddingi, zero cloudów bez Twojej zgody)
  • nie potrzebuje webview ani zewnętrznego backendu
  • uruchamia się bezpośrednio w JVM jako natywna aplikacja, nie przez HTTP
  • korzysta z OpenAI albo Ollama (modele embeddingów lokalne lub chmurowe)
  • automatycznie analizuje projekt
  • ma własny system providerów kontekstu (@file, @folder, @grep, @codebase, @commit, @diff…)
  • daje wygodny UI z chatem, panelem zaawansowanym (podgląd kontekstu, debugowanie retrievalu)
  • oferuje trzy tryby pracy: Chat, Planowanie (read-only), Agent (pełna automatyzacja, edycja kodu)

Refio powstał z potrzeby: mieć asystenta, który minimalizuje kontekst.

Jak działa pipeline RAG w Refio?

  1. Indeksowanie projektu – na starcie IDE Refio analizuje wszystkie pliki (wykrywa zmiany checksumą SHA-256), rozbija kod na klasy, funkcje, importy (AST-aware).
  2. Chunkowanie semantyczne – dzieli kod na logiczne fragmenty.
  3. Embeddingi – każdy fragment trafia do embeddingu (OpenAI lub Ollama, lokalnie lub zdalnie), wszystko trzymane w SQLite.
  4. Wyszukiwanie – cosine similarity wybiera najtrafniejsze fragmenty pod dane zapytanie (wyniki powyżej progu 0.5).
  5. Budowanie kontekstu – z wyników RAG i metadanych budowany jest spójny kontekst dla modelu LLM.
  6. Odpowiedź modelu – LLM dostaje wyselekcjonowany, zwięzły kontekst i generuje odpowiedź.
  7. Dla trybu Plan/Agent – pętla planowania i wykonywania kroków z możliwością rollbacku.

Brzmi prosto, ale prawdziwa wartość tkwi w detalach i… w nowoczesnych technikach retrievalu.

Sześć technik, które robią różnicę w nowoczesnym RAG — i jak można je użyć w Refio

1. PageIndex – nawigacja po strukturze projektu, jak w eksploratorze

Do czego to się przydaje:
W dużych projektach trudno znaleźć, gdzie jest interesująca Cię logika. Zwykły search traktuje kod jak płaską listę fragmentów – PageIndex pozwala na przeszukiwanie kodu „od góry do dołu”, jak po drzewie katalogów.

Jak można użyć w Refio:
Szybko zawężaj wyszukiwanie do konkretnego modułu, katalogu lub pliku, zanim wejdziesz głębiej w klasy i funkcje. Refio może najpierw wskazać pliki związane z danym problemem (np. autoryzacja), a dopiero potem wyszukiwać funkcje lub klasy. Idealne przy setkach plików, kiedy nie pamiętasz, gdzie dokładnie jest fragment, którego szukasz.

Co to daje:
Szybsze trafienie do właściwego miejsca, mniejsze ryzyko natrafienia na nieistotny fragment.

2. Multivector Retrieval – jeden fragment, wiele perspektyw

Do czego to się przydaje:
Użytkownicy pytają różnie – raz o nazwę funkcji, raz o to, co robi, czasem o opis w komentarzu. Jeden embedding tego nie łapie.

Jak można użyć w Refio:
Refio może tworzyć kilka embeddingów dla tego samego fragmentu: z nazwy i sygnatury, z dokumentacji, z pełnej treści, ze streszczenia. Dzięki temu, nawet jeśli zapytasz swoim językiem („gdzie są retry?”), narzędzie znajdzie fragment po docstringu, a nie tylko po nazwie.

Co to daje:
Nie musisz znać nazw – możesz pytać po ludzku.

3. Metadata Augmentation – wyszukiwanie z użyciem metadanych, nie tylko treści

Do czego to się przydaje:
Nie zawsze treść jest najważniejsza – czasem liczy się miejsce, typ pliku, data, autor czy środowisko (prod/test/dev).

Jak można użyć w Refio:
Możesz ważyć i filtrować wyniki na podstawie ścieżki, typu pliku, ostatniej edycji czy katalogu. Na przykład: pytasz o backend, Refio faworyzuje katalog core/ i ignoruje test/. Albo – jeżeli ostatnio edytowałeś plik w ui/, wyniki z tego modułu pojawią się wyżej.

Co to daje:
Mniej szumu, lepsze dopasowanie do Twojej aktualnej pracy, szybciej wracasz do najważniejszych fragmentów.

4. CAG (Cache-Augmented Generation) – natychmiastowy dostęp do najważniejszych informacji

Do czego to się przydaje:
Stałe przeszukiwanie tych samych fragmentów (np. podsumowanie projektu) jest nieefektywne.

Jak można użyć w Refio:
Refio może cache’ować podsumowanie projektu i skróty rozmów, zawsze dołączając je do kontekstu. To pozwala na natychmiastowy dostęp do najważniejszych informacji i szybsze odpowiedzi, szczególnie przy długich sesjach.

Co to daje:
Mniejsze zużycie tokenów, szybkie odpowiedzi i pewność, że kluczowa wiedza zawsze jest dostępna.

5. Contextual Retrieval – embeddingi z pełnym kontekstem miejsca w projekcie

Do czego to się przydaje:
Bez kontekstu łatwo zgubić sens – szczególnie przy powtarzalnych nazwach funkcji czy klas.

Jak można użyć w Refio:
Każdy fragment kodu w Refio może mieć „nagłówek” opisujący, gdzie się znajduje (moduł, plik, klasa) oraz streszczenie, co robi. Zapytania o ogólne zagadnienia (np. „obsługa logowania”) mogą trafiać precyzyjnie, nawet jeśli kod ma generyczne nazwy.

Co to daje:
Precyzyjniejsze wyniki, mniej przypadkowych trafień, lepsze dopasowanie do rzeczywistego kontekstu projektu.

6. Reranking – drugi etap selekcji, żeby wybrać naprawdę najlepsze wyniki

Do czego to się przydaje:
Nie każdy wynik cosine similarity jest wartościowy – szczególnie w złożonych zapytaniach.

Jak można użyć w Refio:
Po wybraniu topK fragmentów, Refio może przeprowadzić dodatkowy ranking, np. lekkim modelem scoringowym albo heurystykami (czy wynik zawiera słowo kluczowe, czy jest z aktualnie otwartego pliku). Do LLM trafiają tylko najbardziej sensowne fragmenty.

Co to daje:
Stabilność, mniej szumu, trafniejsze odpowiedzi – lepsza jakość pracy z asystentem AI.

Po co to wszystko? – Praktyka i jeszcze raz praktyka

Łącząc te techniki:

  • buduje plugin, który nie zalewa LLM nieistotnymi danymi,
  • wyszukuje trafnie, korzystając z kontekstu strukturalnego, metadanych, cache i rerankingu,
  • reaguje na aktualny kontekst projektu

Podsumowanie

RAG to nie jest tylko moda, a Refio to nie jest „kolejny chat w IDE”. To narzędzie, które:

  • rozumie Twój kod,
  • optymalizuje kontekst,
  • korzysta z nowoczesnych technik retrievalu,
  • i robi realną różnicę w Twojej codziennej pracy.

Jeśli chcesz dowiedzieć się więcej lub zobaczyć kod źródłowy, zajrzyj do github.com/shadoq/refio.