JOURNAL DES DÉCISIONS DEC-001
Récupération documentaire plutôt que réentraînement de modèle
Entrée reconstruite à partir du dépôt. Les options listées ci-dessous sont celles que le code démontre. Elles ne prétendent pas décrire ce qui a été envisagé à l’époque, et les questions restées ouvertes sont écrites en fin de page.
Contexte
Les produits du groupe doivent répondre sur des textes réglementaires : CSRD, ESRS, VSME. Ces textes changent, et une réponse fausse sur un texte de loi n’est pas une approximation, c’est une faute.
Deux façons de faire tenir un texte dans un modèle de langage : le réentraîner sur le corpus, ou aller chercher les passages pertinents au moment de la question.
Le choix engage tout le reste : l’ingestion, le stockage vectoriel, le coût par réponse et la capacité à citer une source.
Options envisagées
Décision
L’assistant du groupe s’appuie sur une récupération documentaire vectorielle, jamais sur un modèle réentraîné.
Raisonnement
- Technique
- Le corpus est ingéré et vectorisé une fois, puis interrogé à chaque question. Mettre à jour un texte revient à réingérer un document, pas à relancer un entraînement.
- Réglementaire
- Une réponse doit pouvoir nommer le passage sur lequel elle s’appuie. Un modèle réentraîné mélange le texte à ses paramètres et ne sait plus dire d’où vient ce qu’il affirme.
- Économique
- Pas de coût d’entraînement ni de réentraînement. Le coût se déplace vers l’appel de vectorisation et le stockage de l’index.
Compromis accepté
Chaque réponse coûte une recherche vectorielle avant la génération, donc de la latence et un appel de plus. Et l’assistant ne sait rien qui ne soit pas dans le corpus : sa qualité est plafonnée par celle de l’ingestion.
DÉCISION · CODE · RÉSULTAT
- LA DÉCISION
L’assistant du groupe s’appuie sur une récupération documentaire vectorielle, jamais sur un modèle réentraîné.
- LE CODE QU’ELLE A PRODUIT
- FichierRecherche vectorielle
apps/web/lib/ai/retrieval.ts - FichierIngestion du corpus
packages/db/src/ingest.ts - MigrationTable rag_chunks et index vectoriel
packages/db/migrations/0000_init.sql
- FichierRecherche vectorielle
- LE RÉSULTAT OBSERVÉ
Le corpus vit dans le dossier corpus/, l’ingestion dans packages/db/src/ingest.ts, la recherche dans apps/web/lib/ai/retrieval.ts. La table rag_chunks porte un vecteur de mille vingt-quatre dimensions, indexé côté SQL. La décision a rendu possible DEC-007 : sans passages récupérés, l’assistant refuse de répondre au lieu d’inventer.
Questions ouvertes
Ce que le dépôt ne démontre pas, et que seul Adama peut trancher. Elles sont écrites plutôt que comblées.
- Le réentraînement a-t-il été essayé, ou écarté sur analyse ?
- La dimension de mille vingt-quatre est-elle une troncature choisie pour le coût de stockage, ou pour une autre raison ?
LE JOURNAL COMPLET
Toutes les décisions, au même format.
Elles se comparent : même gabarit, même vocabulaire, même exigence de trace.