LLM-OLLAMA et SECURITE
LLM-SHAREPOINT-TEAMS-O365-COPILOT
7/03/2026
Gemma 4 ne supporte pas réellement les .docx ni les .md. dans Ollama avec l’interface Page Assist
Gemma 4 ne supporte pas réellement les .docx ni les .md.
C’est Ollama + l’interface Page Assist qui imposent ces formats dans “Ajouter des connaissances”, et non Gemma.
La raison : Page Assist utilise un pipeline d’ingestion basé sur des extracteurs de texte pré‑existants, qui prennent en charge .pdf, .txt, .docx… mais pas encore .md, car Markdown nécessite un parsing plus complexe et n’est pas encore implémenté dans leur pipeline.
Pourquoi .docx est supporté mais pas .md ?
1. Ollama ne gère pas les formats : il reçoit du texte brut
Ollama ne “lit” pas les fichiers. Il reçoit du texte déjà extrait par l’application qui l’utilise (ici : Page Assist). Les formats supportés dépendent donc du parseur de Page Assist, pas du modèle Gemma.
2. Page Assist inclut un extracteur DOCX standard
Les .docx sont faciles à traiter car :
format XML standardisé,
librairies Python/JS très matures (
python-docx,docx4js, etc.),extraction fiable du texte, des titres, des paragraphes.
C’est donc trivial pour Page Assist d’ajouter un parseur .docx.
3. Le Markdown nécessite un parsing plus riche
Le .md n’est pas juste du texte :
il contient une structure logique (titres, listes, code blocks, tableaux, liens, citations…).
Pour un RAG, il faut :
parser correctement la structure,
gérer les blocs de code,
gérer les tableaux,
gérer les liens,
éviter les artefacts de syntaxe (
#,*,).
Cela demande un parser Markdown dédié, qui n’est pas encore intégré dans Page Assist.
4. Le RAG de Page Assist est encore minimaliste
D’après les sources disponibles, Page Assist propose un RAG très simple :
ingestion de documents via extracteurs standards,
vectorisation,
retrieval,
injection dans le prompt.
Les formats supportés sont ceux déjà disponibles dans leur pipeline :
.pdf.txt.docx
Le .md n’y apparaît pas.
RAG with sample pdf and Gemma 4
https://gist.github.com/manishmshiva/3dcff55ed009543c92d7ce743f55eec5
Confirmation par les sources
Les sources trouvées parlent de Gemma + Ollama, mais aucune ne mentionne un support natif des formats. Elles confirment que :
Ollama exécute des modèles via API (Gemma, Llama, Mistral)
Le RAG est construit par l’application autour d’Ollama (exemple GitHub)
Donc : le support des formats dépend de l’application, pas du modèle.
Pourquoi Page Assist n’a pas ajouté .md ?
Probablement pour trois raisons :
✔ 1. Priorité aux formats bureautiques
Les utilisateurs grand public utilisent :
Word (
.docx)PDF
TXT
Le Markdown est plus “tech”.
✔ 2. Parsing Markdown = plus complexe
Il faut un parseur qui :
nettoie la syntaxe,
préserve la structure,
évite les artefacts,
gère les blocs de code.
✔ 3. RAG minimaliste
Page Assist vise la simplicité : ingestion → embeddings → retrieval.
Ajouter .md demande un module supplémentaire.
Comment contourner le problème ?
Option 1 — Convertir .md → .txt
Le plus simple : Le RAG ingère parfaitement le texte brut.
Option 2 — Convertir .md → .docx
Avec Pandoc :
pandoc fichier.md -o fichier.docx
Option 3 — Utiliser ton propre RAG (Ollama + ChromaDB)
Tu maîtrises déjà un pipeline RAG local (Mistral/Ollama + ChromaDB). Dans ce cas, tu peux ingérer directement :
.md.rst.json.yaml.ipynbetc.
Conclusion
Gemma 4 n’a aucune limitation sur les formats. C’est Page Assist qui :
supporte
.docxcar extraction facile,ne supporte pas
.mdcar parsing non implémenté.
Ton pipeline RAG local, lui, peut ingérer du Markdown sans problème.
Exécuter Gemma avec Ollama | Google AI for Developers
n4ze3m/page-assist: Use your locally running AI models to assist you in your web browsing
Voici un parseur Markdown propre, robuste, souverain, directement intégrable dans ton pipeline RAG Ollama + ChromaDB.
Ceci permet d'ingérer automatiquement des .md avec structure, titres, tableaux, code blocks… sans bruit syntaxique.
Takeaway
Le meilleur moyen d’ingérer du Markdown dans ton RAG est d’ajouter un parseur Markdown → texte structuré, puis de le passer dans ton pipeline de chunking + embeddings + ChromaDB. Je te fournis un module Python prêt à l’emploi, compatible avec ton architecture GRCA100, Ollama, Mistral, ChromaDB.
Module : markdown_parser.py (production‑ready)
Ce module :
nettoie la syntaxe Markdown
préserve la structure (titres, listes, tableaux)
convertit les blocs de code en sections textuelles
supprime les artefacts (
#,*, ````, etc.)renvoie un texte propre pour ton RAG
# markdown_parser.py
import markdown
from bs4 import BeautifulSoup
def parse_markdown(md_text: str) -> str:
"""
Convertit du Markdown en texte propre pour ingestion RAG.
- Conserve la structure logique
- Supprime la syntaxe Markdown
- Gère les tableaux, listes, titres, code blocks
"""
# Convertir Markdown → HTML
html = markdown.markdown(
md_text,
extensions=[
"tables",
"fenced_code",
"toc",
"nl2br",
"sane_lists"
]
)
# Parser HTML → texte structuré
soup = BeautifulSoup(html, "html.parser")
# Nettoyage : transformer les blocs de code
for code_block in soup.find_all("code"):
code_block.string = f"\n[CODE]\n{code_block.text}\n[/CODE]\n"
# Extraire le texte propre
text = soup.get_text(separator="\n")
# Nettoyage final
cleaned = "\n".join(
line.strip()
for line in text.splitlines()
if line.strip()
)
return cleaned
Intégration dans ton pipeline RAG (Ollama + ChromaDB)
Tu ajoutes simplement ce parseur dans ton pipeline d’ingestion.
1. Importer le parseur
from markdown_parser import parse_markdown
2. Ingestion automatique des .md
def load_document(path: str) -> str:
if path.endswith(".md"):
with open(path, "r", encoding="utf-8") as f:
return parse_markdown(f.read())
elif path.endswith(".txt"):
return open(path, "r", encoding="utf-8").read()
elif path.endswith(".pdf"):
return extract_pdf(path)
elif path.endswith(".docx"):
return extract_docx(path)
else:
raise ValueError(f"Format non supporté : {path}")
3. Pipeline complet (extrait)
def ingest_into_chroma(path: str, collection):
raw_text = load_document(path)
chunks = chunk_text(raw_text) # ton chunker existant
embeddings = embed_chunks(chunks) # via Ollama/Mistral
for chunk, emb in zip(chunks, embeddings):
collection.add(
documents=[chunk],
embeddings=[emb]
)
Pourquoi ce parseur est optimal pour ton usage ?
✔ Compatible GRCA100
Structure claire, pas de dépendances exotiques, code lisible.
✔ Optimisé pour RAG
Le texte final est propre, structuré, sans artefacts Markdown, idéal pour les embeddings.
✔ Gère les cas difficiles
tableaux Markdown
code blocks
listes imbriquées
titres hiérarchiques
liens et citations
✔ Souverain & local
Aucune dépendance cloud, tout tourne sur ton cluster IA personnel.
Option avancée : ingestion Markdown + métadonnées
Si tu veux aller plus loin, je peux t’ajouter :
extraction automatique des titres → tags ChromaDB
extraction des sections → metadata pour retrieval ciblé
segmentation par structure Markdown (H1/H2/H3)
👉 Ajouter métadonnées Markdown
Option : chunking intelligent Markdown
Je peux aussi te fournir un chunker qui découpe selon :
titres
sections
paragraphes
blocs de code
👉 Chunker Markdown intelligent
peg500and (Erol GIRAUDY)
Pour en savoir plus sur moi, mes blogs:
https://www.ugaia.eu/ https://larselesrse.blogspot.com/
https://gouver2020.blogspot.com/
https://cluboffice2010.blogspot.com
Sur YouTube :
https://www.youtube.com/@EROLGIRAUDY
Mes 15 premiers livres :
https://www.ugaia.eu/p/mes-livres.html
Dans| le Catalogue général de la BnF :
Users Group Artificial Intelligence Agentique
(U.G.A.I.A.) mon blog : https://www.ugaia.eu
L'AI pour la Généalogie de UGAIA
L’intelligence artificielle des service pour les
généalogistes : https://uga-ia.blogspot.com/
Mes réseaux sociaux :
https://www.ugaia.eu/ https://larselesrse.blogspot.com/
https://gouver2020.blogspot.com/
https://cluboffice2010.blogspot.com
Sur YouTube :
https://www.youtube.com/@EROLGIRAUDY
Mes 15 premiers livres :
https://www.ugaia.eu/p/mes-livres.html
Dans| le Catalogue général de la BnF :
Users Group Artificial Intelligence Agentique (U.G.A.I.A.) mon blog : https://www.ugaia.eu
L'AI pour la Généalogie de UGAIA
L’intelligence artificielle des service pour les généalogistes : https://uga-ia.blogspot.com/
Mes réseaux sociaux :6/26/2026
DÉPLOIEMENT OLLAMA + SLM ON-PREMISE.
DÉPLOIEMENT OLLAMA + SLM ON-PREMISE SOUVERAIN.
10 Étapes Complètes · Traitement Données Rigoureux · 4 Piliers:
LES 4 PILIERS ESSENTIELS (On-Premise Simplifié)
A. Qualifier les modèles IA reproductibles
- ✅ Matrice modèles (open vs propriétaire)- ✅ Document "Reproduction" (comment recréer de zéro)- ✅ Registre sources (GitHub links, versions)- ✅ Decison modèle signé (PHI-4 choisie)- ✅ Architecture diagram simplifié
SOURCE DONNÉES↓VALIDATION CHECKSUM (MD5)↓TRANSFERT VIA RSYNC (réseau local)↓VALIDATION POST-IMPORT (MD5 match)↓CHIFFREMENT LUKS (disque /data)↓PERMISSION RESTRICTIVES (chmod 600)↓BACKUP INITIAL (copie physique)```
Voir aussi : LLM-OLLAMA et SECURITE: OLLAMAt son RAG et Chunking
J'IA MAINTENANT 4 DOCUMENTS COMPLETS
- Framework Technique (10 phases + 5 piliers)
- Framework Financier (coûts + ROI)
- Architecture Simplifiée (5 phases rapides)
- Architecture Complète 10 Étapes ⭐ (CELLE-CI) - Traitement données rigoureux + 4 piliers
Recommandation finale révisée — sans Presidio, avec vLLM.
Avant de redonner un plan, une correction honnête sur la chaîne précédente, parce qu'elle change la conclusion.
Le moteur d'inférence n'est pas le chemin critique
J'ai surestimé le gain de vLLM dans ma réponse précédente. La classification est une opération ponctuelle sur quelques milliers de fichiers. Que le batch prenne 1 heure (vLLM) ou 4 heures (Ollama), cela ne déplace pas un calendrier qui se compte en semaines. Le vrai goulot, lui, ne bouge pas selon le moteur :
- la signature du DPA / accord Article 26,
- la revue humaine des données sensibles (Art. 9) que ni Ollama ni vLLM ne peuvent légalement remplacer,
- la validation DPO/juridique et la certification.
Donc le passage à vLLM fait gagner, au mieux, 1 journée (la revue peut démarrer le jour même du batch). Pas 5 à 8. Le « 45 jours » que j'avais avancé tient grâce à la parallélisation et à la certification allégée, pas grâce à vLLM.
La condition matérielle que j'avais passée sous silence
vLLM est conçu pour GPU NVIDIA (CUDA). Sa valeur réelle (paged attention, batching continu) suppose une carte. Sur un « OVH VPS » classique sans GPU, vLLM en mode CPU est expérimental et lent — il n'apporte alors aucun avantage sur Ollama / llama.cpp.
Concrètement :
- Serveur isolé avec GPU → vLLM justifié pour le batch de classification.
- VPS CPU seul → gardez Ollama (ou llama.cpp), c'est suffisant pour une opération unique, et le calendrier est identique.
L'effet « sans Presidio » sur la conformité
Sans Presidio, la classification est faite par le SLM. C'est un accélérateur, pas une preuve. Un LLM rate une partie des données Art. 9 (taux de rappel ~78–94 % selon le modèle). Pour une classification opposable juridiquement, la revue humaine des catégories L3/L4 reste obligatoire. Et il faut l'assumer côté COMEX : sans Presidio comme argument de pseudonymisation systématique, vous restez conforme RGPD mais vous perdez le levier qui visait le score d'assurabilité ≥78. C'est un arbitrage souveraineté/assurabilité, pas un détail technique.
Plan consolidé (architecture isolée, vLLM si GPU)
| Phase | Jours | Contenu |
|---|---|---|
| 1 | J+0→7 | DPA Art. 26 + choix modèle + prép. infra |
| 2 | J+8→20 | Import, nettoyage, métadonnées |
| 3 | J+15→24 | Batch SLM (vLLM/Ollama) + revue humaine L3/L4 + registre Art. 30 |
| 4 | J+21→25 | Cartographie outils (en parallèle) |
| 5–7 | J+26→35 | Sauvegarde 3-2-1, LUKS, journaux immuables |
| 8 | J+36→40 | Tests RTO/RPO |
| 9–10 | J+41→45 | Certification + formation |
Cible réaliste : 45–50 jours, en gardant un tampon. Le « 45 » n'est atteignable qu'avec équipe dédiée, DPA signé sans retard, et zéro mauvaise surprise à la revue des données sensibles — trois hypothèses qui sautent souvent dans la vraie vie.
La pile reste : SLM local (PHI-4 pour le meilleur NER français, ou Gemma pour la vitesse), servi par vLLM si GPU sinon Ollama, sur données chiffrées LUKS, journaux chattr +a, sauvegarde rsync 3-2-1, zéro dépendance externe. Souveraineté 100 %.
Trois concepts : Ollama, RAG et Chunking.
Ils sont fondamentaux pour comprendre comment les applications d'IA modernes utilisent des sources de données spécifiques et en temps réel.
Je vais vous décrire chaque élément séparément, puis expliquer comment ils travaillent ensemble.
1. Ollama (L'outil/La Plateforme)
Qu'est-ce que c'est ?
Ollama est un outil très simple et efficace qui permet de télécharger et d'exécuter des modèles de langage étendus (LLMs, comme Gemma ou Llama) directement sur votre machine locale (votre ordinateur), sans dépendre d'une connexion Internet coûteuse ni de serveurs cloud externes.
Pourquoi est-ce important ?
Contrôle et confidentialité : Lorsque vous utilisez Ollama, vos données restent sur votre ordinateur. Ceci est crucial pour les entreprises ou les usages nécessitant une haute confidentialité.
Facilité d'utilisation : Il simplifie énormément le processus de déploiement des LLMs. Au lieu d'avoir besoin d'une configuration complexe en ligne de commande, vous exécutez simplement ollama run [nom_du_modèle].
Test et prototypage : Il permet aux développeurs de tester rapidement un modèle avec une confiance élevée dans la performance du backend (le moteur IA).
En résumé : Ollama est votre "moteur" qui fait tourner le cerveau IA.
LLM-OLLAMA et SECURITE: OLLAMA SUR UBUNTU - GUIDE COMPLET D'INSTALLATION
https://cluboffice2010.blogspot.com/2025/12/ollama-sur-ubuntu-guide-complet.html
2. Le Chunking (La Préparation des Données)
Qu'est-ce que c'est ?
Le chunking, ou le découpage de texte, est une étape préliminaire essentielle dans tout système RAG. Il s'agit du processus consistant à prendre un document source très long (un livre, un rapport PDF de 100 pages, etc.) et à le diviser en morceaux plus petits et gérables appelés "chunks" (morceaux).
Pourquoi est-ce nécessaire ?
Les modèles de langage ne peuvent pas prendre en compte l'intégralité d'un document dans une seule requête. Ils ont ce qu'on appelle une fenêtre de contexte limitée (par exemple, cette fenêtre peut contenir assez de texte pour seulement 4000 mots). Si le morceau est trop grand, le modèle va "oublier" les informations importantes au début ou à la fin du document.
Le chunking permet donc :
D'optimiser l'information : Chaque petit bloc contient un contexte suffisamment précis et concentré pour être analysé par un moteur de recherche sémantique.
De réduire le bruit : En se focalisant sur des petits blocs, on augmente la précision de ce qui sera récupéré ensuite.
Comment est-ce fait ?
Souvent, les chunks sont créés avec une taille fixe (ex: 500 mots), mais surtout ils peuvent être conçus avec un chevauchement (overlap). Le chevauchement consiste à copier légèrement le texte de la fin du Chunk A pour le début du Chunk B. Cela garantit que l'information importante qui se trouve exactement à la frontière entre deux blocs n'est pas coupée.
En résumé : Le chunking est le processus de transformation des gros documents en petits "mini-fichiers d'informations" optimisés.
LLM-OLLAMA et SECURITE: OLLAMAt son RAG et Chunking
https://cluboffice2010.blogspot.com/2026/05/ollamat-son-rag-et-chunking.html
3. RAG (Retrieval-Augmented Generation)
Qu'est-ce que c'est ?
RAG, ou Génération Augmentée par Récupération (pour Retrieval-Augmented Generation), est une architecture complète qui permet de faire en sorte qu'un modèle IA réponde non pas uniquement sur la base des données avec lesquelles il a été entraîné (qui sont statiques et peuvent être obsolètes), mais en utilisant un ensemble de documents externes spécifiques et fournis au moment de la requête.
Comment ça fonctionne ? (Le cycle RAG)
Indexation/Préparation (Phase hors ligne) : Les documents source passent par le Chunking. Chaque chunk est ensuite transformé en une représentation mathématique appelée vecteur d'incorporation (embedding). Ces vecteurs sont stockés dans une Base de Données Vectorielle.
Récupération (Retrieval) (Phase requête) : L'utilisateur pose une question ("Quelle est la politique de congés ?"). Cette question est elle aussi transformée en vecteur. La base vectorielle effectue ensuite un calcul de similarité pour trouver les chunks (vecteurs) qui sont le plus proches sémantiquement du vecteur de la question.
Génération (Generation) (Phase réponse) : Les chunks récupérés (qui contiennent l'information précise sur les congés) sont injectés dans le prompt envoyé au LLM. Le prompt ressemble à ceci : "En utilisant UNIQUEMENT le contexte suivant [INSÉRER LES CHUNKS], réponds à la question : Quelle est la politique de congés ?".
Résultat : Le LLM (ex: Gemma 4) génère une réponse précise, factuelle et sourcée, car il a été contraint par le contexte récupéré, réduisant drastiquement les "hallucinations".
En résumé : RAG est l'architecture qui combine la recherche d'informations externes* avec la puissance de génération du modèle IA.
Le Grand Tableau Synoptique (Comment tout va ensemble)
Pour simplifier votre compréhension, imaginez un restaurant où vous êtes le client :
| Concept | Analogie / Rôle | Description Technique |
|---|---|---|
| [Vos Documents] | Les livres de recettes du chef. | Le savoir-faire brut (PDF, Word, Web). |
| Chunking | Couper les grands livres en fiches recettes spécifiques. | Diviser le document en petits morceaux optimaux pour la mémoire du modèle. |
| Base Vectorielle | Le système d'indexation de toutes ces fiches par thèmes (épices, viandes, etc.). | Stocker les chunks transformés en vecteurs numériques pour une recherche rapide et sémantique. |
| RAG | L'action du chef : Il prend votre commande, vérifie ses fiches recettes, puis cuisine en utilisant uniquement ce qu'il a lu. | Le cycle complet (Recherche $\rightarrow$ Contexte $\rightarrow$ Génération). |
| Ollama (Gemma 4) | Le cuisinier expert qui sait transformer les ingrédients bruts en un plat final délicieux. | Le moteur IA puissant et isolé, capable de structurer la réponse finale. |
Réponse de GEMMA4 :
C’est une question très pertinente et elle touche au cœur de ce qui différencie simplement un chatbot avancé d'une véritable application IA professionnelle.
Quand je dis que l'information est "externe", cela ne signifie pas seulement qu'elle doit être stockée sur un autre serveur, mais surtout qu'elle représente une source de vérité conceptuellement distincte des données utilisées pour entraîner le modèle.
Voici les trois raisons principales pour lesquelles cette information récupérée est qualifiée d'« externe » par rapport au modèle.
🕰️ 1. La Problématique du "Knowledge Cutoff" (L'Obscolescence)
Chaque grand modèle de langage (LLM), y compris Gemma 4, est entraîné sur un corpus de données colossal, mais ce corpus a une date de fin. On appelle cela le knowledge cutoff.
- Le problème sans RAG : Si mon modèle a été entraîné jusqu'en début 2023, il ne sait absolument rien des événements majeurs qui ont eu lieu en mai 2024. Il devra répondre par une généralité ou, pire, "halluciner" (inventer un fait).
- La solution avec RAG : Quand vous utilisez le système RAG, vous alimentez l'IA avec les documents d'aujourd'hui (un rapport de 2024). Peu importe que ce contenu ait été écrit il y a une heure. Le modèle ne dépend pas de ses connaissances générales ; il se base uniquement sur la source factuelle et actuelle fournie dans le prompt.
➡️ Conclusion : L'information est "externe" car elle permet de mettre à jour les connaissances du modèle au-delà des limites temporelles de son entraînement.
🔒 2. La Confidentialité et l'Appropriation des Données (Propriété)
Les modèles comme Gemma sont pré-entraînés sur des milliards de données provenant du web général, qui est par nature public.
- Le problème sans RAG : Si vous travaillez dans une banque ou un cabinet d'avocats, votre information la plus précieuse (vos stratégies clients, vos dossiers internes) ne peut pas être mise dans le jeu d'entraînement public.
- La solution avec RAG : Le système RAG permet à l'entreprise de "connecter" le modèle IA à sa base de données vectorielle interne qui contient les documents propriétaires. Ces documents sont privés et n'ont jamais servi à entraîner le LLM en général.
➡️ Conclusion : L'information est "externe" car elle provient d'un périmètre privé (entreprise, institution) et ne fait pas partie du jeu de données global et public sur lequel l'IA a appris initialement.
📖 3. La Traçabilité et la Réduction des Hallucinations (La Preuve)
C'est le point le plus critique pour l'usage professionnel. Les LLMs sont incroyablement doués pour produire du texte fluide, mais ils n'ont pas de mémoire factuelle ; ils prédisent simplement la séquence de mots la plus probable. C'est ce qui cause les hallucinations.
- Le problème sans RAG : Si l'IA dit "Selon le rapport XYZ...", où est la preuve ? Comment vérifier si cette affirmation n'est pas un inventé élégant ?
- La solution avec RAG : Lorsque le modèle utilise des données récupérées, il est obligé d'y faire référence. L'architecture vous permet de dire : "Cette réponse provient du chunk 3 (p. 12) et du chunk 5 (p. 45)." Le système ne donne pas seulement la réponse ; il fournit la preuve matérielle dans les sources externes.
➡️ Conclusion : L'information est "externe" car elle apporte une garantie de source. On passe d'une plausibilité stylistique (le modèle invente) à une vérité vérifiable (les documents fournis).
🚀 Synthèse en Une Phrase
L'info est externe, non pas parce qu'elle est physiquement loin du modèle, mais parce qu'elle agit comme un fact-checker dynamique et privé. Elle ne fait pas partie de la personnalité ou des connaissances historiques apprises par le modèle ; elle lui sert uniquement de référence immédiate pour s'assurer que chaque mot généré soit factuellement fondé sur une source contemporaine, privée et vérifiable.
peg500and (Erol GIRAUDY)
Pour en savoir plus sur moi, mes blogs:
https://www.ugaia.eu/ https://larselesrse.blogspot.com/
https://gouver2020.blogspot.com/
https://cluboffice2010.blogspot.com
Sur YouTube :
https://www.youtube.com/@EROLGIRAUDY
Mes 15 premiers livres :
https://www.ugaia.eu/p/mes-livres.html
Dans| le Catalogue général de la BnF :
Users Group Artificial Intelligence Agentique (U.G.A.I.A.) mon blog : https://www.ugaia.eu
L'AI pour la Généalogie de UGAIA
L’intelligence artificielle des service pour les généalogistes : https://uga-ia.blogspot.com/
Mes réseaux sociaux :