| .vscode | ||
| apps | ||
| Chart | ||
| packages/shared | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .sops.yaml | ||
| docker-compose.yml | ||
| Dockerfile.api | ||
| Dockerfile.ui | ||
| Dockerfile.worker | ||
| Makefile | ||
| README.md | ||
Knowledge Base IA
Application RAG locale avec SvelteKit, Hono, PostgreSQL, Redis, MinIO, Qdrant et OpenAI.
Lancement
cp .env.example .env
docker compose up -d
URLs locales:
- UI: http://localhost:3000
- API health: http://localhost:8080/health
- MinIO console: http://localhost:9001
- Docling UI: http://localhost:5001/ui
Compte local par defaut:
- email:
admin@local - mot de passe: valeur de
DASHBOARD_PASSWDdans.env(change-mepar defaut)
Fonctionnement
- Creer une base de connaissances.
- Importer un document.
- Le worker lit le job Redis, extrait le contenu, cree les chunks, genere les embeddings et indexe Qdrant.
- Le chat recherche les chunks pertinents dans Qdrant avec filtres tenant/base, ajoute une recherche texte PostgreSQL, puis repond avec citations.
Sans OPENAI_API_KEY, les embeddings et le chat utilisent un fallback deterministic/local pour garder le pipeline testable. Avec une cle OpenAI, le worker utilise OPENAI_EMBEDDING_MODEL et le chat utilise OPENAI_CHAT_MODEL.
Variables
Voir .env.example. Les principales:
DATABASE_URLREDIS_URLQDRANT_URLQDRANT_API_KEYS3_ENDPOINTS3_ACCESS_KEYS3_SECRET_KEYS3_BUCKETOPENAI_API_KEYOPENAI_EMBEDDING_MODELOPENAI_CHAT_MODELDOCLING_URLDOCLING_TIMEOUT_MSDOCLING_DO_OCR
Ingestion
Le worker utilise Docling Serve en priorite via DOCLING_URL pour les PDF, DOCX, PPTX, XLSX, HTML et images. Il soumet les conversions via l'endpoint async Docling, poll le statut, puis recupere le resultat. En cas d'indisponibilite de Docling, il retombe sur les extracteurs internes: texte, Markdown, JSON, CSV, HTML, PDF texte et documents image simples.
Par defaut, l'OCR Docling est desactive (DOCLING_DO_OCR=false) pour eviter les traitements tres longs sur les PDF qui contiennent deja du texte. Active-le pour les scans ou documents image.
PostgreSQL conserve la verite applicative. MinIO conserve les originaux. Qdrant conserve les vecteurs et un payload minimal. Les embeddings ne sont pas stockes dans PostgreSQL.
Tests
cd apps/api && npm test
cd apps/worker && npm test
cd apps/ui && npm test
Ou via Compose:
make test