← Projets Projet · Embeddings

SkillBridge

Data & AI provider pour un dataspace éducation & compétences (Prometheus-X / DASES) : ingestion de traces d'apprentissage xAPI, enrichissement par compétences mappées ESCO, clustering et recommandation explicable par embeddings locaux.

RôleConception & développement
Année2026
StatutEn ligne
Le problème

Des traces d'apprentissage muettes sur les compétences

Dans un dataspace éducation (Prometheus-X / DASES), les applications produisent des traces d'apprentissage xAPI — mais ces traces ne disent rien, en l'état, des compétences travaillées, et rien ne les relie à un référentiel partagé comme ESCO. Sans cette couche sémantique, pas de recommandation pertinente ni d'interopérabilité entre acteurs du dataspace.

L'approche

Une brique Data & IA souveraine et explicable

SkillBridge est le maillon Data & IA de la chaîne : traces xAPI (converties via un LRC traité comme service externe) → enrichissement par un référentiel de compétences maison mappé vers ESCO (la granularité ESCO étant inadaptée au primaire — ADR-001) → clustering KMeans des profils apprenants (k choisi par silhouette pure) → recommandation explicable dont le score est une somme pondérée assumée : 50 % recouvrement de compétences, 20 % adéquation de niveau, 20 % similarité sémantique, 10 % signal de cluster.

La similarité sémantique repose sur des embeddings 100 % locaux (sentence-transformers multilingue, bundlé dans l'image Docker au build — aucun appel d'inférence externe, aucun téléchargement au démarrage), comparés en mémoire via NumPy : pas de base vectorielle, pas de dépendance tierce. Architecture hexagonale (domain / application / adapters), API FastAPI, front de démonstration Streamlit, données synthétiques pseudonymisées. Docs-as-code complet : arc42 + C4 côté technique, Diátaxis côté utilisateur, 7 ADR.

Le résultat

Trois services en ligne, une posture démontrée

Trois services déployés (vitrine, API, documentation) sur VPS Hetzner via Coolify, derrière Traefik/TLS. Livré en un sprint de deux jours structuré en lots tracés dans l'historique git, avec ses limites documentées honnêtement (pas d'auth, pas de scaling horizontal, mapping ESCO illustratif). La brique démontre le mécanisme d'interopérabilité sémantique d'un dataspace, en local et souverain de bout en bout.

Décisions d'architecture

Les choix qui tiennent la maison

Chaque décision structurante est consignée dans un ADR. Quelques-unes qui comptent :

ADR-001

Référentiel maison de compétences + mapping ESCO

La granularité ESCO est inadaptée au primaire : référentiel maison de 18 compétences de numératie, chacune mappée vers des URIs ESCO canoniques (mapping illustratif, mécanisme d'interopérabilité démontré).

ADR-002

Archétypes pédagogiques par forme, pas par magnitude

ADR-003

k choisi par silhouette pure, sans tie-break heuristique

ADR-004

LRC traité comme service externe (runbook), pas submodule

ADR-005

meta.profile = null assumé, pas d'injection manuelle

ADR-006

/convert_custom avec mapping maison, pas mappers natifs

ADR-007

Reco filtrée sur les ressources maîtrisées, pas tentées

La stack

Souveraine de bout en bout

PythonFastAPIsentence-transformersscikit-learnNumPyStreamlitDockerCoolify