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?
- Indeksowanie projektu – na starcie IDE Refio analizuje wszystkie pliki (wykrywa zmiany checksumą SHA-256), rozbija kod na klasy, funkcje, importy (AST-aware).
- Chunkowanie semantyczne – dzieli kod na logiczne fragmenty.
- Embeddingi – każdy fragment trafia do embeddingu (OpenAI lub Ollama, lokalnie lub zdalnie), wszystko trzymane w SQLite.
- Wyszukiwanie – cosine similarity wybiera najtrafniejsze fragmenty pod dane zapytanie (wyniki powyżej progu 0.5).
- Budowanie kontekstu – z wyników RAG i metadanych budowany jest spójny kontekst dla modelu LLM.
- Odpowiedź modelu – LLM dostaje wyselekcjonowany, zwięzły kontekst i generuje odpowiedź.
- 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.
Dodaj komentarz