Powrót do strony głównej

JuliaLM: RAG dla baz wiedzy bez ChatGPT

JuliaLM — otwarta system RAG dla osobistych baz wiedzy. Wykorzystuje SurrealDB do wektorów i grafu, kaskadowe parsowanie dla PDF/YouTube, cztery strategie wyszukiwania. Zawiera FSRS dla fiszek i budżetowanie kontekstu.

Zbuduj JuliaLM: odpowiednik NotebookLM na swoim stacku
Advertisement 728x90

JuliaLM: własna implementacja systemu RAG dla osobistych baz wiedzy

Programiści często mierzą się z zadaniem przetwarzania dużych ilości dokumentów: PDF, wykładów z YouTube, stron internetowych. Standardowe chat-boty, takie jak ChatGPT, tracą kontekst podczas pracy z wieloma źródłami, a gotowe frameworki RAG słabo radzą sobie ze skanami i filmami. JuliaLM rozwiązuje to poprzez niestandardowy pipeline: jednorazowe ładowanie źródeł, wielostrategiczne wyszukiwanie i budżetowanie kontekstu. System zbudowany jest na Nuxt.js, FastAPI i SurrealDB, zapewniając wyszukiwanie wektorowe, chat i generowanie fiszek.

Architektura stosu i wybór SurrealDB

Frontend w Nuxt.js komunikuje się z backendem przez REST i SSE. FastAPI orkiestruje AI z LangGraph, zarządza kolejką zadań i integruje się z SurrealDB. Baza łączy tabele relacyjne, połączenia grafowe i wyszukiwanie wektorowe w jednej usłudze, zastępując Postgres + Redis + Pinecone.

Frontend (Nuxt.js)
    ↕ REST + SSE
Backend (FastAPI)
    ├── LangGraph (orkiestracja AI)
    ├── Zadania w tle (kolejka zadań)
    ├── SurrealDB (dane + wektory + graf)
    ├── Gotenberg (konwersja dokumentów)
    └── MiniMax / Embedding API (LLM + wektoryzacja)

Kolejka zadań zaimplementowana jest na bazie SurrealDB z ponownymi próbami (do 5) i wykładniczym wycofywaniem. Dla lekkich źródeł — przetwarzanie synchroniczne (5–10 s), dla ciężkich PDF — asynchroniczne z pollingiem statusów.

Google AdInline article slot

Kaskadowe parsowanie źródeł

Przetwarzanie dokumentów wykorzystuje fallbacki dla niezawodności:

  • PDF i pliki biurowe: Docling dla Markdown z zachowaniem struktury (nagłówki, tabele). Fallback — Gotenberg oparty na LibreOffice dla PPTX/XLSX.
  • YouTube: 1) youtube-transcript-api (napisy w językach: PL→EN→ES→PT); 2) pytubefix (klient Android); 3) Firecrawl/Jina.
  • Strony internetowe: Playwright (renderowanie JS, randomizacja UA/viewport) + readability; fallbacki — Jina Reader, HTTP.
  • Obrazy: Model wizyjny do OCR tekstu odręcznego.

To zapewnia ekstrakcję tekstu nawet przy awariach YouTube API lub captchach.

Wektoryzacja i wielostrategiczne wyszukiwanie

Tekst dzielony jest na fragmenty ~500 tokenów (nakładanie 15%) z priorytetowymi separatorami: podwójne nowe linie → pojedyncze → kropki. Empiryczna równowaga między precyzją a kontekstem dla tekstów naukowych.

Google AdInline article slot

Wyszukiwanie w źródłach łączy cztery strategie równolegle:

  • Wyszukiwanie wektorowe — semantyczne po embeddingach (cosine ≥ 0.15).
  • Wyszukiwanie tekstowe — BM25 po pełnym tekście.
  • Wyszukiwanie po tytułach — po nagłówkach.
  • Wyszukiwanie insightów — po podsumowaniach i kluczowych punktach.

Deduplikacja: score +0.05 za każde dopasowanie. Top-5 wyników.

Budżetowanie kontekstu dla długich dokumentów

Ogólny limit — 300 000 znaków (75K tokenów). Na źródło: min 5000, max 40 000.

Google AdInline article slot
  • Krótkie źródło: w całości.
  • Długie + znane zapytanie: insighty + relewantne fragmenty (wewnętrzne wyszukiwanie wektorowe).
  • Długie + nieznane zapytanie: insighty + początek tekstu.

Podejście zapobiega przepełnieniu kontekstu przy pracy z książkami.

Fiszki z FSRS

Generacja par „pytanie-odpowiedź” w JSON z walidacją. Powtórki interwałowe według FSRS: parametry stabilności, trudności, stanu (nowa/uczona/powtarzana). Ocena 1–4 przelicza harmonogram. Integracja z notatnikiem eliminuje eksport do Anki.

Rozszerzone wyszukiwanie w bazie

Dwa podstawowe tryby: BM25 i wyszukiwanie wektorowe. „Zapytaj bazę” — graf LangGraph:

  • Generacja do 5 podzapytań z instrukcjami.
  • Równoległe wyszukiwanie (do 10 wyników/zapytanie).
  • Synteza pośrednich odpowiedzi.

Co jest ważne

  • Kaskadowe parsowanie gwarantuje ekstrakcję tekstu z dowolnych źródeł, włączając YouTube bez napisów.
  • Cztery strategie wyszukiwania zwiększają recall o 20–30% w porównaniu z pojedynczym wyszukiwaniem wektorowym.
  • Budżet kontekstu pozwala przetwarzać korpusy >1000 stron bez utraty relewancji.
  • Integracja FSRS upraszcza naukę, automatyzując spaced repetition.
  • SurrealDB upraszcza wdrożenie: jeden kontener zamiast trzech baz.

— Editorial Team

Advertisement 728x90

Czytaj dalej