Un système d'IA assemble automatiquement vos questions avec les bonnes règles pour extraire des réponses précises et sourcées. Voici son fonctionnement.

UN SYSTÈME D'INTELLIGENCE ARTIFICIELLE QUI LIRA VOS DOCUMENTS À VOTRE PLACE

Dans une entreprise, les documents s'accumulent : contrats, factures, CV, rapports. Les interroger manuellement prend des heures. Une intelligence artificielle spécialisée peut le faire en quelques secondes. Mais comment ? Pas avec un simple chatbot qui invente des réponses, non : avec un système qui analyse chaque mot, chaque ligne, et extrait la réponse exacte avec les preuves qui vont avec. Ce système s'appelle Enterprise Document Intelligence.

Il fonctionne en quatre étapes comme une chaîne de montage : parsing (découpage des documents), question parsing (compréhension de la question), retrieval (Recherche des passages pertinents), et enfin génération (construction de la réponse). Cet article explique la dernière étape : comment l'IA assemble les réponses comme un puzzle parfait, en utilisant les bonnes règles pour chaque type de question.

Ce système ne se contente pas de répondre : il prouve chaque mot avec des citations exactes du document source.

LA RECETTE MAGIQUE : UNE BASE FIXE + DES FRAGMENTS QUI S'ADAPTENT

Pour éviter le piège du méga-prompt (un seul texte géant qui essaie de tout faire), les développeurs ont inventé une méthode plus maline : la dispatcher. Imaginez un chef cuisinier qui prépare un plat. Au lieu d'avoir une recette unique qui tente de cuisiner tous les plats possibles en même temps, il a une base fixe (la préparation de base) et ajoute des ingrédients spécifiques selon le plat demandé.

Dans notre cas, la base fixe s'appelle BASE. C'est une instruction stricte que l'IA doit suivre à la lettre : « Tu réponds uniquement avec les passages du document fourni. Chaque élément doit inclure au moins une citation avec les numéros de ligne exacts. Si le document ne contient pas la réponse, tu retournes un résultat vide avec une explication. »

Ensuite, selon le type de question posée, l'IA ajoute des fragments spécifiques. Par exemple :

  • Pour une question qui attend une liste : SHAPE_FRAGMENTS["list"] qui indique « Un élément par ligne, chaque élément doit avoir ses propres citations. »
  • Pour une question sur une somme d'argent : SHAPE_FRAGMENTS["amount"] qui impose le format Amount(value, currency, unit) avec la norme ISO 4217 pour la devise.
  • Pour une date : SHAPE_FRAGMENTS["date"] qui exige le format YYYY-MM-DD.

Cette méthode évite les erreurs et simplifie la maintenance. Ajouter un nouveau type de réponse ? On ajoute un fragment. Modifier une règle ? On modifie un seul fragment. Pas besoin de réécrire un texte géant à chaque fois.

LE FONCTIONNEMENT PAS À PAS : DE LA QUESTION À LA RÉPONSE

Tout commence avec un objet appelé ParsedQuestion. C'est le cœur du système. Il contient toutes les informations nécessaires pour construire la réponse :

class ParsedQuestion(BaseModel):
    original_question: str
    keywords: list[Keyword]
    expectedanswershape: Literal['text','amount','date','boolean','list','table']
    decomposed_subquestions: list[str] = []
    activations: ExecutionPlan = ExecutionPlan()
    parsing_notes: list[str] = []
    suggested_clarification: str | None = None
    retrieval: RetrievalQuery
    generation: GenerationBrief

Voici ce que signifient ces éléments :

  • original_question : la question posée par l'utilisateur, comme « Quel est le salaire annuel du candidat ? »
  • keywords : les mots-clés importants à rechercher dans le document, avec leur poids et leur source.
  • expectedanswershape : le type de réponse attendu (texte, montant, date, liste, tableau ou booléen).
  • keywords : les mots-clés à rechercher, avec leur importance et leur origine (directe, expansion par IA ou dictionnaire expert).
  • retrieval : la requête de recherche à envoyer au document pour trouver les passages pertinents.
  • generation : les contraintes de format pour la réponse finale (par exemple, « la devise doit être en euros »).

Le système utilise ensuite ces informations pour construire deux messages :

  1. Un message système : c'est la base BASE plus les fragments adaptés au type de réponse attendu.
  2. Un message utilisateur : c'est la question originale, les mots-clés utilisés pour la recherche, et les passages du document qui correspondent à la requête.

Par exemple, pour la question « Quel est le salaire annuel du candidat ? », le message système ressemblerait à :

BASE (base fixe)

Format des réponses :
- Utilisez amount = Amount(value, currency, unit) avec la norme ISO 4217 pour la devise.
- Exemple : amount = Amount(1850.5, "USD", "annual")

Et le message utilisateur contiendrait :

Question: Quel est le salaire annuel du candidat ?

Mots-clés utilisés pour la recherche: ['salaire', 'annuel', 'candidat']

Passages (séparés par des tabulations : NUMÉRODELIGNE	page	lignedanspage	texte):
212	5	10	Salaire annuel : 1850,50 $

L'IA reçoit ces deux messages et génère une réponse structurée comme :

{
  "answer_type": "amount",
  "items": [
    {
      "amount": {"value": 1850.5, "currency": "USD"},
      "spans": [{"linestart": 212, "lineend": 212}]
    }
  ],
  "answer_found": true
}

LES DIFFÉRENTES FORMES DE RÉPONSES : TEXTES, LISTES, TABLEAUX, DATES.

Le système doit s'adapter à tous les types de questions. Voici comment il gère chaque cas :

Textes libres : L'IA extrait simplement le passage correspondant avec les citations nécessaires. Par exemple, pour « Quel est le poste du candidat ? », elle renverrait :

{
  "answer_type": "text",
  "items": [
    {"text": "Ingénieur logiciel", "spans": [{"linestart": 45, "lineend": 45}]}
  ],
  "answer_found": true
}

Listes : Chaque élément de la liste est traité séparément avec ses propres citations. Par exemple, pour « Quels sont les projets du candidat ? », elle renverrait :

{
  "answer_type": "list",
  "items": [
    {"text": "Projet Alpha", "spans": [{"linestart": 89, "lineend": 89}]},
    {"text": "Projet Beta", "spans": [{"linestart": 123, "lineend": 123}]}
  ],
  "answer_found": true
}

Tableaux : La réponse est structurée sous forme de tableau avec en-têtes et lignes. Par exemple, pour « Quels sont les résultats financiers ? », elle renverrait :

{
  "answer_type": "table",
  "items": [
    {
      "table": {
        "headers": ["Année", "Chiffre d'affaires", "Bénéfice"],
        "rows": [
          ["2023", "1 200 000 €", "250 000 €"],
          ["2024", "1 500 000 €", "300 000 €"]
        ]
      },
      "spans": [{"linestart": 156, "lineend": 160}]
    }
  ],
  "answer_found": true
}

Montants : Le système vérifie que le format est correct (valeur, devise, unité) et utilise la norme ISO 4217 pour la devise. Par exemple, pour « Quel est le montant de la facture ? », elle renverrait :

{
  "answer_type": "amount",
  "items": [
    {
      "amount": {"value": 1250.75, "currency": "EUR", "unit": "facture"},
      "spans": [{"linestart": 78, "lineend": 78}]
    }
  ],
  "answer_found": true
}

Dates : Le système exige le format ISO 8601 (YYYY-MM-DD). Par exemple, pour « Quelle est la date de début du contrat ? », elle renverrait :

{
  "answer_type": "date",
  "items": [
    {"date": {"iso": "2024-01-15", "original": "15 janvier 2024"},
     "spans": [{"linestart": 23, "lineend": 23}]}
  ],
  "answer_found": true
}

LES CONTRAINTES SUPPLÉMENTAIRES : DEVISES, PÉRIODES, DISTINCTIONS.

Parfois, la question impose des contraintes supplémentaires. Par exemple :

  • Devise imposée : « Donne le montant en euros uniquement. » Le système ajoute alors la règle : « La devise DOIT être EUR. »
  • Période spécifique : « Donne le chiffre d'affaires pour l'année 2023 uniquement. » Le système ajoute : « La période DOIT être 2023. »
  • Distinctions : « Ne confonds pas 'apprenti' et 'stagiaire'. » Le système ajoute : « 'apprenti' n'est PAS 'stagiaire'. Retourne uniquement 'apprenti'. »
  • Désambiguïsation : « Par 'primes', entends-tu les primes annuelles ou les primes exceptionnelles ? » Le système ajoute : « Désambiguïsation : primes annuelles. »

Ces contraintes sont ajoutées dynamiquement au message système selon les besoins de la question.

LES PAGES CIBLÉES : COMMENT L'IA SAIT OÙ CHERCHER

Parfois, la question précise où chercher dans le document. Par exemple :

  • « Sur la page 5 » : Le système extrait uniquement les lignes de la page 5.
  • « Pages 3 à 7 » : Le système extrait les lignes des pages 3, 4, 5, 6 et 7.
  • « Sur la feuille 'Prix' » : (pour les fichiers Excel) Le système extrait uniquement les données de cette feuille.

Cette information est stockée dans StructuralHints :

class StructuralHints(BaseModel):
    pages_hint: list[int] | None = None  # Pour les PDF : liste des numéros de page

Le système filtre ensuite les passages du document pour ne garder que ceux des pages demandées. Même si aucun mot-clé ne correspond, ces pages sont conservées car l'utilisateur les a explicitement demandées.

L'utilisateur a le dernier mot : s'il demande une page précise, le système la lit même sans correspondance de mots-clés.

LA VÉRIFICATION DES CITATIONS : AUCUNE FAUSSE PREUVE

Un des dangers des IA génératives est l'hallucination : inventer des informations qui n'existent pas. Ce système l'évite grâce à un mécanisme de vérification des citations.

Chaque réponse contient des spans : des numéros de ligne qui pointent vers les passages exacts du document source. Le système vérifie que chaque citation existe bien dans le document. Si une citation est introuvable, elle est signalée comme erreur.

Par exemple, pour extraire le profil d'un candidat d'un CV, le système crée un objet CandidateProfile avec chaque champ (nom, email, téléphone, etc.) et ses citations :

class CandidateProfile(BaseModel):
    name: FieldExtraction[str]
    email: FieldExtraction[str]
    phone: FieldExtraction[str]
    linkedin_url: FieldExtraction[str]
    current_role: FieldExtraction[str]
    years_experience: FieldExtraction[int]
    # . et une vingtaine d'autres champs

Chaque champ contient :

  • value : la valeur extraite (ou null si non trouvée).
  • quote : le passage exact du document.
  • page, line_start, line_end : les numéros de page et de ligne.
  • found : vrai si la valeur a été trouvée.
  • caveat : une explication si la valeur est partielle ou incertaine.

Le système vérifie ensuite que chaque quote existe bien dans le document. Si ce n'est pas le cas, il retourne une liste d'erreurs avec les citations manquantes.

LES RÉSULTATS CONCRETS : CE QUE ÇA DONNE EN PRATIQUE

Prenons un exemple concret avec un document sur les encodages positionnels en apprentissage automatique. Voici ce que le système produit pour la question « Quels sont les types d'encodages positionnels mentionnés ? » :

{
  "extraction_method": "verbatim",
  "confidence": 1.0,
  "caveats": [],
  "answer_found": true,
  "completeanswerfound": true,
  "contextcompletenessweak": 1.0,
  "context_structured": true,
  "llmdiscoveredkeywords": ["positional encoding", "learned", "fixed", "sinusoidal", "sine and cosine", "positional embeddings"],
  "keywords_found": ["positional encoding", "learned", "fixed", "sinusoidal", "positional embeddings"],
  "conflicting_evidence": false,
  "suggested_clarification": null,
  "items": [
    {
      "text": "Learned positional encodings",
      "spans": [
        {"linestart": 165, "lineend": 165, "quote": "There are many choices of positional encodings, learned and fixed [9]."},
        {"linestart": 273, "lineend": 273, "quote": "We also experimented with using learned positional embeddings instead,"}
      ]
    },
    {
      "text": "Fixed (sinusoidal) positional encodings",
      "spans": [
        {"linestart": 200, "lineend": 200, "quote": "There are many choices of positional encodings, learned and fixed [9]."},
        {"linestart": 165, "lineend": 165, "quote": "In this work, we use sine and cosine functions of different frequencies."}
      ]
    }
  ]
}

Le système a trouvé deux types d'encodages positionnels, avec les numéros de ligne exacts où ils apparaissent dans le document. Chaque réponse est accompagnée de sa preuve.

Autre exemple avec une facture :

{
  "question": "Quel était le montant de la prime l'année dernière ?",
  "answer_json": {
    "answer_type": "amount",
    "items": [
      {
        "amount": {"value": 1850.5, "currency": "USD"},
        "spans": [{"linestart": 212, "lineend": 212, "quote": "Annual premium: $1,850.50"}]
      }
    ],
    "answer_found": true
  },
  "tags": ["amount", "premium", "usd"]
}

Le système a extrait le montant exact avec la devise et la citation exacte du document.

LES PERFORMANCES : RAPIDITÉ ET PRÉCISION

Ce système est conçu pour être efficace. Voici quelques chiffres concrets :

  • Pour une question simple sur un document de 10 pages, le système génère une réponse en moins de 2 secondes.
  • Le coût en tokens (les unités de texte que l'IA traite) est optimisé : seulement 2 347 tokens en entrée pour une réponse complète.
  • La précision est élevée : l'IA trouve la bonne réponse dans 90 % des cas, et dans 100 % des cas elle fournit les preuves nécessaires.
  • Le système gère les documents longs (1 000 pages) aussi bien que les documents courts (1 page), grâce à la stratégie de chunking adaptative.
Avec ce système, une IA lit un document de 1 000 pages aussi facilement qu'un document de 1 page : même code, même chaîne d'audit, même contrat.

POURQUOI CE SYSTÈME EST-IL RÉVOLUTIONNAIRE ?

Avant, les systèmes d'IA pour les documents avaient plusieurs problèmes :

  • Mégaprompts : des textes géants qui tentaient de tout gérer, devenant ingérables avec le temps.
  • Hallucinations : l'IA inventait des réponses sans preuve.
  • Manque de structure : les réponses n'étaient pas standardisées, rendant l'automatisation difficile.
  • Difficulté à maintenir : ajouter un nouveau type de réponse nécessitait de tout réécrire.

Ce nouveau système résout tous ces problèmes :

  • Une base fixe claire et simple.
  • Des fragments modulaires qui s'ajoutent ou se retirent selon les besoins.
  • Des réponses structurées et vérifiables, avec citations à l'appui.
  • Une maintenance simplifiée : ajouter un nouveau type de réponse ? Un fragment de plus. Modifier une règle ? Un seul fichier à changer.

C'est comme passer d'un robot maladroit qui casse tout à un robot chirurgien qui opère avec précision.

COMMENT L'UTILISER DANS VOTRE ENTREPRISE ?

Ce système est conçu pour être intégré dans des applications d'entreprise. Voici comment l'utiliser :

  1. Installation : Intégrez le package doc-intel dans votre environnement Python. Les notebooks d'accompagnement sont disponibles sur GitHub.
  2. Préparation des documents : Chargez vos documents (PDF, Excel, Word) dans le système. Le système les découpera en passages gérables.
  3. Question parsing : Utilisez le système de parsing de questions pour transformer les questions en ParsedQuestion.
  4. Génération : Utilisez le dispatcher pour générer les réponses selon les règles définies.
  5. Validation : Vérifiez les citations et la structure des réponses (c'est l'étape suivante, expliquée dans l'article 8C).

Le système est conçu pour être modulaire : vous pouvez utiliser uniquement la partie génération, ou l'intégrer dans un pipeline complet avec parsing, retrieval et validation.

LES LIMITES ET LES DÉFIS À VENIR

Ce système n'est pas parfait et a quelques limites :

  • Complexité initiale : Mettre en place ce système demande des compétences en développement et en IA.
  • Coût : Bien que optimisé, l'utilisation d'une IA comme GPT-4 a un coût, surtout pour des milliers de documents.
  • Langues : Le système est actuellement optimisé pour l'anglais. L'adaptation à d'autres langues nécessitera des ajustements.
  • Formats : Le système gère bien les PDF et les documents texte, mais les formats complexes (PDF avec tableaux imbriqués, images scannées) peuvent poser problème.

Les développeurs travaillent sur :

  • L'amélioration de la prise en charge des langues autres que l'anglais.
  • L'optimisation pour les documents avec des tableaux complexes.
  • La réduction des coûts grâce à des modèles plus légers.

LE FUTUR : VERS UNE INTELLIGENCE ARTIFICIELLE DOCUMENTAIRE AUTONOME

Ce système est une avancée majeure, mais ce n'est qu'un début. À l'avenir, on peut imaginer :

  • Des systèmes capables de raisonner sur plusieurs documents à la fois, en croisant les informations.
  • Des interfaces plus intuitives pour poser des questions complexes sans connaître le langage technique.
  • Une intégration directe dans les outils de productivité (Google Docs, Microsoft 365) pour une utilisation quotidienne.
  • Des systèmes capables de mettre à jour automatiquement les réponses quand les documents sont modifiés.

Avec ce système, l'intelligence artificielle documentaire devient enfin fiable, précise et utilisable en entreprise. Plus besoin de passer des heures à chercher dans des documents : l'IA le fait pour vous, avec des preuves à l'appui.

EN RÉSUMÉ : CE QU'IL FAUT RETENIR

Voici les points clés à retenir :

  • Le système utilise une base fixe (BASE) plus des fragments adaptés au type de question.
  • Il gère tous les types de réponses : texte, liste, tableau, montant, date, booléen.
  • Chaque réponse est accompagnée de citations exactes du document source.
  • Le système vérifie que chaque citation existe bien dans le document pour éviter les hallucinations.
  • Il est modulaire et facile à maintenir : ajouter un nouveau type de réponse ? Un fragment de plus.
  • Il fonctionne aussi bien sur des documents de 1 page que de 1 000 pages.
  • Il est conçu pour être intégré dans des applications d'entreprise.
Ce n'est plus une IA qui répond à vos questions : c'est une IA qui lit vos documents pour vous et vous donne les réponses exactes, avec les preuves.

ET DEMAIN ?

Ce système marque une étape importante dans l'automatisation de la lecture et de l'analyse de documents. À l'avenir, il pourrait devenir un standard dans les entreprises, permettant de gagner un temps précieux et d'éviter les erreurs de compréhension.

Pour les développeurs, c'est une base solide pour construire des applications encore plus puissantes. Pour les entreprises, c'est l'opportunité de transformer des montagnes de documents en informations exploitables en quelques secondes.

Le futur de l'intelligence artificielle documentaire est déjà là. Il suffit de savoir où chercher.

Sources :
  • Towards Data Science

L'indépendance de CLODCO est votre garantie.

Pour que l'actualité de l'IA reste sans filtre et sans concession, votre soutien est indispensable. Votre contribution est le seul moteur de notre liberté éditoriale.

Soutenir CLODCO