Aller au contenu
Offra

Blogue · Méthode

Pourquoi nous ne donnons pas simplement le devis à ChatGPT

Comment Offra tire de centaines de pages une liste d'exigences, chacune rattachée à sa phrase, et pourquoi une seule demande à une IA n'y suffit pas.

Par , fondateur ·

Au Québec, un appel d'offres public n'est pas un document. C'est un dossier : le devis, le bordereau de prix, les plans, les formulaires, puis les addendas qui arrivent pendant la période de soumission. Sur les avis publiés au SEAO depuis juin 2024, la moitié des dossiers font 123 pages ou plus, et un sur dix dépasse 500 pages. Quelque part là-dedans se trouvent les quelques phrases qui décident si votre soumission sera recevable : une garantie à joindre, une licence à détenir, une visite obligatoire, un formulaire à signer.

La matrice de conformité, c'est la liste de ces phrases. Chaque exigence du dossier sur sa propre ligne, avec le document et la clause d'où elle vient, et un lien qui ouvre le document sur la phrase citée. Offra la construit à partir des documents que vous déposez.

La question qu'on nous pose le plus souvent est légitime : pourquoi ne pas simplement donner le devis à ChatGPT, à Claude ou à un autre, et lui demander la liste ? Nous utilisons nous-mêmes des modèles de langage pour ce travail. Le problème n'est pas le modèle. C'est de tout lui demander en une seule fois.

La version courte

Imaginez qu'on vous remette un devis de 300 pages et qu'on vous demande, en une seule lecture, la liste de tout ce qu'il exige. Vous finiriez par écrire un résumé. Un bon résumé, peut-être, mais un résumé.

Imaginez maintenant une équipe. Le devis est coupé en paquets d'environ 17 pages, et chaque paquet déborde un peu sur le suivant, pour qu'aucune phrase ne tombe dans la coupure. Chaque personne lit son paquet et, pour chaque obligation qu'elle y trouve, remplit la même fiche : ce qu'il faut faire, si c'est obligatoire, à quel moment, et la phrase exacte du devis, recopiée mot pour mot. Un coordonnateur rassemble les fiches et retire les doublons. Un correcteur, enfin, reprend chaque phrase recopiée et la cherche dans le document original, pour vérifier qu'elle y est vraiment.

C'est ce que fait Offra, avec un modèle de langage à la place de chaque lecteur, et du code ordinaire à la place du coordonnateur et du correcteur.

  1. 01

    Lire

    Chaque page devient du texte. Chaque ligne garde sa place sur la page.

  2. 02

    Découper

    Des passages d'environ 17 pages, qui se chevauchent un peu.

  3. 03

    Extraire

    Chaque passage lu à part, sur la même fiche, la phrase exacte recopiée.

  4. 04

    Fusionner

    Les doublons retirés. Entre deux lectures, la plus stricte l'emporte.

  5. 05

    Vérifier

    Chaque citation retrouvée dans le document, ou signalée introuvable.

Résultat : la matrice de conformité (exemple)

  • Fournir une garantie de soumission de 10 %Devis · art. 7.2Correspondance exacte · p. 14
  • Assister à la visite obligatoire des lieuxAddenda 1 · art. 2Correspondance exacte · p. 1
  • Détenir une licence RBQ valideDevis · art. 3.1Correspondance approximative · p. 6
Les cinq étapes, dans l'ordre où elles s'exécutent. Les lignes du résultat sont un exemple, pas un appel d'offres réel.

Entre les deux façons de faire, la différence n'est pas une question d'intelligence. C'est une question de méthode : ce qui rend le résultat fiable, c'est le découpage, la même fiche pour tous, et la vérification à la fin. Aucun de ces trois éléments n'existe quand on pose une seule question à un robot conversationnel.

Pourquoi une seule demande ne suffit pas

Il résume au lieu d'énumérer

Donnez un long document à un modèle de langage et demandez-lui « toutes les exigences » : il fera ce que ferait une personne pressée. Il regroupera. Nous l'avons observé sur un devis de 86 pages lu d'un seul coup : la réponse tenait en une seule exigence, qui disait en substance de respecter le devis. C'était vrai, et inutilisable.

Illustration — exigences inventées

Le devis entier, en une seule demande

  • Respecter l'ensemble des exigences du devistout le devis

Vrai, et inutilisable : rien à joindre, à signer ni à payer n'y est nommé.

1 exigence

Passage par passage

  • Détenir une licence RBQ validepassage 1
  • Assister à la visite obligatoire des lieuxpassage 1
  • Joindre l'attestation de Revenu Québecpassage 2
  • Fournir une garantie de soumission de 10 %passage 3
  • Prouver une assurance responsabilité de 2 M$passage 4
  • Remettre un échéancier des travauxpassage 5
  • Remplir et signer le bordereau de prixpassage 6
  • Signer le formulaire de soumissionpassage 6

8 exigences

Illustration, sur des exigences inventées. Le cas qui l'inspire est réel : un devis de 86 pages, donné d'un seul coup au modèle, est revenu avec une seule exigence.

Il recolle et il arrondit

Quand on lui demande de citer ses sources, un modèle a tendance à coller deux passages ensemble avec des points de suspension, ou à reformuler légèrement. La phrase a l'air exacte et n'existe nulle part dans le document. Quant au numéro de page qu'il donne, il ne peut pas le connaître : ce qu'il a lu, c'est du texte, pas des pages.

La même question ne donne pas toujours la même réponse

Sur le même passage de devis, trois demandes identiques nous ont rendu 0, puis 1, puis 34 exigences. Le modèle était le même ; ce qui changeait, c'était le serveur qui répondait. Sans rien autour pour s'en apercevoir, deux de ces trois réponses auraient simplement fait disparaître un document de votre liste.

Les addendas déplacent les dates

Un addenda peut reporter la date de dépôt, mais il peut aussi l'avancer, ou l'annuler. La date la plus récente écrite dans le dossier n'est donc pas forcément celle qui s'applique, et un modèle qui lit tout d'un bloc n'a aucune raison de faire la différence.

Il ne dit pas ce qu'il n'a pas lu

C'est le point le plus grave. Un robot conversationnel répond toujours avec assurance, qu'il ait lu les 300 pages ou seulement les 40 premières, et rien dans sa réponse ne vous dit ce qui manque. Une matrice de conformité utile doit pouvoir dire : ce document-ci n'a pas pu être lu en entier, et cette citation-là, nous ne l'avons pas retrouvée.


Pour les lecteurs techniques

Ce qui suit décrit le système tel qu'il tourne aujourd'hui. Les modèles, eux, changent : nous les choisissons en les mesurant sur cette tâche précise, avec le même texte d'instructions et le même formulaire qu'en production, et nous en changeons quand un autre fait mieux. Les fournisseurs qui traitent vos documents sont nommés dans notre politique de confidentialité.

Lire : du texte qui garde sa place

Chaque PDF passe par la reconnaissance optique de caractères (OCR), même quand il contient déjà du texte. La raison est pratique : c'est l'OCR qui rend, pour chaque bloc, sa position sur la page, et c'est cette position qui permet plus tard d'encadrer la phrase exacte. Les documents Word et les classeurs Excel sont lus directement.

Avant qu'un modèle voie quoi que ce soit, le texte est nettoyé. Les en-têtes et pieds de page répétés sur au moins la moitié des pages sont retirés, les lignes de table des matières (« 4. Assurances .......... 12 ») sont écartées, et les titres du document sont remis en place comme titres. Une table des matières mal nettoyée, c'est une exigence en double, ou pire, une exigence dont la citation pointe vers la table des matières plutôt que vers la règle.

Découper : 17 pages, avec chevauchement

Un document de plus de 40 000 caractères, soit environ 17 pages, est coupé en passages de cette taille qui se recouvrent sur 3 000 caractères. Les coupures tombent sur une fin de paragraphe ou de ligne, et le recouvrement fait qu'une exigence à cheval sur deux passages est lue en entier au moins une fois.

Chaque passage reçoit en tête le nom du document et son plan, pour que les renvois de section restent cohérents d'un passage à l'autre ; le modèle a pour consigne de ne jamais extraire quoi que ce soit de ce bloc de contexte. Les classeurs suivent une autre règle. Ils sont lus d'un seul tenant tant qu'ils restent de taille raisonnable, pour qu'un bordereau demeure une seule exigence plutôt qu'une par feuille, et au-delà ils sont coupés par plages de lignes, en répétant la ligne d'en-tête.

Extraire : un formulaire, pas une conversation

Chaque passage est confié à un appel séparé au modèle, jusqu'à huit à la fois. Le modèle ne répond pas en texte libre : il est obligé d'appeler un outil, une seule fois, et de remplir un formulaire dont les champs sont fixés à l'avance. Pour chaque exigence, un énoncé court ; une catégorie (technique, administrative, financière ou juridique) ; obligatoire ou non ; le moment où elle s'applique (au dépôt, après l'adjudication ou pendant l'exécution) ; le livrable à joindre s'il y en a un ; l'action attendue du soumissionnaire ; si un manquement est éliminatoire ; et une citation textuelle de 200 caractères au plus. Le même formulaire recueille les dates et les clauses juridiques.

Trois consignes pèsent plus que les autres, et chacune répond à une erreur que nous avons vue :

  • Au niveau du livrable, jamais du champ. Un bordereau de prix est une exigence, pas une par ligne. Une garantie de soumission est une exigence, et ses conditions (durée de validité, montant, signature) se rangent à l'intérieur.
  • La citation est un seul morceau continu, recopié caractère pour caractère, sans « [...] ». Une citation raccommodée n'existe nulle part et ne peut pas être retrouvée.
  • Tout n'est pas décisif. Le modèle classe chaque exigence selon l'attention qu'elle mérite, et garde « décisif » pour ce qu'une entreprise pourrait réellement ne pas réussir à fournir : une garantie, une licence précise, un seuil d'assurance. Avant cette consigne, la garantie de soumission arrivait en quatrième position, derrière une lettre de présentation.

Le formulaire est validé dans notre code, pas chez le fournisseur du modèle. Ce n'est pas un détail : jusqu'au début de septembre 2026, une seule valeur manquante dans une seule exigence faisait rejeter l'appel entier, et un document complet disparaissait de la matrice. Aujourd'hui, une exigence mal formée est écartée et les autres sont gardées, et une réponse tronquée est récupérée jusqu'à son dernier élément complet. Quand le modèle ne dit pas si une exigence est obligatoire, elle est traitée comme obligatoire, parce qu'une exigence obligatoire affichée comme facultative peut coûter un contrat. Le résultat de chaque passage est enregistré dès qu'il arrive, si bien qu'une analyse interrompue reprend là où elle s'était arrêtée.

Quand le modèle échoue, et il échoue

Un passage qui ne rend rien n'est pas un passage réussi. C'est l'erreur la plus sournoise : un tour qui n'appelle aucun outil se termine proprement, et le document compte comme analysé sans avoir rien apporté. Chez nous, un passage n'est réussi que si une ligne a été enregistrée.

Sinon, une échelle de reprises s'enclenche : le modèle principal, puis un modèle de secours chez un autre fournisseur, puis, si le passage est trop lourd, sa division en deux moitiés analysées séparément. Chaque document finit avec un statut, lu en entier, lu en partie ou non lu, et ce statut vous est affiché.

Deux causes d'échec méritent d'être nommées, parce qu'elles n'apparaissent dans aucune démonstration :

  • Le raisonnement mange la réponse. Les modèles récents « réfléchissent » avant de répondre, et cette réflexion compte dans la même limite de longueur que la réponse. Sur une analyse instrumentée de bout en bout, 80 % des jetons générés étaient de la réflexion, et deux tours ont atteint la limite sans avoir écrit une seule exigence.
  • Le même nom ne désigne pas le même serveur. Un modèle ouvert est souvent proposé par des dizaines d'hébergeurs, derrière un intermédiaire qui choisit à chaque demande. Celui que nous mesurions l'était par 27, et neuf d'entre eux annonçaient respecter l'obligation d'appeler l'outil tout en l'ignorant. C'est l'origine des 0, 1 et 34 exigences plus haut. La solution est simple et peu glorieuse : restreindre la liste aux hébergeurs qui ont passé la mesure.

Fusionner : la lecture la plus stricte l'emporte

Les passages se chevauchent, et un même devis répète souvent la même obligation : dans les instructions aux soumissionnaires, dans les clauses administratives, dans le formulaire. Il y a donc des doublons, et il faut les retirer sans perdre d'information.

Le premier tri est fait par du code, document par document. Deux exigences sont jumelles quand leurs citations tombent au même endroit de la page, quand le texte de l'une contient celui de l'autre, ou quand elles partagent presque tous leurs mots. Quand deux jumelles ne disent pas la même chose, la plus stricte l'emporte : si l'une dit obligatoire, la fusion est obligatoire ; si l'une dit éliminatoire, la fusion l'est aussi.

Quatre lectures du même devis

  • Fournir une garantie de soumission de 10 %passage 2
    obligatoireéliminatoireà la soumission
  • Garantie de soumission : 10 % du prix totalpassage 3
    obligatoireéliminatoireà la soumission
  • Joindre la garantie de soumission (10 %)chevauchement 2-3
    obligatoireéliminatoireà la soumission
  • Cautionnement de soumission de 10 %passage 5
    obligatoireéliminatoireà la soumission

Une seule ligne

Fournir une garantie de soumission de 10 %

obligatoireéliminatoireà la soumission

Chaque drapeau porté par au moins une lecture est gardé.

Notes juridiques : deux chiffres différents, deux lignes

Garantie de soumission : 10 %Devis · art. 7.2
Garantie de soumission : 5 %Addenda 2 · art. 1

Un addenda qui change le pourcentage laisse les deux sous vos yeux. Aucun n'est effacé en silence.

Les doublons se reconnaissent d'abord à leur citation, quand deux passages se chevauchent sur la page, puis à leur texte. Une dernière passe regroupe ceux qui disent la même chose autrement, et elle ne peut que raccourcir la liste.

Vient ensuite une passe de consolidation sur l'ensemble du dossier, confiée à un modèle, pour regrouper ce que le code ne peut pas voir : « Fournir l'attestation d'assurance, voir l'annexe 3 » et l'annexe 3 elle-même. Cette passe a une propriété importante : elle peut seulement regrouper ou retirer, jamais ajouter, et ses propositions sont contrôlées avant d'être appliquées. Si elle échoue, rien n'est fusionné, et vous voyez simplement quelques doublons de plus.

Les notes juridiques suivent une règle plus dure encore. Aucune mesure de ressemblance ne fonctionne pour elles : sur nos exemples, deux notes qui disaient la même chose se ressemblaient moins que deux notes qui énonçaient des règles différentes. Sur un dossier de démonstration de cinq documents, l'extraction donnait 52 notes juridiques, dont la même garantie de soumission quatre fois, et l'ancienne méthode de fusion n'en retirait que trois. Elles ne fusionnent donc que si leurs titres portent les mêmes mots, et jamais quand ces titres citent des chiffres différents. Une garantie de 10 % et une garantie de 5 % restent deux lignes, parce que c'est précisément ce que produit un addenda qui change le pourcentage.

Vérifier : chaque citation est cherchée à nouveau

Le numéro de page que le modèle pourrait avancer est jeté : il n'a lu qu'un passage de texte, sans aucun repère de page. Chaque citation est plutôt cherchée à nouveau dans le document, par étapes, de la plus stricte à la plus souple :

  1. la phrase exacte, dans un bloc de l'OCR (ce qui donne l'encadré) ou sur une page ;
  2. chacun des morceaux d'une citation raccommodée, séparément ;
  3. les mots distinctifs de la citation, quand la formulation a légèrement changé ;
  4. la section que le modèle a citée ;
  5. sinon, rien.

Le résultat est affiché tel quel, avec les mots de l'application : « Correspondance exacte », « Correspondance approximative », « Passage introuvable dans le document ». Un échec n'est jamais présenté comme une réussite.

Ce que le modèle a rendu

« Le soumissionnaire doit joindre à sa soumission une garantie de soumission équivalant à 10 % du prix total soumis. »

Section citée : art. 7.2

Aucun numéro de page ne vient du modèle : il n'a vu qu'un passage de texte.

Devis — page 14

Le soumissionnaire doit joindre à sa soumission une garantie de soumission équivalant à 10 % du prix total soumis.

Trois issues possibles

  • Correspondance exacte — page 14

    La phrase est sur la page, mot pour mot. Elle y est encadrée.

  • Correspondance approximative — page 14. La formulation diffère légèrement du document.

    Les mots distinctifs y sont, pas la phrase exacte.

  • Passage introuvable dans le document.

    L'exigence reste dans la liste, marquée comme telle.

Ce contrôle prouve que la citation existe dans le document. Il ne prouve pas que l'exigence qu'on en a tirée est juste : c'est pour cela que chaque ligne ouvre la page, pour que vous le constatiez vous-même.

Il faut être précis sur ce que ce contrôle prouve. Il prouve que la citation existe dans le document. Il ne prouve pas que l'exigence qu'on en a tirée est bien comprise, et une exigence dont la citation reste introuvable n'est pas supprimée : elle reste dans la liste, marquée comme telle. C'est pour cela que chaque ligne de la matrice ouvre le document sur le passage retrouvé. La vérification finale vous appartient, et nous faisons en sorte qu'elle tienne en un clic.

Les addendas

Déposer un addenda relance l'analyse de tout le dossier, pas seulement du nouveau document. La date de dépôt en vigueur est établie explicitement, en tenant compte du fait qu'un addenda peut l'avancer ou l'annuler, et la date remplacée reste visible, barrée, plutôt que d'être effacée. L'avancement que vous aviez déjà noté sur chaque exigence est conservé d'une analyse à l'autre.

Une limite, dite franchement : quand un addenda modifie une exigence, la nouvelle version apparaît comme sa propre ligne, avec l'addenda comme source. Nous ne décidons pas à votre place laquelle remplace l'autre.

Ce que la matrice n'est pas

Elle n'est pas une certification. Elle vous dit ce que le dossier exige et où il le dit. Elle ne promet pas qu'une soumission qui coche toutes les lignes sera jugée conforme.

Elle ne publie pas de taux. Vous ne lirez pas ici un pourcentage d'exigences trouvées, parce que personne, nous compris, ne l'a mesuré sur des appels d'offres mis de côté pour ça. Un fournisseur qui vous en donne un devrait pouvoir vous dire sur quoi il l'a mesuré.

Elle ne touche pas au prix. Les documents que vous déposez ne déplacent pas la fourchette de prix du rapport. Ils vous disent ce que le dossier contient, pas ce que le marché va coûter.

Elle ne commence qu'avec vos documents. Au SEAO, le devis est vendu au soumissionnaire ; ce qu'Offra lit le jour de la publication, c'est l'avis. La page analyse des documents explique la différence.

Ce que la matrice fait, en revanche, elle le fait de façon vérifiable : chaque exigence porte sa phrase, chaque phrase porte sa page, et ce qui n'a pas pu être retrouvé est dit.

La suite

Offra note pour votre entreprise chaque appel d'offres public actuellement ouvert au Québec, et génère le rapport complet sur ceux qui comptent.