Assistente.dev — AI coding companion, który zbudowałem

Assistente.dev to mój autorski AI companion dla developerów — uczy się Twojego kodu, odpowiada na pytania techniczne i pokazuje, z jakich plików korzystał.

JAJarosław Armatys 5 min czytania
Wersja wideo tego wpisu — obejrzyj na YouTube

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

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.

Tagi:#misc#ai#tooling#case-study

Masz pytanie do tego wpisu?

Napisz do mnie — chętnie porozmawiam o szczegółach technicznych, albo o tym jak zastosować to u Ciebie w projekcie.