01
📊 Contexte et enjeux
Le capital immatériel représente aujourd'hui 80% de la valeur des entreprises du CAC 40. Pourtant, la majorité des organisations peinent à capitaliser sur leur connaissance interne. Résultat : on réinvente ce qui a déjà été fait, on perd l'expertise au départ des collaborateurs, on passe des heures à chercher l'information.
80%
de la valeur = immatériel
50%
des connaissances perdues au départ
20%
seulement du temps à créer, 80% à chercher
🔄 Le cycle de vie de la connaissance en entreprise :
Création → Capture → Organisation → Partage → Réutilisation → (Perte)
L'IA et le graphe interviennent à chaque étape
02
❌ Le problème : knowledge silos et informations non structurées
📧 Emails
Connaissances noyées dans 50 000 emails/an
💬 Slack/Teams
Discussions volatiles, non indexées
📁 Drive/SharePoint
Arborescences complexes, doublons
🧠 Cerveaux
Expertise non documentée, départs = perte
📄 Wiki/Confluence
Obsolète, peu utilisé, difficile à maintenir
🗄️ BDD métier
Données brutes sans contexte sémantique
⚠️ Le coût caché du knowledge silo : Une étude IDC estime qu'un employé passe en moyenne 2,5 heures par JOUR à chercher l'information dont il a besoin.
03
🧠 Solution : Base de connaissances sémantique augmentée
Architecture d'une Knowledge Base sémantique :
[Sources] → [Ingestion] → [Graphe de connaissances] → [Interfaces]
│ │ │ │
Emails NLP/LLM Ontologie métier Chatbot
Slack Extraction Relations Recherche
Drive Embeddings Inférences API
Wiki Dédoublonnage Traçabilité Dashboard
↓
[Couche LLM pour Q&A]
↓
Réponse + Source + Confiance
Ontologie de knowledge management
@prefix : <http://km.example.org/ontology#> .
# Entités principales
:Personne a owl:Class .
:Projet a owl:Class .
:Compétence a owl:Class .
:Document a owl:Class .
:Discussion a owl:Class .
:Décision a owl:Class .
# Relations clés
:possèdeCompétence a owl:ObjectProperty .
:travailleSur a owl:ObjectProperty .
:aParticipéÀ a owl:ObjectProperty .
:estExpertDe a owl:ObjectProperty .
:aPourSource a owl:ObjectProperty .
# Règles d'inférence
# Si X travaille sur le projet P, X possède les compétences nécessaires à P
[ (:travailleSur ?x ?p), (:nécessiteCompétence ?p ?c) -> (:possèdeCompétence ?x ?c) ]
# Si X est l'auteur du document D, et D parle du sujet S, alors X est expert de S
[ (:estAuteurDe ?x ?d), (:parleDe ?d ?s) -> (:estExpertDe ?x ?s) ]
04
⚙️ Architecture technique détaillée
Pipeline d'ingestion automatique
class KnowledgeIngestionPipeline:
def __init__(self, kg, vector_db, llm):
self.kg = kg
self.vector_db = vector_db
self.llm = llm
def ingest_email(self, email):
# Extraction des métadonnées
sender = extract_sender(email)
recipients = extract_recipients(email)
subject = email.subject
body = email.body
# Détection des sujets et entités
topics = self.llm.extract_topics(body)
entities = self.llm.extract_entities(body) # projets, personnes, décisions
# Création des nœuds et relations dans le graphe
email_id = f"email_{hash(email)}"
self.kg.insert(f"""
:{email_id} a :Discussion ;
:envoyéPar :{sender} ;
:envoyéÀ :{','.join(recipients)} ;
:aPourSujet "{subject}" ;
:aPourThème :{topics[0]} .
""")
# Liens avec les entités détectées
for entity in entities:
self.kg.insert(f":{email_id} :mentionne :{entity}")
# Embedding pour recherche sémantique
embedding = self.embed_model.encode(body)
self.vector_db.insert({
'id': email_id,
'embedding': embedding,
'text': body,
'type': 'email'
})
def ingest_slack_message(self, message, channel, user):
# Pipeline similaire pour Slack/Teams
# avec en plus la détection des threads et réactions
pass
def build_expertise_graph(self):
# Inférence automatique des compétences
self.kg.infer("""
CONSTRUCT { ?person :estExpertDe ?topic }
WHERE {
?person :aÉcrit ?doc .
?doc :parleDe ?topic .
FILTER (COUNT(?doc) > 3)
}
""")
Moteur de Q&A conversationnel
class KnowledgeBaseAssistant:
def __init__(self, kg, vector_db, llm):
self.kg = kg
self.vector_db = vector_db
self.llm = llm
self.conversation_history = []
def ask(self, question, user_context=None):
# 1. Classification de la question
intent = self.classify_intent(question)
# Types : "factuel", "expertise", "document", "décision", "projet"
if intent == 'expertise':
# Qui sait quoi ?
query = f"""
SELECT ?person ?skill WHERE {{
?person :estExpertDe ?skill .
FILTER(CONTAINS(LCASE(?skill), LCASE("{question}")))
}}
"""
experts = self.kg.query(query)
return self.format_experts(experts)
elif intent == 'decision':
# Quelle décision a été prise ?
query = f"""
SELECT ?decision ?date ?context WHERE {{
?decision a :Décision ;
:concerneProjet ?project ;
:priseLe ?date ;
:documentéeDans ?doc .
FILTER(CONTAINS(LCASE(?project), LCASE("{question}")))
}}
ORDER BY DESC(?date)
LIMIT 5
"""
decisions = self.kg.query(query)
return self.format_decisions(decisions)
else:
# Recherche sémantique par défaut
similar = self.vector_db.similarity_search(question, k=5)
context = "\n".join([doc.text for doc in similar])
response = self.llm.generate(f"""
Contexte KM: {context}
Question: {question}
Réponse (avec sources):
""")
# Enrichissement avec relations du graphe
enriched = self.kg.query(f"""
SELECT ?related WHERE {{
?doc :mentionne|:estLiéÀ ?related .
FILTER(?doc IN ({','.join([doc.id for doc in similar])}))
}}
""")
return {
'answer': response,
'sources': similar,
'related_topics': enriched
}
06
🎯 Cas d'usage métier concrets
🔍 Scénario 1 : Nouvel arrivant
"Je viens d'arriver dans l'équipe R&D. Quels sont les projets en cours et qui fait quoi ?"
→ La KB génère un onboarding personnalisé : projets, contributeurs, documents clés, historique des décisions.
🔍 Scénario 2 : Départ d'un expert
"Sophie, notre experte sécurité, part à la retraite dans 3 mois."
→ La KB identifie automatiquement toutes les connaissances détenues par Sophie (documents, décisions, contacts, compétences) et propose un plan de transfert.
🔍 Scénario 3 : Évitement de redondance
"L'équipe produit veut développer une nouvelle fonctionnalité d'export PDF."
→ La KB révèle que l'équipe support a déjà créé un outil similaire il y a 2 ans. Économie : 3 mois de développement.
🔍 Scénario 4 : Décision stratégique
"Pourquoi avons-nous abandonné le marché allemand en 2022 ?"
→ La KB remonte les CR de réunion, emails, analyses de marché qui ont conduit à cette décision.
🔍 Scénario 5 : Cross-pollinisation
"L'équipe commerciale a développé une méthode de qualification client."
→ La KB détecte que l'équipe marketing pourrait l'utiliser, et suggère un partage.