Zanim rynek zalały Cursory, Copiloty i pluginy z GPT-4 w każdym IDE, zacząłem zadawać sobie proste pytanie: co by było, gdyby asystent AI znał mój kod równie dobrze jak ja? Nie jakąś dokumentację z internetu, nie fragmenty z StackOverflow — tylko konkretne repozytorium, nad którym aktualnie siedzę. Tak powstał Assistente.dev — mój autorski coding companion, który uczy się z kodu i dokumentacji, a potem odpowiada na pytania techniczne z pełnym kontekstem.
W krótkim explainerze na YouTube pokazuję, jak to wygląda w praktyce. Ten wpis jest rozszerzeniem tamtego materiału — kładę tu więcej na temat idei, architektury i tego, co z tego projektu wyszło.
Skąd pomysł
Assistente.dev narodził się z frustracji. W pracy codziennie wchodziłem w nowe konteksty: czasem nieswoje repozytorium, czasem własny projekt, w który nie zaglądałem od pół roku. Za każdym razem to samo — wczytywanie się w kod, szukanie konwencji, przypominanie sobie, dlaczego ta klasa wygląda tak, a nie inaczej. Chat GPT dawał ogólną wiedzę, ale nie znał mojego kodu. Copilot podpowiadał linijki, ale nie odpowiadał na pytania w stylu "gdzie jest zdefiniowane X" albo "jak dodać nową właściwość do tego modelu, żeby zachować spójność ze stylem reszty projektu".
Chciałem narzędzia, które byłoby bardziej jak młodszy developer w zespole — ktoś, kto przeczytał repo, rozumie konwencje i potrafi wskazać konkretne pliki, na które powinienem spojrzeć. Stąd wzięła się nazwa: Assistente — asystent w sensie dosłownym, a nie tylko kolejny wrapper na LLM-a.
Assistente nie ma być mądrzejszy ode mnie. Ma być szybszy w czytaniu mojego kodu.
Jak to działa
Koncept jest prosty, ale diabeł tkwi w wykonaniu. Cały produkt opiera się na trzech pojęciach: zasoby, pytania i kontekst.
Zasoby to wszystko, z czego Assistente może się uczyć. W obecnej wersji obsługuję indeksowanie kodu źródłowego — wrzucasz repozytorium albo konkretne pliki, a system przetwarza je na chunki, liczy embeddingi i zapisuje do bazy wektorowej. Każdy rekord w panelu "Zasoby" to kawałek wiedzy, z którego model może skorzystać przy odpowiadaniu. W filmie pokazuję zabawny przypadek — nauczyłem Assistente dokumentacji i kodu... samego Assistente. Aplikacja wie więc coś o sobie samej i potrafi wytłumaczyć własne endpointy API.
Pytania to główny interfejs użytkownika. Zadajesz pytanie techniczne w naturalnym języku — np. "jak dodać nową właściwość do modelu Playground" — a system wyszukuje najbardziej relewantne zasoby (retrieval), wrzuca je jako kontekst do LLM-a i generuje odpowiedź. W trakcie przetwarzania widzisz progress bar, bo cała operacja potrafi trwać kilka-kilkanaście sekund (embeddingi + generacja to sporo wywołań).
Kontekst to kluczowa różnica względem zwykłego chatu. Po każdej odpowiedzi możesz wejść w szczegóły pytania i zobaczyć, z jakich konkretnie plików Assistente skorzystał. W demie widać to pięknie: zadaję pytanie o model, a na liście źródeł jest dokładnie ten plik, w którym zdefiniowana jest klasa — z widocznymi właściwościami res, które później pojawiają się w odpowiedzi. Nie musisz wierzyć modelowi na słowo — możesz zweryfikować, na czym bazuje.
Stos technologiczny
Projekt zbudowałem jako pełną aplikację SaaS-ową z podziałem na backend, frontend i warstwę AI. Wybory technologiczne podyktowane były dwoma rzeczami: tym, co znam najlepiej (.NET) oraz tym, co w tamtym momencie miało najdojrzalsze SDK do pracy z LLM-ami.
Backend — ASP.NET Core z architekturą w duchu Clean Architecture / DDD. Podział na moduły: Resources, Questions, Identity, Shared Kernel. Każdy moduł ma własny kontekst i komunikuje się przez eventy. Baza główna — PostgreSQL z rozszerzeniem pgvector do trzymania embeddingów. Decyzja o pgvector zamiast dedykowanego Pinecone'a czy Qdranta była świadoma — jedna baza, jeden backup, mniej ruchomych części na starcie.
Warstwa AI — integracja z OpenAI API (chat completions + embeddings). Przy indeksowaniu plików robię chunking po sensownych granicach (metody, klasy, sekcje dokumentacji), liczę embeddingi i zapisuję wraz z metadanymi. Przy zapytaniu — klasyczny RAG: embedding pytania, top-K similarity search, budowa promptu z kontekstem, wywołanie modelu.
Frontend — panel administracyjny w Angularze, bo w .NET-owym świecie Angular + ASP.NET Core to bardzo naturalna para. Widok "Zasoby" z listą zaindeksowanych rekordów, widok "Pytania" z historią i szczegółami, wszystko spięte z backendem przez REST API.
Infrastruktura — aplikacja jest hostowana pod app.assistente.dev, landing pod assistente.dev, a cały kod jest publicznie dostępny na github.com/jarmatys/DEV_ASSISTENTE. Tak — zdecydowałem się wystawić całe repozytorium open source, bo uważam, że sama idea jest ciekawsza niż kod, a każdy, kto chciałby coś podobnego zbudować, i tak napisze to po swojemu.
Status projektu
Mówiąc szczerze — Assistente.dev jest dzisiaj projektem portfolio, nie komercyjnym produktem. Zbudowałem go w 2023 roku, opublikowałem explainer w maju 2024 i w tej chwili traktuję go jako świetną lekcję architektoniczną oraz działające demo, które pokazuje, że potrafię spiąć .NET-owy backend, bazę wektorową i LLM-a w kompletną, użyteczną aplikację.
Dlaczego nie komercjalizowałem? Parę powodów. Po pierwsze — rynek AI coding assistants eksplodował. Cursor, GitHub Copilot Chat, Cody, Codeium — wszyscy robią podobne rzeczy, tylko z ogromnymi budżetami i zespołami. Konkurować w tej lidze jako solo developer to byłoby wchodzenie na walkę z armią z patykiem. Po drugie — zdałem sobie sprawę, że moja przewaga jest gdzie indziej: w rozumieniu biznesu klientów .NET-owych i w budowaniu ich dedykowanych narzędzi, a nie w walce o kolejny SaaS w zatłoczonej kategorii.
Assistente.dev nauczył mnie więcej o architekturze AI-first aplikacji niż jakikolwiek kurs. I właśnie w tym sensie był sukcesem — nawet jeśli nigdy nie wziął pierwszej faktury.
Repozytorium nadal stoi, aplikacja nadal działa, a kod stanowi dla mnie referencyjny przykład, jak wygląda pełnoprawny RAG-owy system napisany w .NET. Gdy dzisiaj piszę dla klientów rozwiązania z wykorzystaniem AI — chatboty produktowe, systemy Q&A na dokumentacji, inteligentne wyszukiwarki — wiele wzorców, które stosuję, pochodzi wprost z Assistente.
Zobacz więcej
- Repozytorium na GitHubie: github.com/jarmatys/DEV_ASSISTENTE
- Aplikacja (demo live): app.assistente.dev
- Landing projektu: assistente.dev
- Film explainer na YouTube: youtube.com/watch?v=5l5J5WqOT2w
Jeśli planujesz budowę podobnego systemu — RAG, baza wektorowa, chat z kontekstem — i chcesz przegadać architekturę albo zobaczyć, jak to wygląda w kodzie, daj znać. Chętnie pokażę, co się sprawdziło, a co bym dzisiaj zrobił inaczej.
