JuliaLM : Un système RAG autonome pour bases de connaissances personnelles
Les développeurs sont souvent confrontés au défi de traiter de grands volumes de documents : PDF, conférences YouTube, pages web. Les chatbots standards comme ChatGPT perdent le contexte lorsqu'ils travaillent avec plusieurs sources, et les frameworks RAG prêts à l'emploi peinent avec les documents scannés et les vidéos. JuliaLM résout ce problème avec un pipeline personnalisé : chargement unique des sources, recherche multi-stratégies et gestion du contexte. Le système est construit sur Nuxt.js, FastAPI et SurrealDB, offrant recherche vectorielle, chat et génération de flashcards.
Architecture de la pile technique et choix de SurrealDB
Le frontend Nuxt.js communique avec le backend via REST et SSE. FastAPI orchestre l'IA avec LangGraph, gère une file d'attente de tâches et s'intègre à SurrealDB. La base de données combine tables relationnelles, connexions graphe et recherche vectorielle en un seul service, remplaçant Postgres + Redis + Pinecone.
Frontend (Nuxt.js)
↕ REST + SSE
Backend (FastAPI)
├── LangGraph (orchestration IA)
├── Commandes en arrière-plan (file d'attente)
├── SurrealDB (données + vecteurs + graphe)
├── Gotenberg (conversion de documents)
└── MiniMax / API d'embedding (LLM + vectorisation)
La file d'attente est implémentée sur SurrealDB avec relances (jusqu'à 5 tentatives) et backoff exponentiel. Pour les sources légères—traitement synchrone (5–10 secondes) ; pour les PDF lourds—asynchrone avec interrogation de statut.
Analyse en cascade des sources
Le traitement des documents utilise des solutions de repli pour la fiabilité :
- Fichiers PDF et bureautiques : Docling pour Markdown avec préservation de la structure (titres, tableaux). Solution de repli—Gotenberg basé sur LibreOffice pour PPTX/XLSX.
- YouTube : 1) youtube-transcript-api (sous-titres par langue : RU→EN→ES→PT) ; 2) pytubefix (client Android) ; 3) Firecrawl/Jina.
- Pages web : Playwright (rendu JS, randomisation UA/viewport) + readability ; solutions de repli—Jina Reader, HTTP.
- Images : Modèle de vision pour OCR de texte manuscrit.
Cela garantit l'extraction de texte même en cas d'échec de l'API YouTube ou de CAPTCHAs.
Vectorisation et recherche multi-stratégies
Le texte est divisé en segments d'environ 500 tokens (15% de chevauchement) avec séparateurs prioritaires : sauts de ligne doubles → sauts de ligne simples → points. Un équilibre empirique entre précision et contexte pour les textes scientifiques.
La recherche de sources combine quatre stratégies en parallèle :
- Recherche vectorielle—sémantique via embeddings (cosinus ≥ 0,15).
- Recherche textuelle—BM25 sur le texte intégral.
- Recherche par titre—sur les titres.
- Recherche d'aperçus—sur les résumés et insights.
Déduplication : score +0,05 par correspondance. Top 5 résultats.
Gestion du contexte pour les documents longs
Limite globale—300 000 caractères (75K tokens). Par source : min 5 000, max 40 000.
- Source courte : entièrement.
- Longue + requête connue : insights + segments pertinents (recherche vectorielle interne).
- Longue + requête inconnue : insights + début du texte.
Cette approche évite le débordement de contexte lors du travail avec des livres.
Flashcards avec FSRS
Génération de paires "question-réponse" en JSON avec validation. Répétition espacée via FSRS : stabilité, difficulté, paramètres d'état (nouveau/apprentissage/révision). Notation 1–4 recalcule le planning. L'intégration dans le carnet supprime l'export vers Anki.
Recherche avancée en base de données
Deux modes de base : BM25 et recherche vectorielle. "Interroger la base de données"—graphe LangGraph :
- Génération de jusqu'à 5 sous-requêtes avec instructions.
- Recherche parallèle (jusqu'à 10 résultats/requête).
- Synthèse des réponses intermédiaires.
Points clés à retenir
- L'analyse en cascade garantit l'extraction de texte depuis n'importe quelle source, y compris YouTube sans sous-titres.
- Quatre stratégies de recherche améliorent le rappel de 20–30 % par rapport à une recherche vectorielle unique.
- La gestion du contexte permet de traiter des corpus >1000 pages sans perte de pertinence.
- L'intégration FSRS simplifie l'apprentissage en automatisant la répétition espacée.
- SurrealDB simplifie le déploiement : un conteneur au lieu de trois bases de données.
— Editorial Team
Aucun commentaire pour le moment.