Génération augmentée par la recherche pour le droit comptable français : construction d'un corpus daté, d'un harness à outils et d'un banc de mesure
Résumé. Nous étudions à quelles conditions un grand modèle de langage (LLM) produit une réponse fiable en droit comptable français — juste et vérifiable. Nous construisons un corpus de 113 105 textes réglementaires datés, un agent muni de huit outils (le harness) et un banc de 567 questions à citations vérifiées, complété de 763 questions d'annales et de 214 questions sur pièces comptables. Quarante-neuf modifications du dispositif sont mesurées contre un critère fixé avant la mesure ; sept sont retenues. Treize modèles sont ensuite comparés sur un dispositif constant, puis deux d'entre eux sous quatre montages. La note varie de 6,4 à 18,3 sur vingt selon le modèle ; elle croît avec le tarif au token, pas avec le coût mesuré par question. Avec le harness, 98 à 100 % des citations se retrouvent dans le corpus quel que soit le modèle, contre 57 à 75 % sans lui (66 à 78 % une fois relues une à une les citations non rattachées), pour une note égale à celle d'une recherche web.
1Introduction
Les grands modèles de langage (large language models, LLM) répondent aux questions de comptabilité, de fiscalité et d'audit avec une aisance qui ne renseigne pas sur la confiance qu'on peut leur accorder. Dans ce domaine, une réponse dépend d'un texte, d'une version de ce texte et d'une date ; une réponse plausible mais mal fondée est un risque professionnel. La question que nous posons est la suivante : comment s'assurer qu'un LLM donne une réponse fiable en droit comptable français, et à quel coût ?
Nous définissons une réponse fiable par deux propriétés mesurables. Elle est juste lorsqu'elle établit les éléments qu'un barème rédigé avant toute réponse attend. Elle est vérifiable lorsque chaque texte qu'elle cite existe, dans la version en vigueur à la date des faits, et peut être ouvert par un lecteur. L'abstention, quand le texte ne permet pas de répondre, est une troisième propriété attendue ; elle n'est pas mesurée ici (§ 6).
Nous posons deux hypothèses, une par décision : ce qu'on construit autour du modèle, et le modèle qu'on choisit.
- H1 — « Le harness rend vérifiable sans coûter de justesse ». Un harness appuyé sur un corpus comptable daté rend les citations du modèle vérifiables, sans perdre de justesse face à une recherche web.
- H2 — « Plus c'est cher, mieux c'est ». La justesse varie selon le modèle, et les modèles les plus chers répondent le plus juste.
Ces deux hypothèses sont formulées après les mesures qui les tranchent (§ 4.3, § 4.4) : leur lecture est exploratoire. Seuls les leviers de § 4.2 sont jugés contre un critère fixé avant la mesure (§ 3.2) ; ils répondent à une autre question, ce qui fait la qualité de la recherche.
Les contributions sont : un corpus daté et structuré du droit comptable, fiscal et d'audit français (§ 2.1) ; un agent à outils dont la sortie impose des citations résolubles (§ 2.2) ; un banc de mesure à trois sources de questions et une chaîne de correction calibrée (§ 2.3, § 3.4) ; et les mesures de la section 4.
2Matériel
2.1Le corpus
Le corpus rassemble 113 105 textes réglementaires, découpés à l'article et datés, issus de sept familles de sources publiques (tableau 1). Chaque article existe en autant d'enregistrements qu'il a eu de périodes de vigueur ; une date de référence fixe la version interrogée. Les enregistrements portent une nature parmi quatre : comptable, fiscale, audit, IFRS.
| Famille | Source | Nature | Enregistrements |
|---|---|---|---|
| Plan comptable général, règlements et commentaires ANC | anc.gouv.fr | comptable | 1 660 |
| Règlement ANC 2020-01, comptes consolidés | anc.gouv.fr | comptable | 298 |
| Doctrine fiscale, toutes versions depuis 2020 | BOFiP | fiscale | 56 590 |
| Normes d'exercice professionnel | JORF, DILA | audit | 2 185 |
| Code de commerce, CGI et annexes, LPF, textes de 1945 et 2012 | LEGI, DILA | comptable, fiscale, audit | 46 864 |
| IFRS adoptées par l'Union européenne | EUR-Lex | ifrs | 5 508 |
Construction de l'index. Le texte de chaque enregistrement est normalisé (minuscules, accents, élisions, racinisation française) puis découpé en segments de 220 mots avec un recouvrement de 40 mots ; l'index livré compte 186 478 segments, mémoires comprises — les énoncés d'examen passés et, depuis le 11 septembre 2026, les 134 segments de la mémoire des pièces (§ 4.2.1). Deux structures sont construites sur ces segments : une table de recherche plein texte (FTS5, notation BM25), une par nature, pour la recherche lexicale ; et une table de vecteurs (sqlite-vec) où chaque segment est représenté par son embedding, calculé par le modèle multilingue intfloat/multilingual-e5-small, pour la recherche dense par similarité cosinus. L'index enregistre le modèle d'embedding, sa dimension, la taille et le recouvrement des segments, de sorte qu'une recherche refuse un encodeur qui ne serait pas celui de la construction.
Traitement d'une requête (figure 1). Six étapes, dans cet ordre : (1) un routeur de référence — si la question nomme un article du PCG par son numéro, cet article est épinglé en tête ; (2) la réécriture — un LLM ajoute à la question les termes réglementaires qu'elle implique, sans la remplacer (mode extend, § 4.2.2) ; (3) deux canaux — la recherche lexicale BM25 sur les segments normalisés et la recherche dense sur les vecteurs, chacune renvoyant ses 50 meilleurs segments ; (4) la fusion des deux listes par rang réciproque (reciprocal rank fusion), puis l'agrégation des segments vers leurs enregistrements en retenant le meilleur score ; (5) la séparation des natures — lorsque la nature de la question est déclarée, le canal dense est filtré sur ses enregistrements et le canal lexical interroge la table de cette nature (§ 4.2.1) ; (6) le reranking — les meilleurs candidats sont relus par un cross-encoder, BAAI/bge-reranker-v2-m3, qui lit la question et le candidat conjointement et produit l'ordre final. Le profil de service reclasse 25 candidats ; le profil de mesure du retrieval en reclasse 50.
Dates. Chaque enregistrement porte une fenêtre de vigueur. Une date de référence — celle de la session, ou celle lue dans la question (§ 4.2.2) — restreint la recherche aux versions en vigueur ce jour-là, et l'outil in_force_on renvoie, pour un identifiant et une date, la version applicable.
2.2Le harness
Nous appelons harness le dispositif construit autour du modèle (figure 2). Il comprend : huit outils que le modèle appelle lui-même (tool calling) — search (requête, nature, date → dix enregistrements classés, avec identifiant, titre, extrait et score), browse (un chemin ou une nature → la table des matières, sur un à trois niveaux), fetch (un identifiant → le texte de l'enregistrement, de sa section ou de son unité de rattachement), resolve (une citation en texte libre → l'identifiant de l'enregistrement, ou une liste de candidats si la citation est ambiguë), refs (un identifiant → les textes qu'il cite ou qui le citent), in_force_on (un identifiant, une date → la version en vigueur), session et set_date (lire et changer la date de référence) ; chaque outil répond par un statut typé (ok, not_found, ambiguous, invalid avec le paramètre fautif et les valeurs acceptées), de sorte qu'un appel mal formé soit lisible par le modèle et corrigeable au tour suivant ; un fichier de contexte de 52 192 caractères transmis dans le premier message, composé d'une carte du domaine (tournures courantes mises en correspondance avec le vocabulaire réglementaire, 81 % du fichier), d'une procédure de décision, d'une règle de date et d'un format de réponse ; une boucle qui autorise six tool calls, après quoi le modèle est sommé de conclure avec ce qu'il a lu ; et un format de sortie imposé — reponse, citations (identifiants d'enregistrements), abstention, manque.
2.3Le banc de questions
Trois sources de questions servent trois usages distincts (tableau 2).
Chaque ligne s'ouvre : liste des questions du split, filtrable.
| Split | Questions | Origine | Statut |
|---|---|---|---|
| dev | 426 | questions de praticien, écrites à la main | libre |
| test | 29 | idem | gelé |
| validation | 28 | idem | gelé |
| abstention | 30 | sans réponse dans le corpus | génération seulement |
| dec2026_e1 | 20 | DEC, épreuve 1, mai 2026 | gelé |
| dscg2025_conso | 12 | DSCG UE4, dossier 1, consolidation, 2025 | gelé |
| dscg2025_ifrs | 5 | DSCG UE4, dossier 2, IFRS, 2025 | gelé |
| dscg2025_fusion | 7 | DSCG UE4, dossier 3, fusion, 2025 | gelé |
| dscg2025_audit | 10 | DSCG UE4, dossier 4, audit, 2025 | gelé |
| exam_train | 679 | annales DEC, DSCG, DCG 2019–2026 | matériel |
| exam_test | 84 | annales DEC, DSCG, DCG 2019–2026 | sélection |
| terrain_dev | 116 | 20 pièces comptables | libre |
| terrain | 98 | 15 pièces comptables | gelé |
Questions de praticien. 567 questions écrites par lots. Pour chaque question, le texte de référence est choisi en lisant l'enregistrement dans la base, jamais en interrogeant le moteur, afin que le banc ne doive pas ses réponses au système mesuré ; chaque lot est gelé avec un extrait du texte cité. Trois catégories : référence directe (la question nomme l'article ; 93 dans dev), règle (vocabulaire professionnel sans numéro ; 210), vocabulaire courant (formulation d'un non-spécialiste ; 123). Répartition de dev par nature : comptable 175, fiscale 119, audit 78, IFRS 54 ; 48 questions nomment une date.
Annales. 763 questions extraites des sujets du DEC (épreuve 1, 2019–2026), du DSCG (UE1, UE4, 2021–2025) et du DCG (UE4, UE9, UE10, 2020–2026), reliées au texte qu'elles visent avec un degré de confiance (sûr 528, probable 203, douteux 32). Les 32 rattachements douteux ont été relus contre les corrigés officiels : 10 confirmés, 8 sur lesquels le corrigé est muet, 8 confirmés hors corpus, 6 corrigés. Le découpage par session sépare le matériel (sessions anciennes) de la sélection (dernière session de chaque épreuve).
Pièces. Vingt pièces comptables (factures, bail avec dépôt de garantie, note de frais, abonnement, véhicule, prime d'assurance à cheval sur deux exercices, avoir) et, pour chaque décision nécessaire à leur comptabilisation, une question accompagnée de la pièce.
Barèmes. Pour 102 questions de dev, deux ou trois critères ont été rédigés et gelés le 27 août 2026, avant qu'aucun modèle ne réponde. Les mesures de génération (§ 4.2.4, § 4.3, § 4.4) portent sur les 50 premières de ces 102 questions dans l'ordre du fichier (référence directe 7, règle 23, vocabulaire courant 20).
3Méthode
3.1Métriques
- recall@10 — part des questions dont au moins un texte attendu figure parmi les dix premiers résultats. Pour un agent, le classement est reconstitué à partir des textes cités puis des textes ouverts.
- Note — part des critères du barème acquis par la réponse, présentée sur vingt.
- Vérifiabilité — part des références citées par la réponse que le résolveur du corpus retrouve : un identifiant d'enregistrement est ouvert par fetch, une référence en texte libre (« art. 214-1 du PCG ») est passée à resolve. Une référence ambiguë, introuvable, ou hors corpus (Code civil, Code du travail) compte comme non résolue, de même qu'un numéro de compte (« compte 691 ») : il désigne un compte, pas le texte qui fonde la réponse.
- Texte attendu cité — part des réponses dont au moins une citation, une fois résolue, est l'un des textes attendus de la question, quelle que soit sa date de version ou la façon dont elle est écrite. Définie après les campagnes, elle décrit et ne sert à adopter aucun levier.
- Abstention — critère du barème sur les questions qui l'exigent, jugé sur le texte de la réponse et non sur le champ abstention de l'objet de sortie, que les modèles emploient aussi pour une réponse donnée sous réserve.
- Coût — tokens consommés, tarif catalogue du provider au 10 septembre 2026 converti au taux BCE du jour (1 USD = 0,86088 EUR), et, lorsqu'il est disponible, montant facturé.
3.2Critère d'adoption
Deux bras sont comparés par bootstrap apparié sur les questions. Pour chaque question, on note l'écart de score entre les deux bras. On tire 10 000 fois, avec remise (seed 42), autant de questions que le banc en compte, et l'on calcule l'écart moyen du tirage. La probabilité d'amélioration (p) est la part des tirages où cet écart moyen est positif ; l'intervalle à 95 % est donné par les 2,5e et 97,5e centiles de ces tirages. Une modification est adoptée si p atteint 0,95 et si aucune nature ni aucune catégorie ne recule de plus de 0,05. Le critère est fixé avant la mesure ; une métrique n'est jamais substituée à une autre après coup.
3.3Protocole
Une seule variable change entre deux bras. Les splits gelés ne servent jamais à choisir. Un modèle réécrivant une question, générant un document ou corrigeant une copie ne voit ni la citation attendue, ni le corpus, ni les résultats de recherche. Chaque contrôle d'intégrité a été vu échouer au moins une fois avant d'être utilisé. Les campagnes enregistrent la date de référence, la somme de contrôle du corpus et de la configuration, et, pour chaque appel, le provider qui l'a servi.
3.4Notation des réponses rédigées
Le juge reçoit la question, le barème et la copie — jamais la citation attendue ni le nom du modèle — et décide pour chaque critère s'il est acquis, avec une justification. La chaîne de calibration est la suivante : trente copies notées à la main ; un juge automatique (LLM-as-judge) (modèle appelé par API) calibré sur ces trente notes, accord kappa 0,985 ; un second juge, moins coûteux, calibré sur le premier sur 102 copies identiques, kappa 0,970, accord exact 0,951, biais −0,010. Les copies sont anonymisées, mélangées et réparties en lots avant correction ; le fichier qui relie une copie à son bras n'est lu qu'après.
3.5Exécution
Les treize modèles de § 4.3 sont appelés par un provider d'accès unique, un même point d'entrée et une même clé, seul l'identifiant du modèle changeant. Les réglages de boucle sont ceux du service : six tool calls avant réponse forcée, 2 000 caractères par résultat d'outil, 4 000 tokens de sortie par tour.
Note. Les mesures de retrieval (§ 4.1, § 4.2.1 à § 4.2.3) utilisent la chaîne complète, reranker compris ; les mesures d'agent (§ 4.2.4, § 4.3, § 4.4) utilisent la configuration servie, sans reranker (§ 4.2.3). Le recall@10 d'un bras d'agent est reconstitué à partir des textes cités puis ouverts et ne se compare pas à celui de § 4.1.
4Résultats
Chaque expérience est présentée avec son cadre : la variable, ce qui est fixé, le split et son effectif, la métrique, le résultat et sa lecture contre le critère de § 3.2.
4.1Référence du retrieval
Cadre. Dispositif livré, split dev (n = 426), recall@10.
| Sous-ensemble | n | recall@10 |
|---|---|---|
| ensemble | 426 | 0,869 |
| nature comptable / fiscale / audit / ifrs | 175 / 119 / 78 / 54 | 0,874 / 0,815 / 0,925 / 0,889 |
| catégorie référence directe / règle / vocabulaire courant | 93 / 210 / 123 | 0,968 / 0,929 / 0,692 |
| questions datées | 48 | 0,917 |
Lecture. La catégorie vocabulaire courant est de 24 à 28 points sous les deux autres : la difficulté du retrieval sur ce domaine est la traduction d'une formulation courante vers le vocabulaire réglementaire.
4.2Leviers
Un levier est une modification d'un composant du dispositif, mesurée seule, tout le reste étant fixé, contre la configuration de sa campagne. Quarante-neuf leviers ont été mesurés ; ils agissent sur quatre choses — le corpus et son index, la question posée au moteur, le classement des candidats, l'agent et son contexte — et sont présentés ci-dessous par thème, les adoptés en tête de chaque tableau. Une ligne se survole ou se clique : elle dit ce qu'est le levier, où il a été mesuré et pourquoi il est retenu ou non. Les leviers rejetés restent exposés dans le code à leur valeur neutre, de sorte que le rejet puisse être re-mesuré.
4.2.1Le corpus et son index
Ce thème regroupe ce qui est indexé et comment : le découpage des textes en segments, le modèle d'embedding, les paramètres de la recherche lexicale, la séparation des quatre natures, et ce que l'index se souvient — les énoncés d'examen passés et les décisions prises sur d'autres pièces, indexés comme segments supplémentaires des textes qu'ils visent. Deux choses portent : chercher dans la nature déclarée plutôt que dans l'index entier, et se souvenir des cas réels. Ni la taille des segments, ni l'encodeur, ni des cas fictifs générés par un modèle ne déplacent le recall.
| Levier | Agit sur | avant → après | delta | p |
|---|---|---|---|---|
| séparation des natures, dense + lexical adopté | index | 0,841 → 0,881 | +0,040 | 0,983 |
| séparation des natures, dense seule (composant) composant | index | 0,795 → 0,841 | — | — |
| mémoire des énoncés d'examen passés adopté | index | 0,228 → 0,299 | +0,071 | 0,989 |
| mémoire des pièces comptables adopté | index | 0,266 → 0,432 | +0,167 | 0,9999 |
| situations générées par un modèle, indexées par enregistrement | index | — | 0,000 | — |
| fusion de la nature IFRS dans la nature comptable | index | 0,878 → 0,878 | 0,000 | 0,347 |
| modèle d'embedding bge-m3 | index | 0,761 → 0,775 | +0,014 | 0,889 |
| modèle d'embedding multilingual-e5-large | index | 0,761 → 0,745 | −0,017 | 0,097 |
| segments de 120 mots | index | 0,761 → 0,761 | 0,000 | 0,000 |
| segments de 400 mots | index | 0,761 → 0,766 | +0,006 | 0,639 |
| un segment par enregistrement | index | 0,761 → 0,761 | 0,000 | 0,350 |
| seuil de fréquence documentaire (df_max) | index | 0,672 → 0,664 | −0,008 | 0,264 |
| largeur des candidats avant fusion (pool) | index | 0,672 → 0,639 | −0,033 | 0,094 |
| déduplication des termes de la requête lexicale | index | 0,672 → 0,689 | +0,016 | 0,632 |
| pondération hiérarchique des chemins (path_weight) | index | — | — | — |
| pénalité des commentaires ANC (commentary_boost) | index | — | — | — |
| dictionnaire de synonymes issu des échecs | index | — | — | — |
4.2.2La question posée au moteur
Ce thème regroupe ce qui est fait de la question avant la recherche : la réécrire dans le vocabulaire réglementaire, en lire la date, la découper quand c'est un énoncé long, deviner sa nature, épingler un texte qu'elle cite, et les constantes de la fusion des deux canaux. Trois leviers portent, et ce sont les plus grands de toute l'étude : dire au moteur les mots que le droit emploie, lui dire quel jour on est, et découper un énoncé d'examen. Deviner la nature à la place de l'appelant ne porte pas.
| Levier | Agit sur | avant → après | delta | p |
|---|---|---|---|---|
| réécriture de la question dans le vocabulaire réglementaire (mode extend) adopté | requête | 0,672 → 0,852 | +0,180 | 0,9996 |
| date lue dans la question, texte en vigueur ce jour-là adopté | requête | 0,761 → 0,860 | +0,099 | 1,000 |
| décomposition d'un énoncé d'examen en sous-questions adopté | requête | 0,382 → 0,462 | +0,080 | 0,980 |
| réécriture de la question, mode replace | requête | 0,672 → 0,803 | +0,131 | 0,984 |
| routage de nature par lexique de marqueurs (R2) | requête | 0,774 → 0,855 | +0,081 | 0,999 |
| routage de nature par le modèle (R3) | requête | 0,774 → 0,785 | +0,011 | 0,629 |
| deux natures entrelacées (R4) | requête | 0,774 → 0,774 | 0,000 | 0,458 |
| deux natures fusionnées par score du reranker (R5) | requête | 0,774 → 0,769 | −0,005 | 0,383 |
| poids de la question contre sa réécriture | requête | 0,866 → 0,898 | +0,032 | 0,881 |
| poids de consensus dans la fusion | requête | 0,866 → 0,871 | +0,005 | 0,636 |
| constante de rang de la fusion (rrf_k) | requête | 0,866 → 0,871 | +0,005 | 0,636 |
| épinglage d'une référence NEP explicite | requête | — | +0,004 | 0,638 |
| épinglage d'un article de code cité avec son code | requête | — | 0,000 | 0,000 |
| décomposition d'énoncé sauf pour la nature fiscale | requête | — | −0,002 | 0,467 |
4.2.3Le classement
Après la fusion des deux canaux, un second modèle — un cross-encoder — relit la question et chaque candidat ensemble et réordonne les cinquante premiers. C'est le seul levier de ce thème qui porte ; sa largeur, la longueur du texte qu'il lit et deux rerankers alternatifs ne changent rien. Le cross-encoder adopté n'est pas disponible chez le provider qui fournit l'infrastructure de production (plateforme sans serveur, sans GPU) : l'agent servi cherche sans lui, sur l'ordre de la fusion, et les mesures d'agent de § 4.2.4 à § 4.4 sont faites dans cette configuration.
| Levier | Agit sur | avant → après | delta | p |
|---|---|---|---|---|
| reranker cross-encoder adopté | classement | 0,672 → 0,738 | +0,066 | 0,952 |
| largeur de reranking 50 | classement | 0,860 → 0,830 | −0,030 | 0,059 |
| largeur de reranking 100, première mesure | classement | 0,738 → 0,705 | −0,033 | 0,098 |
| largeur de reranking 100, seconde mesure | classement | 0,860 → 0,824 | −0,036 | 0,034 |
| texte lu par le reranker : 2 000 caractères | classement | 0,860 → 0,857 | −0,003 | 0,383 |
| texte lu par le reranker : 4 000 caractères | classement | 0,860 → 0,843 | −0,017 | 0,195 |
| reranker crossencoder-camembert-large-mmarcoFR | classement | 0,860 → 0,879 | +0,019 | 0,810 |
| reranker Qwen3-Reranker-0.6B | classement | 0,860 → 0,860 | 0,000 | 0,463 |
4.2.4L'agent et son contexte
L'agent reçoit, en plus de la question, un fichier de contexte : le plan comptable résumé, une carte du domaine de 208 entrées (une formulation courante → le terme réglementaire), les conventions de citation. On a essayé de le réduire, d'en servir un extrait choisi pour chaque question, de l'ouvrir sur les pièces et la fiscalité, et d'allonger le budget d'appels d'outils. La métrique est ici la note sur vingt (juge de § 3.4), sauf les deux lignes sur les pièces mesurées en recall@10. Ni sa taille, ni un extrait choisi par question, ni son ordre ne changent la note ; un extrait nuit. Les quatre variantes du fichier sont lisibles ci-dessous.
| Levier | Agit sur | avant → après | delta | p |
|---|---|---|---|---|
| fichier de contexte sans la carte du domaine non démontré | agent | 17,3 → 16,7 | −0,027 | 0,304 |
| fichier de contexte réduit aux titres de la carte non démontré | agent | 17,3 → 16,9 | −0,017 | 0,284 |
| fichier de contexte minimal non démontré | agent | 17,3 → 16,5 | −0,037 | 0,170 |
| fichier complet contre minimal, réplication sur 102 questions non démontré | agent | 17,9 → 17,5 | −0,022 | 0,22 |
| carte du domaine servie à la demande, sélection lexicale | agent | 17,5 → 16,5 | −0,047 | 0,022 |
| carte du domaine servie à la demande, sélection par le modèle | agent | 17,5 → 16,4 | −0,055 | 0,040 |
| budget d'appels d'outils 6 → 10 | agent | 17,3 → 17,8 | +0,027 | 0,779 |
| contexte « pièces et fiscalité d'abord » sur les décisions de pièces | agent | 12,7 → 11,8 | −0,049 | 0,043 |
| agent avec fichier de contexte sur les pièces, carte initiale | agent | — | +0,146 | 0,998 |
| agent avec fichier de contexte sur les pièces, carte rééquilibrée | agent | — | +0,115 | 0,977 |
Les quatre fichiers de contexte comparés. Cliquer une variante : sa taille, ses sections, et son texte intégral.
4.3Comparaison de treize modèles à dispositif constant
Cadre. Variable : le modèle. Fixés : le harness complet, les 50 questions à barème de § 2.3, la boucle et la configuration de retrieval sans reranker de § 3.5, le juge. 49 questions notées (une exclue, un modèle ayant produit un tool call malformé cinq fois de suite). Métriques : note, recall@10, tool calls, latence médiane, tokens, tarif catalogue par mille questions. Deux modèles éligibles n'ont pu être mesurés : l'un sans provider gérant les tool calls, l'autre limité en débit par le seul provider qui les gère ; la famille Llama est absente pour ces raisons.
| modèle | note /20 | texte attendu lu | texte attendu cité | étapes | latence p50 | tokens entrée / question | $ / 1000 q |
|---|---|---|---|---|---|---|---|
| GPT-5.6 Luna | 18,3 | 89 % | 86 % | 3,7 | 20 s | 77 284 | 16 |
| Qwen3.8 27B | 17,9 | 90 % | 90 % | 4,1 | 50 s | 83 778 | 39 |
| Claude Sonnet 5 | 17,3 | 87 % | 86 % | 2,7 | 28 s | 111 565 | 233 |
| DeepSeek V4.1 Flash | 16,9 | 87 % | 82 % | 5,5 | 23 s | 76 156 | 12 |
| Gemma 4 31B | 16,3 | 78 % | 76 % | 2,8 | 31 s | 85 371 | 8 |
| GLM 5.3 Flash | 16,1 | 82 % | 78 % | 3,6 | 23 s | 87 767 | 14 |
| Claude Haiku 4.5 | 15,8 | 87 % | 71 % | 4,7 | 26 s | 102 901 | 109 |
| Qwen3.6 35B-A3B | 15,6 | 82 % | 73 % | 3,6 | 24 s | 100 701 | 6 |
| Qwen3.5 122B-A10B | 13,9 | 79 % | 69 % | 3,9 | 24 s | 109 720 | 31 |
| gpt-oss 120B | 11,6 | 60 % | 59 % | 1,4 | 27 s | 57 323 | 2 |
| Mistral Small 4 | 11,5 | 59 % | 57 % | 4,4 | 26 s | 113 522 | 18 |
| Ministral 3B | 8,6 | 40 % | 37 % | 6,1 | 17 s | 113 113 | 11 |
| Ministral 8B | 6,4 | 45 % | 24 % | 16,5 | 26 s | 245 607 | 37 |
Texte attendu lu : part des questions où le modèle a ouvert ou cité l'un des textes attendus avant de répondre (le recall@10 de l'agent, § 3.1). Texte attendu cité : part des réponses dont les citations finales contiennent l'un de ces textes. L'écart entre les deux colonnes, ce sont les textes attendus que le modèle a lus mais n'a pas cités.
Résultat. Les notes s'étendent de 6,4 à 18,3 sur vingt. Contre le bras de référence (Qwen3.8-27B, 17,9), une seule comparaison appariée est nominalement favorable (GPT-5.6 Luna, +0,020, p = 0,72) et ne franchit pas le critère ; toutes les autres sont défavorables avec p ≤ 0,24. Deux comportements extrêmes apparaissent dans les tool calls (figure 5) : un modèle en effectue 16,5 par question en moyenne et consomme 2,5 fois les tokens des autres pour la note la plus basse ; un autre s'arrête après 1,4 appel avec un recall de 0,60. La part des réponses citant l'un des textes attendus va de 24 % (Ministral 8B) à 90 % (Qwen3.8-27B). Prix. Le rang de la note suit le tarif catalogue au token (corrélation de Spearman 0,62 sur le prix de sortie, p = 0,011), pas le coût mesuré par question (0,23, p = 0,23) ; cette analyse est exploratoire (§ 5).
Répétabilité. Le bras GPT-5.6 Luna a été rejoué à l'identique quelques heures plus tard (§ 4.4) et noté par un autre juge de la même chaîne : 0,915 puis 0,847 (−0,071). Cet écart est la marge de répétition sur 49 questions ; les écarts inférieurs sont lus comme des égalités. Infrastructures. Chaque réponse enregistre le provider qui l'a servie ; un modèle a été servi par six providers différents au cours de ses cinquante questions, à des précisions de calcul potentiellement différentes.
4.4Les meilleurs modèles avec et sans le harness
Cette expérience mesure l'utilité de ce qui a été construit. Les deux meilleurs modèles de § 4.3 sont mis dans quatre montages, et l'on regarde ce que le harness apporte contre l'alternative la plus simple, une recherche web. Cadre. Variable : le montage — modèle seul (sans outils ni contexte, même format de réponse demandé) ; modèle avec recherche web (outil serveur du provider) ; modèle avec le harness ; harness et recherche web. Deux modèles (GPT-5.6 Luna ; Qwen3.8-27B), puis deux modèles bon marché (ci-dessous). Mêmes 50 questions, note et vérifiabilité (§ 3.1). Les montages sans harness citent en texte libre ; leurs citations sont résolues par le même résolveur.
Chaque montage bat le modèle seul sur les deux modèles (p ≥ 0,963). Le web et le harness sont à égalité sur la note (Luna : 17,6 contre 16,9 ; Qwen : 18,8 contre 17,9 ; écarts sous la marge de répétition) et le cumul des deux n'ajoute rien. La vérifiabilité les sépare : avec le harness, 99 à 100 % des citations s'ouvrent ; sans lui, 57 à 75 % — et l'accès au web, qui fait citer davantage (139 → 171 références pour Luna), ne relève pas cette part (69 % et 62 %). Le dispositif construit fait ce pour quoi il est construit : il rend chaque citation vérifiable sans coûter de justesse.
| modèle | montage | note /20 | citations qui s'ouvrent | texte attendu cité |
|---|---|---|---|---|
| GPT-5.6 Luna | seul | 15,1 | 75 % | 44 % |
| GPT-5.6 Luna | web | 17,6 | 69 % | 76 % |
| GPT-5.6 Luna | harness | 16,9 | 100 % | 78 % |
| GPT-5.6 Luna | harness + web | 17,5 | 99 % | 78 % |
| Qwen3.8 27B | seul | 10,0 | 57 % | 8 % |
| Qwen3.8 27B | web | 18,8 | 62 % | 57 % |
| Qwen3.8 27B | harness | 17,9 | 100 % | 90 % |
| Qwen3.8 27B | harness + web | 18,2 | 100 % | 84 % |
| Qwen3.6 35B-A3B | seul | 9,8 | 40 % | 12 % |
| Qwen3.6 35B-A3B | web | 15,5 | 56 % | 48 % |
| Qwen3.6 35B-A3B | harness | 15,6 | 100 % | 73 % |
| Qwen3.6 35B-A3B | harness + web | 15,6 | 100 % | 76 % |
| Gemma 4 31B | seul | 9,6 | 72 % | 12 % |
| Gemma 4 31B | web | 10,4 | 68 % | 14 % |
| Gemma 4 31B | harness | 16,3 | 100 % | 76 % |
| Gemma 4 31B | harness + web | 15,0 | 100 % | 68 % |
Le harness fait citer le texte attendu au moins aussi souvent que la recherche web : 78 % des réponses contre 76 % pour Luna, 90 % contre 57 % pour Qwen ; sans outils, le modèle seul le cite dans 44 % et 8 % des réponses.
Deux modèles bon marché. La même expérience a été refaite sur deux modèles choisis par une règle fixée avant la mesure — les deux modèles de § 4.3 les moins chers par question parmi ceux qui notent au moins 15/20 avec le harness — avec son critère : le harness doit gagner au moins 0,15 sur la note contre le modèle seul (p ≥ 0,95) et faire citer le texte attendu plus souvent que la recherche web. Seuls, Qwen3.6-35B-A3B et Gemma 4 31B notent 9,8 et 9,6 sur vingt et citent le texte attendu dans 12 % des réponses ; avec le harness, 15,6 et 16,3, et 73 % et 76 % (+0,30 et +0,35 sur la note, p = 1,0). La recherche web porte Qwen3.6 à 15,5 mais ne lui fait citer le texte attendu que dans 48 % des réponses, et n'aide presque pas Gemma (10,4 ; 14 %). Les deux critères sont remplis pour les deux modèles, qui coûtent avec le harness 5 et 7 € pour mille questions, contre 14 € pour Luna.
5Discussion
H1 — « Le harness rend vérifiable sans coûter de justesse » : un harness appuyé sur un corpus comptable daté rend les citations vérifiables, sans perdre de justesse face à une recherche web. Confirmée, dans les limites de ce que mesure la vérifiabilité. Justesse : chaque montage bat le modèle seul (p ≥ 0,963), mais le harness et la recherche web sont à égalité (Luna 16,9 contre 17,6 ; Qwen 17,9 contre 18,8 ; écarts sous la marge de répétition) et leur cumul n'ajoute rien (§ 4.4). Vérifiabilité : avec le harness, 98 à 100 % des citations se retrouvent dans le corpus ; sans lui, 57 à 75 %. Une partie de cet écart tient au résolveur, qui lit du texte libre alors que le harness cite des identifiants : relues une à une sans voir la question ni la réponse, les citations non rattachées des montages sans harness désignent encore un texte du corpus pour 1 à 14 % des citations. Corrigé de cet effet, l'écart demeure : 66 à 78 % des citations sans harness désignent un texte du corpus, contre 98 à 100 % avec. Le reste se partage entre des numéros de compte du plan comptable cités comme des textes (11 à 18 %) et, pour 11 à 16 %, des articles du PCG cités sous leur numérotation antérieure à 2025, des textes hors périmètre (Code civil, Code du travail, pages de l'AMF) et des références introuvables, que ce tri ne sépare pas de façon fiable. Le harness fait aussi citer le texte attendu au moins aussi souvent que la recherche web (78 % des réponses contre 76 % pour Luna, 90 % contre 57 % pour Qwen ; mesure descriptive). Enfin, une citation qui se retrouve dans le corpus n'est pas encore une citation qui étaye la réponse : ce contrôle n'a pas été mesuré (§ 6).
H2 — « Plus c'est cher, mieux c'est » : la justesse varie selon le modèle, et les modèles les plus chers répondent le plus juste. La première moitié est confirmée : à harness constant, la note va de 6,4 à 18,3 sur vingt (§ 4.3). La seconde dépend du prix regardé. Le rang de la note suit le tarif catalogue au token — corrélation de Spearman 0,62 sur le prix de sortie (p = 0,011), 0,46 sur le prix d'entrée (p = 0,058), test par permutation unilatéral sur treize modèles — mais pas le coût mesuré par question (0,23, p = 0,23), parce qu'un modèle faible consomme des tokens en boucle : le moins bien noté fait 16,5 appels par question. L'écart vient surtout des modèles qui ne mènent pas la boucle d'outils ; les sept meilleurs (15,8 à 18,3) tiennent en moins de deux marges de répétition, et le mieux noté coûte quatorze fois moins par question que le plus cher (Claude Sonnet 5, 17,3). Deux modèles à 5 et 7 € pour mille questions, sous 10/20 seuls, atteignent 15,6 et 16,3 avec le harness (§ 4.4). Treize modèles et trois axes de prix examinés après la mesure : la tendance est indicative, pas établie.
Ce qui fait la qualité de la recherche. Hors hypothèses, les leviers de § 4.2 disent quelles pièces du harness comptent. Le retrieval plafonne à 0,87 sur les questions de praticien après la réécriture et le reranker (§ 4.2.2, § 4.2.3). Sur les énoncés d'examen et sur les pièces, le seul levier documentaire qui porte est la mémoire des cas réels (§ 4.2.1 : +0,167 sur des pièces jamais vues, confirmé une fois sur le split gelé, +0,054) ; la génération de cas fictifs ne porte pas. Le fichier de contexte complet ne fait pas mieux que le minimal au critère fixé (+0,022 sur 77 questions, p = 0,78), un extrait de la carte choisi par question dégrade la note, et le budget d'appels ne change la note que sur onze questions sur 49 (§ 4.2.4).
6Limites
- Les comparaisons de modèles portent sur 49 questions notées ; les montages sur 50. À cette taille, la même mesure répétée bouge de 0,07 sur la note : deux modèles à moins de 0,07 l'un de l'autre sont indiscernables.
- Sur l'endpoint gratuit, 25 des 102 questions de la réplication du contexte n'ont pas reçu de réponse (connexions coupées). Les comparaisons portent sur les 77 questions répondues par tous les bras ; ce sont les plus courtes à traiter, donc les plus faciles.
- Les questions de praticien sont notées contre un barème de praticien, écrit avant toute réponse.
- Le montage avec recherche web est daté par construction : une page change.
- Les tarifs évoluent ; les tokens consommés sont publiés avec eux.
- Un même modèle est servi par plusieurs providers selon l'appel, parfois à des précisions différentes ; chaque réponse porte le nom de celui qui l'a servie.
- La vérifiabilité mesurée est la résolution dans le corpus. Elle ne dit pas si le texte cité étaye la réponse. Le tri des citations non rattachées est fait par un modèle lisant le corpus, sans calibration contre une relecture humaine.
- Dix-sept réponses n'ont pas respecté le format de sortie mais contenaient l'objet de réponse : leurs citations comptent pour « texte attendu cité », pas pour la vérifiabilité de § 4.4, calculée sur les citations enregistrées au moment de la campagne.
- L'abstention n'est pas mesurée dans ces expériences : aucune des 50 questions notées n'en appelle une.
- Les deux hypothèses et l'analyse du prix sont formulées après les mesures ; treize modèles et trois axes de prix ne suffisent pas à établir une tendance.
- Les 32 rattachements douteux des annales ont été relus, avec un taux de désaccord de 0,19 ; le reste des rattachements n'a pas été relu.
7Conclusion
Rendre vérifiable la réponse d'un LLM en droit comptable français est une affaire de dispositif : un corpus daté, des outils que le modèle appelle, un format de réponse qui n'admet que des identifiants ouverts. Ce dispositif ne coûte pas de justesse face à une recherche web. La justesse dépend du modèle : les modèles les plus chers au token tendent à mieux répondre, mais le coût réel d'une question ne suit pas, et un modèle bon marché égale le plus cher. Reste à mesurer si les citations qui se résolvent étayent bien la réponse.
AAnnexe — les copies
Pour chaque question de § 4.2.4 à § 4.4 : l'énoncé, ce qu'une bonne réponse établit, le barème, puis chaque copie avec ses critères acquis ou non, la justification du juge, les textes ouverts avant de répondre et, pour chaque citation, sa résolution, quelle que soit la façon dont elle est écrite (« art. 214-13 du PCG » ou un identifiant) : en vert, l'un des textes attendus ; en jaune, un texte qui existe dans le corpus mais n'est pas celui attendu, ce qui ne le rend pas faux pour autant ; en rouge, un texte absent du corpus, avec la raison relevée en relisant une à une les citations que le résolveur ne rattache pas (§ 5) — numéro de compte, ancienne numérotation du PCG, texte hors corpus, référence introuvable.