Docling — Traitement de documents¶
Docling fournit la conversion de documents PDF/DOCX/HTML en texte structuré (Markdown, JSON) pour les pipelines RAG et l'analyse documentaire dans AKKO. Il utilise l'analyse de mise en page et l'OCR sur CPU pour extraire texte, tableaux et figures de documents complexes — entièrement hors ligne, sans appels API externes.
Architecture¶
ai-service / ADEN / Cockpit
|
+-----v------+
| Docling | API REST (port 5001)
| (Traitement | PDF/DOCX/HTML -> Markdown/JSON
| de docs) |
+------------+
Formats supportés¶
| Format d'entrée | Description |
|---|---|
| Texte natif + OCR pour les pages numérisées | |
| DOCX | Documents Microsoft Word |
| PPTX | Présentations Microsoft PowerPoint |
| HTML | Pages web |
| Images | PNG, JPEG, TIFF (via OCR) |
| Markdown | Passage direct avec normalisation |
Utilisation¶
Depuis ai-service (pipeline RAG)¶
import httpx
response = httpx.post(
"http://akko-akko-docling:5001/v1/convert",
files={"file": ("rapport.pdf", open("rapport.pdf", "rb"), "application/pdf")},
data={"output_format": "markdown"}
)
texte_structure = response.json()["content"]
Depuis les notebooks¶
import requests
# Convertir un PDF en Markdown structuré
with open("document.pdf", "rb") as f:
resp = requests.post(
"http://akko-akko-docling:5001/v1/convert",
files={"file": ("document.pdf", f, "application/pdf")},
data={"output_format": "markdown"}
)
print(resp.json()["content"])
Vérification de santé¶
Configuration¶
Kubernetes (Helm)¶
akko-docling:
enabled: true
image:
repository: quay.io/docling-project/docling-serve-cpu
tag: "latest" # Épingler une version spécifique en production
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: "2"
memory: 4Gi
Exigence mémoire
Docling charge des modèles ML pour l'analyse de mise en page et l'OCR. Il nécessite au minimum 512 Mi au démarrage et peut atteindre 4 Gi lors du traitement de documents volumineux avec de nombreuses pages.
Accès réseau¶
Docling est un service interne sans accès internet. Il traite les documents localement avec des modèles sur CPU. La NetworkPolicy restreint :
- Entrée : Seuls ai-service, ADEN et cockpit peuvent atteindre le port 5001
- Sortie : DNS uniquement (pas d'accès internet)
Dépannage¶
Pod Docling en CrashLoopBackOff (OOMKilled)¶
Symptômes : Le pod Docling entre en statut CrashLoopBackOff. kubectl describe pod affiche OOMKilled comme dernière raison de terminaison.
Cause : Docling charge plusieurs modèles ML au démarrage (analyse de mise en page, reconnaissance de structure de tableaux, OCR). Si la mémoire est insuffisante, le OOM-killer du noyau tue le processus.
Solution :
# Vérifier les limites mémoire actuelles
kubectl get pod -n akko -l app.kubernetes.io/name=akko-docling -o jsonpath='{.items[0].spec.containers[0].resources}'
# S'assurer que la limite mémoire est d'au moins 4Gi
helm upgrade akko helm/akko/ -n akko -f helm/examples/values-dev.yaml \
--set akko-docling.resources.limits.memory=4Gi
Traitement de documents lent¶
Symptômes : La conversion de documents prend plus de 30 secondes par page. L'utilisation CPU est à 100%.
Cause : Docling utilise l'OCR et l'analyse de mise en page sur CPU. Les documents complexes avec de nombreuses images, tableaux ou pages numérisées nécessitent plus de temps de traitement.
Solution :
# Vérifier l'allocation CPU
kubectl top pod -n akko -l app.kubernetes.io/name=akko-docling
# Augmenter les limites CPU pour un traitement plus rapide
helm upgrade akko helm/akko/ -n akko -f helm/examples/values-dev.yaml \
--set akko-docling.resources.limits.cpu=4
Le endpoint /health retourne 503¶
Symptômes : Le endpoint /health retourne 503 Service Unavailable. Le pod tourne mais n'est pas prêt.
Cause : Docling est encore en train de charger les modèles ML. La sonde de disponibilité n'a pas encore réussi.
Solution :