JuliaLM: Vlastní implementace RAG systému pro osobní znalostní báze
Vývojáři často řeší zpracování velkého množství dokumentů: PDF, YouTube přednášek, webových stránek. Standardní chatoví roboti jako ChatGPT ztrácejí kontext při práci s více zdroji a hotové RAG frameworky si špatně poradí se skeny a videi. JuliaLM to řeší vlastním pipeline: jednorázové načtení zdrojů, vícevrstvé vyhledávání a rozpočtování kontextu. Systém je postaven na Nuxt.js, FastAPI a SurrealDB, zajišťuje vektorové vyhledávání, chat a generování kartiček.
Architektura stacku a volba SurrealDB
Frontend v Nuxt.js komunikuje s backendem přes REST a SSE. FastAPI orchestruje AI pomocí LangGraph, spravuje frontu úloh a integruje se s SurrealDB. Databáze kombinuje relační tabulky, grafové vazby a vektorové vyhledávání v jedné službě, nahrazuje Postgres + Redis + Pinecone.
Frontend (Nuxt.js)
↕ REST + SSE
Backend (FastAPI)
├── LangGraph (orchestrace AI)
├── Pozadí příkazů (fronta úloh)
├── SurrealDB (data + vektory + graf)
├── Gotenberg (konverze dokumentů)
└── MiniMax / Embedding API (LLM + vektorizace)
Fronta úloh je implementována nad SurrealDB s opakováním (až 5 pokusů) a exponenciálním backoffem. Pro lehké zdroje – synchronní zpracování (5–10 s), pro těžké PDF – asynchronní s pollingem stavů.
Kaskádové parsování zdrojů
Zpracování dokumentů využívá fallbacky pro spolehlivost:
- PDF a kancelářské soubory: Docling pro Markdown se zachováním struktury (nadpisy, tabulky). Fallback – Gotenberg na bázi LibreOffice pro PPTX/XLSX.
- YouTube: 1) youtube-transcript-api (titulky podle jazyků: RU→EN→ES→PT); 2) pytubefix (Android klient); 3) Firecrawl/Jina.
- Webové stránky: Playwright (JS renderování, randomizace UA/viewport) + readability; fallbacky – Jina Reader, HTTP.
- Obrázky: Vision model pro OCR ručně psaného textu.
To zajišťuje extrakci textu i při výpadcích YouTube API nebo captchách.
Vektorizace a vícevrstvé vyhledávání
Text je nařezán na chunky ~500 tokenů (překrytí 15 %) s prioritními oddělovači: dvojité zalomení → jednoduché → tečky. Empirická rovnováha mezi přesností a kontextem pro vědecké texty.
Vyhledávání ve zdrojích kombinuje čtyři strategie paralelně:
- Vektorové vyhledávání – sémantické podle embeddingů (cosine ≥ 0,15).
- Textové vyhledávání – BM25 podle celého textu.
- Vyhledávání v nadpisech – podle titulků.
- Vyhledávání insightů – podle shrnutí a poznatků.
Deduplikace: score +0,05 za každou shodu. Top-5 výsledků.
Rozpočtování kontextu pro dlouhé dokumenty
Celkový limit – 300 000 znaků (75K tokenů). Na zdroj: min 5000, max 40 000.
- Krátký zdroj: celý.
- Dlouhý + známý dotaz: insighty + relevantní chunky (interní vektorové vyhledávání).
- Dlouhý + neznámý dotaz: insighty + začátek textu.
Přístup zabraňuje přeplnění kontextu při práci s knihami.
Kartičky s FSRS
Generování párů „otázka-odpověď“ v JSON s validací. Intervalové opakování podle FSRS: parametry stability, obtížnosti, stavu (nová/studuje se/opakuje). Hodnocení 1–4 přepočítává rozvrh. Integrace do poznámkového bloku vylučuje export do Anki.
Rozšířené vyhledávání v databázi
Dva základní režimy: BM25 a vektorové vyhledávání. „Zeptat se databáze“ – LangGraph graf:
- Generování až 5 poddotazů s instrukcemi.
- Paralelní vyhledávání (až 10 výsledků/dotaz).
- Syntéza meziodpovědí.
Co je důležité
- Kaskádové parsování garantuje extrakci textu z jakýchkoli zdrojů, včetně YouTube bez titulků.
- Čtyři strategie vyhledávání zvyšují recall o 20–30 % ve srovnání s jedním vektorovým vyhledáváním.
- Rozpočet kontextu umožňuje zpracovat korpusy >1000 stránek bez ztráty relevance.
- FSRS integrace zjednodušuje učení automatizací spaced repetition.
- SurrealDB zjednodušuje nasazení: jeden kontejner místo tří databází.
— Editorial Team
Zatím žádné komentáře.