Sources & Données
Cartographier les **sources**, choisir les **connecteurs**, définir les **métadonnées** et la **fraîcheur** : fondations d’un RAG crédible.
Connecteurs Types de docs Métadonnées Dédup & qualité Fraîcheur Conformité Observabilité
Catalogue des connecteurs — panorama & conseils d’audit
📂 Fichiers & stockages
- Filesystem/NAS, S3/MinIO, Azure Blob, GCS.
- Formats: PDF, DOCX, MD, PPTX, XLSX, CSV, images.
- Incrémental: checksum + watch (fs events) / list-objects delta.
🌐 Web
- Sites internes, docs API, wiki publics.
- Respect
robots.txt,sitemap.xml, rate-limits. - Extraction: readability + détection sections (H1–H3).
🏢 SaaS & knowledge bases
- Confluence, SharePoint, Google Drive, Notion.
- Jira, GitHub/GitLab, Zendesk, Salesforce.
- Slack/Teams (threads & files), Gmail/Exchange (selon politique).
Question d’entretien
Quels espaces/espèces de contenus sont “source de vérité” ? (owner, fréquence MAJ, droits)🗃️ Bases de données
- SQL (Postgres, MySQL, SQL Server), NoSQL (Mongo, ES).
- Mode snapshot (exports) ou CDC (Change Data Capture).
- Tables → Structured RAG (faits JSON) plutôt que texte libre.
Punchline : « On privilégie les connecteurs officiels + incrémental fiable. »
✅ Signaux verts
- Connecteurs maintenus (SLA, versioning API).
- Scopes d’accès minimaux (least privilege).
- Plan d’échec & retry idempotent.
⛔ Rouges
- Scraping sauvage sans règles ni logs.
- Secrets en clair, pas de rotation.
- Pas d’incrémental → réindex complet quotidien.
🧪 KPI d’ingestion
- Couverture = docs ingérés / docs attendus.
- Lag de fraîcheur (p95) < 24 h (ou SLA métier).
- Taux d’erreurs < 1%, retry success > 98%.
Types de documents — extraction & normalisation
📄 Textuels
- PDF (texte) → conserver ordre de lecture; ignorer pieds/entêtes.
- DOCX/ODT → styles, titres H1–H3, tableaux → Markdown.
- HTML/MD → parser sections, préserver liens & ancres.
🖼️ Images & scans
- OCR (Tesseract/Cloud), langue détectée, confiance <score>.
- Tableaux via table detection (Camelot/DocTR).
- Sauts de page → conserver numéro page pour citations.
📊 Tabulaires & logs
- CSV/XLSX → normaliser types, header, encodage (UTF-8).
- Logs → fenêtres, masquage PII, rotation.
- Tables → Structured RAG (schemas + facts).
🔤 Encodage & langues
- UTF-8 by default, détecter ISO-8859-1/Windows-1252.
- Langue par doc & par chunk (fr/en/…)
- Normaliser ponctuation, espaces, listes.
📦 Exemples de transformations
# Headings → Markdown
H1,H2,H3 → "# ","## ","### "
# Tables → pipe markdown
# Code blocks → ```lang
# Nettoyage
- remove_headers_footers()
- collapse_whitespace()
- normalize_bullets()Anti-patterns : OCR sans confiance, perte des titres, encodages mélangés.
Métadonnées & taxonomie — schéma minimal et gouvernance
🧱 Schéma minimal (recommandé)
{
"doc_id":"uuid","source_url":"str","title":"str","lang":"fr",
"author":"str","created_at":"ts","last_updated":"ts",
"product":"str","version":"str","confidentiality":"public|internal|secret",
"tags":["str"],"checksum":"sha256","pii":"none|low|high"
}- Enrichir par taxonomie métier (produit, domaine).
- Traçabilité : provenance, owner, workflow d’approbation.
🧭 Questions d’audit
- Qui maintient la taxonomie ? (SME, comité)
- Quelles labels de confidentialité ? (RBAC/ABAC)
- Doit-on garder la langue d’origine ? (pas de mix)
Punchline : « Sans métadonnées, pas de filtres, pas de guardrails, pas de confiance. »
Déduplication & qualité — éviter le bruit dans l’index
🧪 Méthodes
- Exact : checksum SHA-256 (fichiers identiques).
- Near-duplicate : shingling + MinHash / SimHash.
- Canonisation : normaliser puces, espaces, liens.
📊 Seuils & signalétique
- SimHash Hamming ≤ 3 → probable duplicat.
- MinHash Jaccard ≥ 0.85 → fusion/ignore.
- Qualité OCR < 0.7 → route “à revoir”.
⚠️ À surveiller
- PDF multi-colonnes (ordre lecture).
- Exports automatiques (versions quasi identiques).
- Pages générées (menus/footers répétitifs).
Anti-patterns : dédup au niveau fichier seulement; pas de métriques qualité.
Fraîcheur & incrémental — ne pas réindexer inutilement
⏱️ Signaux d’update
- HTTP:
ETag,If-Modified-Since. - APIs: change tokens / delta endpoints.
- Files: mtime + taille + checksum.
# pseudo
def should_fetch(meta): return not cache.has(meta.etag) or meta.last_modified > cache.ts📆 Ordonnancements
- Forte MAJ: toutes les 1–4 h; faible: 1–7 j.
- Backoff et quotas API (rate limit).
- Traçabilité: ingestion_lag_hours.
✅ KPI & gouvernance
- Lag p95 < SLA (ex. 24 h).
- % de fetch 304 (non modifié) > 60% → bon incrémental.
- Taux d’échec retry < 2%.
Authentification, secrets & périmètres d’accès
🔐 Mécanismes
- OAuth2/OIDC (SaaS), Service Accounts, PAT (Git), SAML.
- Scopes minimaux, rotation, secrets vaultés.
- Journalisation des accès (who/when/what).
🧭 Questions d’audit
- Qui approuve les scopes ?
- Quelle segmentation des collections (RBAC/ABAC) ?
- Politique de rétention (PII, NDA) ?
⛔ Anti-patterns
- Jetons stockés en clair / code.
- Connecteur “admin global”.
- Pas de revue périodique des accès.
Punchline : « Moins d’accès, plus de logs. »
Observabilité & SLA — voir, mesurer, corriger
📊 Métriques ingestion
- Docs ingérés / attendus (couverture).
- Lag de fraîcheur p50/p95.
- Taux d’erreur, retries, temps moyen d’extraction.
🔔 Alertes
- Lag > SLA, erreurs > seuil, 0 nouveaux docs > N h.
- Delta taille index vs attente (trous).
📜 Traces & audit
- trace_id par doc (source → connecteur → chunks).
- Historique des versions (doc_id, checksum, index_ver).
- Table “ingestion_events” (start, end, status, stats).
Événement (extrait)
{"event":"ingest","source":"confluence","docs":128,"ok":124,"failed":4,"lag_h":2.1,"trace_id":"..."}Data contracts — modèle de document & règles de qualité
🧱 Schéma “document”
{
"doc_id":"uuid","source":"confluence","source_url":"https://...",
"title":"str","lang":"fr","body_md":"str",
"meta":{"product":"WebApp","version":"4.2","conf":"internal"},
"citables":[{"href":"...#p3","label":"Guide SSO p.3"}],
"checksum":"sha256","index_ver":"v3","ingested_at":"ts"
}Tout ce qui manque ici devient une dette technique côté retrieval/guardrails.
🧪 Règles de qualité (exemples)
- lang ∈ {fr,en,de}; title non vide; body_md ≥ 300 chars.
- citables ≥ 1 si source PDF/HTML.
- conf ∈ {public,internal,secret}; owner obligatoire.
Anti-patterns : schéma implicite, champs libres hétérogènes, valeurs mixtes.
Collections & routing des données
🎛️ Découpage conseillé
- Par produit (WebApp, Mobile), fonction (RH, Juridique), langue.
- Collections “haute confiance” vs “forums/notes”.
- Mirroring envs (Prod/Préprod) si nécessaire.
🔁 Routage
{"routing":{"collections":["kb_product_fr","kb_rh_fr","kb_it_en"],
"policy":"ml+rules","fallback":"merge_topk"}}Mesurer le taux de bon routage et l’impact sur Hit@k global.
⚠️ Écueils
- Collections qui se recouvrent trop.
- Absence de gouvernance/owner par collection.
- Pas de stratégie de migrations/merge.
Conformité (PII, RGPD) & licences de contenus
🛡️ PII & sécurité
- Classification: public / interne / secret.
- DLP: détection PII (emails, IBAN, tel) → redaction/masking.
- Rétention & droit à l’oubli (suppression ciblée).
⚖️ Licences & droits
- Vérifier droit d’indexation & de citation (copyright/contrats).
- Exclure contenus tiers non licenciés.
- Traçabilité des sources (pour audit).
✅ Checklist démarrage
- Registre de traitement (RGPD) déclaré.
- Politique d’accès approuvée (RBAC/ABAC).
- Runbooks d’incident (exposition de doc sensible).
Punchline : « Le RAG cite → il doit pouvoir citer. »
