[{"data":1,"prerenderedAt":1429},["ShallowReactive",2],{"blog-list-fr-fr":3},[4],{"id":5,"title":6,"body":7,"config":1413,"date":1414,"description":1415,"draft":1416,"extension":1417,"image":1413,"meta":1418,"navigation":1419,"path":1420,"seo":1421,"stem":1422,"tags":1423,"toolbar":1413,"translationKey":1427,"updated":1414,"__hash__":1428},"blog/fr-fr/blog/zero-hallucination-qa.md","Comment j'ai implémenté le Q&R sans hallucination dans notre lecteur",{"type":8,"value":9,"toc":1377},"minimark",[10,18,33,36,41,48,53,58,76,81,94,99,133,136,140,158,165,169,184,189,226,233,237,250,275,280,397,415,421,423,427,434,449,456,476,482,484,488,491,497,499,503,526,535,596,599,610,620,627,629,633,644,650,657,661,668,676,683,687,697,740,751,757,759,763,778,786,792,795,830,840,848,854,861,865,873,879,890,892,896,902,906,913,917,940,947,949,953,959,1017,1023,1025,1029,1036,1055,1059,1079,1090,1092,1096,1107,1110,1133,1144,1150,1152,1156,1171,1182,1184,1188,1209,1220,1222,1226,1245,1251,1253,1257,1344,1351,1362],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"Couverture : Q&R sans hallucination","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[19,20,21],"blockquote",{},[11,22,23,24,28,29,32],{},"Cet article décrit l'implémentation technique du ",[25,26,27],"strong",{},"Q&R sans hallucination"," dans notre lecteur IA : les réponses s'appuient strictement sur le texte du livre ouvert, et les affirmations clés peuvent être ",[25,30,31],{},"retrouvées en un clic"," jusqu'au passage exact. Si vous développez la lecture IA, le Q&A documentaire ou des applications de type RAG, nous espérons que trois itérations et l'architecture finale vous seront utiles.",[34,35],"hr",{},[37,38,40],"h2",{"id":39},"i-évolution-en-trois-étapes","I. Évolution en trois étapes",[11,42,43,44,47],{},"Le Q&R sans hallucination n'a pas été conçu parfaitement dès le départ. Il a évolué sous la tension entre ",[25,45,46],{},"coût, latence et précision",". Voici les trois étapes dans l'ordre chronologique—pour comprendre pourquoi l'architecture actuelle a cette forme.",[49,50],"mermaid",{":config":51,"code":52},"config","flowchart%20LR%0A%20%20%20%20P1%5B%C3%89tape%201%20%3A%20Texte%20int%C3%A9gral%5D%20--%3E%20P2%5B%C3%89tape%202%20%3A%20LLM%20phrases%20cl%C3%A9s%5D%0A%20%20%20%20P2%20--%3E%20P3%5B%C3%89tape%203%20%3A%20Index%20segments%20%2B%20Tool%5D%0A%20%20%20%20P1%20-.-%3E%7CLent%2C%20co%C3%BBteux%2C%20impr%C3%A9cis%20sur%20longs%20ouvrages%7C%20X1%5BAbandonn%C3%A9%5D%0A%20%20%20%20P2%20-.-%3E%7CPerte%20de%20d%C3%A9tail%2C%20encore%20lent%7C%20X2%5BAbandonn%C3%A9%5D%0A%20%20%20%20P3%20--%3E%7CActuel%7C%20OK%5BZ%C3%A9ro%20hallucination%20%2B%20tra%C3%A7able%5D",[54,55,57],"h3",{"id":56},"étape-1-injecter-tout-le-livre-dans-le-contexte-le-plus-simpleet-le-premier-à-craquer","Étape 1 : Injecter tout le livre dans le contexte (le plus simple—et le premier à craquer)",[11,59,60,63,64,67,68,71,72,75],{},[25,61,62],{},"Approche :"," Quand l'utilisateur ouvre un livre et pose une question, placer ",[25,65,66],{},"tout le corps de texte extrait"," dans le system prompt ou le message utilisateur, puis laisser le modèle de dialogue répondre. Si le livre dépasse environ ",[25,69,70],{},"400 000 caractères",", ",[25,73,74],{},"troncature brutale","—seul le début est conservé ; les chapitres suivants sont invisibles pour le modèle.",[11,77,78],{},[25,79,80],{},"Avantages :",[82,83,84,88,91],"ul",{},[85,86,87],"li",{},"Coût d'implémentation très faible, presque pas de prétraitement ;",[85,89,90],{},"Résultats corrects sur les livres courts et documents simples—le modèle a vraiment « vu tout le livre » ;",[85,92,93],{},"UX simple : poser une question, obtenir une réponse, sans état « veuillez patienter pendant l'analyse ».",[11,95,96],{},[25,97,98],{},"Inconvénients (rapidement inacceptables) :",[82,100,101,107,113,123],{},[85,102,103,106],{},[25,104,105],{},"Réponses lentes :"," Chaque question renvoie une charge énorme ; le délai jusqu'au premier token et la latence totale augmentent avec la longueur du livre ;",[85,108,109,112],{},[25,110,111],{},"Coût token élevé :"," Vous payez l'intégralité du livre en entrée à chaque question ;",[85,114,115,118,119,122],{},[25,116,117],{},"Longs ouvrages fortement déformés :"," Au-delà de 400k caractères, la seconde moitié, les annexes et les conclusions n'existent pratiquement plus—et l'UI ",[25,120,121],{},"n'indique souvent pas clairement"," la troncature ;",[85,124,125,128,129,132],{},[25,126,127],{},"Granularité de recherche nulle :"," Le modèle doit « trouver une aiguille dans une botte de foin » sur des centaines de milliers de caractères—risque de manquer des détails et de produire des ",[25,130,131],{},"résumés plausibles sans fondement","—exactement ce qu'il faut éviter en lecture.",[11,134,135],{},"L'étape 1 convient à un MVP, pas à une solution produit.",[54,137,139],{"id":138},"étape-2-un-llm-léger-extrait-des-phrases-clés-compresser-le-contextetrop-agressivement","Étape 2 : Un LLM léger extrait des phrases clés (compresser le contexte—trop agressivement)",[11,141,142,144,145,148,149,152,153,157],{},[25,143,62],{}," Avant le Q&R (ou à la première ouverture), faire tourner un ",[25,146,147],{},"modèle moins cher"," sur le corps : découpage par chapitre spine (ou par blocs), extraction de ",[25,150,151],{},"phrases clés",", conservation des tags de position comme ",[154,155,156],"code",{},"[fFichier-début-fin]",", puis concaténation en un contexte plus court pour le Q&R ultérieur.",[11,159,160,161,164],{},"Pipeline typique : ",[25,162,163],{},"Extract → Cache → Chat",". Extraire une fois (hors ligne ou à la demande), stocker un « paquet de phrases clés », le réutiliser à chaque question—comme beaucoup de prototypes document Q&A : compresser d'abord, répondre ensuite.",[11,166,167],{},[25,168,80],{},[82,170,171,178,181],{},[85,172,173,174,177],{},"Chaque question envoie ",[25,175,176],{},"beaucoup moins de texte"," ; la consommation de tokens par requête baisse par rapport à l'étape 1 ;",[85,179,180],{},"Le prétraitement peut être mis en cache ; pas de ré-extraction par question sur le même livre ;",[85,182,183],{},"Les tags de position posent les bases des citations.",[11,185,186],{},[25,187,188],{},"Inconvénients (encore insuffisant sur les longs ouvrages) :",[82,190,191,197,207,216],{},[85,192,193,196],{},[25,194,195],{},"Perte importante de détails :"," Les « phrases clés » sont choisies par le modèle ; qualificateurs, contre-exemples et chaînes d'argumentation disparaissent souvent—réponses « correctes mais unilatérales » ;",[85,198,199,202,203,206],{},[25,200,201],{},"Contexte encore volumineux sur les gros ouvrages :"," Même les paquets de phrases clés restent conséquents—latence et coût ",[25,204,205],{},"atténués, pas résolus"," ;",[85,208,209,212,213,206],{},[25,210,211],{},"Double erreur LLM :"," L'extraction peut omettre ; le Q&R peut mal lire les extraits—les erreurs ",[25,214,215],{},"s'accumulent",[85,217,218,221,222,225],{},[25,219,220],{},"Contexte statique :"," Que la question porte sur un chapitre ou la structure globale, le modèle reçoit toujours ",[25,223,224],{},"le même blob pré-extrait","—pas de rétrécissement dynamique selon la question.",[11,227,228,229,232],{},"La leçon : le problème n'est pas « de compresser ou non », mais ",[25,230,231],{},"« si la compression est à la demande et si l'on peut revenir au texte source »",".",[54,234,236],{"id":235},"étape-3-index-de-segments-tool-à-la-demande-retour-du-texte-source-actuel","Étape 3 : Index de segments + Tool à la demande + retour du texte source (actuel)",[11,238,239,241,242,249],{},[25,240,62],{}," Inspiré de ",[243,244,248],"a",{"href":245,"rel":246},"https://github.com/VectifyAI/PageIndex",[247],"nofollow","PageIndex",". Par rapport à l'étape 2, trois changements majeurs :",[251,252,253,259,269],"ol",{},[85,254,255,258],{},[25,256,257],{},"Le prétraitement produit un index structuré"," (résumés au niveau TOC + spans de caractères exacts), pas des extraits utilisés directement comme contexte Q&R ;",[85,260,261,264,265,268],{},[25,262,263],{},"Chaque question utilise le Tool Calling pour chercher à la demande",", puis ",[25,266,267],{},"récupère le texte source avec tags de position"," pour répondre ;",[85,270,271,274],{},[25,272,273],{},"System prompt + frontend"," imposent le format de citation et permettent clic → saut → surlignage dans le lecteur.",[11,276,277],{},[25,278,279],{},"Comparaison des trois étapes :",[281,282,283,302],"table",{},[284,285,286],"thead",{},[287,288,289,293,296,299],"tr",{},[290,291,292],"th",{},"Dimension",[290,294,295],{},"Étape 1 (texte intégral)",[290,297,298],{},"Étape 2 (phrases clés)",[290,300,301],{},"Étape 3 (actuel)",[303,304,305,324,338,352,366,383],"tbody",{},[287,306,307,311,314,317],{},[308,309,310],"td",{},"Contexte par question",[308,312,313],{},"Livre entier (ou première moitié tronquée)",[308,315,316],{},"Phrases clés pré-extraites",[308,318,319,320,323],{},"Uniquement extraits de ",[25,321,322],{},"source"," pertinents",[287,325,326,329,332,335],{},[308,327,328],{},"Précision sur longs ouvrages",[308,330,331],{},"Effondrement au-delà de ~400k",[308,333,334],{},"Dépend de l'extraction ; perte de détail",[308,336,337],{},"Recherche par TOC/span ; pas de troncature brutale du livre entier",[287,339,340,343,346,349],{},[308,341,342],{},"Vitesse de réponse",[308,344,345],{},"Lente",[308,347,348],{},"Un peu mieux ; longs ouvrages encore lents",[308,350,351],{},"Recherche + contexte court—nettement plus rapide",[287,353,354,357,360,363],{},[308,355,356],{},"Coût token",[308,358,359],{},"Très élevé",[308,361,362],{},"Moyen-élevé",[308,364,365],{},"Prétraitement amorti + paiement à la demande",[287,367,368,371,374,377],{},[308,369,370],{},"Traçabilité",[308,372,373],{},"Faible (citations difficiles)",[308,375,376],{},"Tags présents mais contenu filtré",[308,378,379,380],{},"Notes de bas de page → ",[25,381,382],{},"vrais spans source",[287,384,385,388,391,394],{},[308,386,387],{},"Complexité technique",[308,389,390],{},"Faible",[308,392,393],{},"Moyenne",[308,395,396],{},"Élevée",[11,398,399,402,403,406,407,410,411,414],{},[25,400,401],{},"Pourquoi nous nous sommes arrêtés à l'étape 3 :"," En lecture, zéro hallucination ne signifie pas « montrer au modèle le plus de texte possible », mais ",[25,404,405],{},"« avant de répondre, obtenir des preuves source pour la question »",". Les étapes 1–2 luttaient sur la ",[25,408,409],{},"taille du contexte"," ; l'étape 3 découpe le pipeline en ",[25,412,413],{},"index (prétraitement) → recherche (Tool) → preuve (source) → réponse (génération contrainte)","—équilibre précision, coût et traçabilité.",[11,416,417,418,232],{},"Ci-dessous le détail de ",[25,419,420],{},"l'étape 3",[34,422],{},[37,424,426],{"id":425},"ii-définition-du-problème-en-qr-livre-lhallucination-coûte-plus-cher-que-dans-un-chat-générique","II. Définition du problème : En Q&R livre, l'hallucination coûte plus cher que dans un chat générique",[11,428,429,430,433],{},"Les utilisateurs tolèrent parfois des erreurs dans un chatbot général. En ",[25,431,432],{},"Q&R livre",", le prix est plus élevé :",[82,435,436,443,446],{},[85,437,438,439,442],{},"Ils demandent ce que ",[25,440,441],{},"ce livre"," dit—not ce qui vit dans la mémoire paramétrique du modèle ;",[85,444,445],{},"Une « opinion du livre » plausible peut induire en erreur notes, citations et partages ;",[85,447,448],{},"Sans sources, pas de vérification—la confiance est difficile à établir.",[11,450,451,452,455],{},"« Zéro hallucination » devient donc trois règles ",[25,453,454],{},"applicables"," :",[251,457,458,464,470],{},[85,459,460,463],{},[25,461,462],{},"Les questions livre doivent d'abord interroger le livre :"," Tout ce qui peut concerner le livre ouvert passe par la recherche (Tool) avant la réponse ;",[85,465,466,469],{},[25,467,468],{},"Les réponses doivent être traçables :"," Les affirmations clés portent des tags de position que l'UI peut parser et atteindre ;",[85,471,472,475],{},[25,473,474],{},"Dire quand on ne trouve pas :"," Si le livre ne contient pas l'information, le dire—ne pas habiller des connaissances générales en « ce que dit le livre ».",[11,477,478,479,481],{},"La suite suit le flux de données de ",[25,480,420],{}," et la mise en œuvre de ces règles.",[34,483],{},[37,485,487],{"id":486},"iii-architecture-prétraitement-tool-génération-contrainte-citations-cliquables","III. Architecture : Prétraitement → Tool → Génération contrainte → Citations cliquables",[49,489],{":config":51,"code":490},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BHors%20ligne%20%2F%20premier%20pr%C3%A9traitement%5D%0A%20%20%20%20%20%20%20%20A%5BD%C3%A9couper%20le%20livre%20par%20TOC%20ou%20longueur%5D%20--%3E%20B%5BR%C3%A9sum%C3%A9s%20de%20segments%20LLM%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BPersister%20le%20cache%20Segment%20localement%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BQuestion%20utilisateur%5D%0A%20%20%20%20%20%20%20%20D%5BSaisie%20utilisateur%5D%20--%3E%20E%7BCache%20Segment%20existant%20%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNon%7C%20F%5BExtraire%20texte%20int%C3%A9gral%20%2F%20proposer%20pr%C3%A9traitement%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7COui%7C%20G%5BEnregistrer%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BRecherche%20Tool%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BType%20de%20question%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CVue%20d'ensemble%20%2F%20critique%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFaits%20%2F%20personnes%20%2F%20chapitre%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20choisit%20les%20ID%20de%20segments%20dans%20le%20catalogue%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BR%C3%A9cup%C3%A9rer%20source%20par%20span%20%2B%20tags%20de%20position%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BConcat%C3%A9ner%20tous%20les%20r%C3%A9sum%C3%A9s%20de%20segments%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BG%C3%A9n%C3%A9rer%20et%20afficher%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BR%C3%A9sultats%20Tool%20vers%20le%20mod%C3%A8le%5D%0A%20%20%20%20%20%20%20%20M%20--%3E%20N%0A%20%20%20%20%20%20%20%20N%20--%3E%20O%5BR%C3%A8gles%20de%20citation%20du%20system%20prompt%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BR%C3%A9ponse%20en%20flux%20%2B%20notes%20de%20position%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BAfficher%20notes%20cliquables%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BClic%20%E2%86%92%20aper%C3%A7u%20%E2%86%92%20saut%20et%20surlignage%5D%0A%20%20%20%20end",[11,492,493,494],{},"Idée centrale : ",[25,495,496],{},"ne pas laisser le modèle « répondre de mémoire »—l'obliger à « rassembler des preuves, répondre, marquer les sources ».",[34,498],{},[37,500,502],{"id":501},"iv-prétraitement-transformer-le-livre-en-index-de-segments-consultable","IV. Prétraitement : Transformer le livre en index de segments consultable",[11,504,505,506,509,510,513,514,517,518,521,522,525],{},"Si chaque question utilisait encore le contexte ",[25,507,508],{},"étape 1"," du livre entier, les longs ouvrages explosent le budget token et la recherche est trop grossière. Étape 3 : au premier chat IA sur un livre, lancer en arrière-plan un ",[25,511,512],{},"job de résumé de segments","—découpage par ",[25,515,516],{},"TOC"," ou ",[25,519,520],{},"longueur de texte"," en ",[154,523,524],{},"Segment","s, résumé de chacun, persistance en IndexedDB locale.",[11,527,528,529,531,532,455],{},"Chaque ",[154,530,524],{}," contient le résumé plus la ",[25,533,534],{},"position physique dans le corps",[281,536,537,547],{},[284,538,539],{},[287,540,541,544],{},[290,542,543],{},"Champ",[290,545,546],{},"Signification",[303,548,549,563,576,586],{},[287,550,551,560],{},[308,552,553,556,557],{},[154,554,555],{},"startFileIndex"," / ",[154,558,559],{},"endFileIndex",[308,561,562],{},"Index de fichier spine (PDF : un fichier par page)",[287,564,565,573],{},[308,566,567,556,570],{},[154,568,569],{},"startOffset",[154,571,572],{},"endOffset",[308,574,575],{},"Début/fin en caractères",[287,577,578,583],{},[308,579,580],{},[154,581,582],{},"sequence",[308,584,585],{},"Ordre de lecture linéaire",[287,587,588,593],{},[308,589,590],{},[154,591,592],{},"title",[308,594,595],{},"Titre TOC",[11,597,598],{},"Le découpage équilibre précision et coût : nœud TOC sous ~20 Ko → résumer ce nœud seul ; nœuds frères fusionnés en lots (15–20 Ko) avant appel LLM ; blocs longs non structurés en plages ~30–40k caractères.",[11,600,601,602,605,606,609],{},"Le system prompt de résumé exige de ",[25,603,604],{},"conserver les tags de position inline"," (",[154,607,608],{},"[fNombre-Nombre-Nombre]",") pour que la source récupérée par Tool s'aligne sur les offsets spine. Contrainte centrale :",[611,612,618],"pre",{"className":613,"code":615,"language":616,"meta":617},[614],"language-text","If summary content relates to a passage, keep the trailing position tag [fNumber-Number-Number] (e.g. [f1-90-109]).\nTags are atomic—do not alter, merge, or omit any character or digit.\n","text","",[154,619,615],{"__ignoreMap":617},[11,621,622,623,626],{},"Après prétraitement, le Q&R dépend d'un ",[25,624,625],{},"index de segments structuré",", pas du contexte livre entier—prérequis technique du zéro hallucination sur longs ouvrages.",[34,628],{},[37,630,632],{"id":631},"v-système-de-tags-de-position-encoder-le-doù-dans-le-texte","V. Système de tags de position : Encoder le « d'où » dans le texte",[11,634,635,636,639,640,643],{},"Le zéro hallucination exige du contenu source ",[25,637,638],{},"et"," une ",[25,641,642],{},"provenance"," analysable par machine et atteignable dans l'UI. Nous utilisons des tags inline :",[611,645,648],{"className":646,"code":647,"language":616},[614],"[f{fileIndex}-{startChar}-{endChar}]\n",[154,649,647],{"__ignoreMap":617},[11,651,652,653,656],{},"Exemple : ",[154,654,655],{},"[f5-123-165]"," = fichier spine 5 (base 0), caractères 123–165.",[54,658,660],{"id":659},"_51-comment-les-tags-sont-écrits-dans-le-corps","5.1 Comment les tags sont écrits dans le corps",[11,662,663,664,667],{},"La couche d'extraction ajoute ",[154,665,666],{},"[f{fileIndex}-{start}-{end}]"," en fin de segment :",[611,669,674],{"className":670,"code":672,"language":673,"meta":617},[671],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[154,675,672],{"__ignoreMap":617},[11,677,678,679,682],{},"Résumés de prétraitement ou extraits Tool : les positions s'alignent sur les ",[25,680,681],{},"offsets caractères spine","—pas des numéros de page estimés par le modèle.",[54,684,686],{"id":685},"_52-contraintes-sur-la-sortie-du-modèle","5.2 Contraintes sur la sortie du modèle",[11,688,689,690,696],{},"Le system prompt inclut ",[25,691,692],{},[693,694,695],"span",{},"Position Citation Rules","—cinq points essentiels :",[251,698,699,709,719,725,734],{},[85,700,701,704,705,708],{},[25,702,703],{},"Format standard :"," Doit utiliser ",[154,706,707],{},"[f_fileIndex-startChar-endChar]"," ; les trois parties numériques obligatoires ;",[85,710,711,714,715,718],{},[25,712,713],{},"Copier uniquement depuis les sources actuelles :"," Notes ",[25,716,717],{},"verbatim"," des messages system/user ou retours Tool de ce tour ;",[85,720,721,724],{},[25,722,723],{},"Pas de fabrication :"," Ne pas calculer, modifier ou inventer des positions ;",[85,726,727,730,731,206],{},[25,728,729],{},"Préférer l'omission :"," Pas de tag valide dans le contexte → répondre normalement—",[25,732,733],{},"ne pas émettre de tags de position",[85,735,736,739],{},[25,737,738],{},"Inline avec les affirmations :"," Tags après la phrase concernée ; pas de listes de citations en fin de réponse.",[11,741,742,743,746,747,750],{},"L'UI filtre aussi les tags ",[25,744,745],{},"bipartites"," invalides occasionnels (ex. ",[154,748,749],{},"[f1-293]",") avant rendu.",[11,752,753],{},[14,754],{"alt":755,"src":756},"Popup de traçage des citations","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[34,758],{},[37,760,762],{"id":761},"vi-tool-calling-dabord-chercher-ensuite-répondre","VI. Tool Calling : D'abord chercher, ensuite répondre",[11,764,765,766,769,770,773,774,777],{},"Quand le chat est lié à un livre (",[154,767,768],{},"resourceId"," présent, ",[154,771,772],{},"chatType === 'chat'","), nous enregistrons deux Tools avec executors avant chaque génération—boucle ",[25,775,776],{},"function calling"," compatible OpenAI.",[54,779,781,782,785],{"id":780},"_61-get_related_segment_summaries-recherche-ciblée-de-segments","6.1 ",[154,783,784],{},"get_related_segment_summaries"," — Recherche ciblée de segments",[11,787,788,789,232],{},"Pour : concepts, personnages, intrigue, détails de chapitre—",[25,790,791],{},"intention de recherche claire",[11,793,794],{},"Flux :",[251,796,797,804,810,813,823],{},[85,798,799,800,803],{},"Le modèle reformule la question en ",[25,801,802],{},"termes susceptibles d'apparaître dans le livre"," (« Optimize Search Queries » dans le system prompt) ;",[85,805,806,807,206],{},"Appel Tool avec ",[154,808,809],{},"question",[85,811,812],{},"Grouper toutes les résumés de segments par budget token (~30k tokens par lot, max 5 lots) ;",[85,814,815,816,819,820,206],{},"Par lot : requête LLM séparée choisit les ID pertinents (max 5) dans ",[154,817,818],{},"{ id, title, summary }",", JSON du type ",[154,821,822],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[85,824,825,826,829],{},"Pour les segments choisis, tirer le ",[25,827,828],{},"texte source tagué"," du spine—not les résumés—comme résultat Tool.",[11,831,832,835,836,839],{},[25,833,834],{},"Design clé : le Tool renvoie la source, pas les résumés."," Le modèle répond à partir de vrais paragraphes avec ",[154,837,838],{},"[f…]"," inline, évitant la dérive « résumé → re-résumé ».",[54,841,843,844,847],{"id":842},"_62-get_full_book_segment_summaries-vue-densemble-du-livre","6.2 ",[154,845,846],{},"get_full_book_segment_summaries"," — Vue d'ensemble du livre",[11,849,850,851,232],{},"Pour : « résumer le livre », « critiquer ce livre », « structure/thèmes globaux »—",[25,852,853],{},"vue globale",[11,855,856,857,860],{},"Concaténer tous les champs ",[154,858,859],{},"summary"," des segments dans l'ordre de lecture—éviter de manquer des chapitres clés par pertinence par morceau seule.",[54,862,864],{"id":863},"_63-system-prompt-livre-dabord-outils-dabord","6.3 System prompt : Livre d'abord, outils d'abord",[11,866,867,868,455],{},"Avec un livre lié, s'applique ",[25,869,870],{},[693,871,872],{},"Core Principles for Reading Assistant",[611,874,877],{"className":875,"code":876,"language":616},[614],"1. Book First, Tool First\n   - Any question possibly about the book must call tools first;\n   - Answers must rely mainly on retrieval—never invent “book content” without retrieval.\n\n2. General Knowledge as Fallback Only\n   - Only for: casual chat / user explicitly skips the book / tools return nothing;\n   - If the book lacks it, say “not mentioned in this book” before general knowledge.\n\n3. Direct Style\n   - Get to the point—avoid “based on the provided materials…” and similar filler.\n",[154,878,876],{"__ignoreMap":617},[11,880,881,882,885,886,889],{},"La génération exécute la boucle Tool : ",[154,883,884],{},"tool_calls"," → exécuter → ajouter ",[154,887,888],{},"role: tool"," → continuer jusqu'au texte final. Avec tools activés, le canal thinking est coupé pour éviter les conflits de protocole.",[34,891],{},[37,893,895],{"id":894},"vii-traçabilité-frontend-de-la-note-de-bas-de-page-au-surlignage","VII. Traçabilité frontend : De la note de bas de page au surlignage",[11,897,898,899,901],{},"La sortie ",[154,900,655],{}," du modèle n'est pas affichée brute ; la couche de rendu en fait des citations cliquables.",[54,903,905],{"id":904},"_71-rendu-des-notes","7.1 Rendu des notes",[11,907,908,909,912],{},"Normaliser les tags en liens Markdown comme ",[154,910,911],{},"[1]([f5-123-165])",", afficher en notes numérotées ; dédupliquer la même position.",[54,914,916],{"id":915},"_72-interaction-au-clic","7.2 Interaction au clic",[251,918,919,928,934],{},[85,920,921,924,925,927],{},[25,922,923],{},"Premier clic :"," Parser ",[154,926,838],{}," → fileIndex + offsets → extraire texte spine → aperçu (titre TOC optionnel) ;",[85,929,930,933],{},[25,931,932],{},"Même note à nouveau :"," Fermer l'aperçu ;",[85,935,936,939],{},[25,937,938],{},"Confirmer le saut :"," Ouvrir la vue lecture, surligner la plage de caractères.",[11,941,942,943,946],{},"Du tag copié du modèle au texte source visible par l'utilisateur, la chaîne ",[25,944,945],{},"ne repasse jamais par un autre appel LLM","—déterministe et reproductible.",[34,948],{},[37,950,952],{"id":951},"viii-cas-limites-et-dégradation-honnête","VIII. Cas limites et dégradation honnête",[11,954,955,956,455],{},"Zéro hallucination ≠ « toujours une réponse »—c'est ",[25,957,958],{},"pas de preuve, pas d'invention",[281,960,961,971],{},[284,962,963],{},[287,964,965,968],{},[290,966,967],{},"Scénario",[290,969,970],{},"Comportement",[303,972,973,981,993,1001,1009],{},[287,974,975,978],{},[308,976,977],{},"Résumés de segments pas prêts",[308,979,980],{},"Extraire d'abord le texte intégral et résumer",[287,982,983,986],{},[308,984,985],{},"Tool ne trouve rien",[308,987,988,989,992],{},"Retourner ",[154,990,991],{},"(No relevant segment excerpts found…)"," ; le modèle doit dire « pas dans le livre »",[287,994,995,998],{},[308,996,997],{},"Tags bipartites invalides du modèle",[308,999,1000],{},"Filtrage frontend ; pas de notes cassées",[287,1002,1003,1006],{},[308,1004,1005],{},"Discussion informelle",[308,1007,1008],{},"Le system prompt autorise les connaissances générales hors livre",[287,1010,1011,1014],{},[308,1012,1013],{},"Exporter le chat",[308,1015,1016],{},"Les notes peuvent devenir des deep links lecteur pour partage/archivage",[11,1018,1019],{},[14,1020],{"alt":1021,"src":1022},"Export de conversation","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[34,1024],{},[37,1026,1028],{"id":1027},"ix-compromis-de-conception-pourquoi-pas-le-rag-vectoriel","IX. Compromis de conception : Pourquoi pas le « RAG vectoriel » ?",[11,1030,1031,1032,1035],{},"Les pairs en Q&A documentaire demandent souvent : si vous faites de la génération augmentée par recherche, pourquoi pas ",[25,1033,1034],{},"Embedding + base vectorielle Top-K"," ?",[11,1037,1038,1039,1042,1043,1046,1047,1050,1051,1054],{},"Nous ",[25,1040,1041],{},"faisons du RAG","—chercher avant de générer. La différence : « RAG » dans le discours commun implique souvent la ",[25,1044,1045],{},"similarité vectorielle"," ; notre étape 3 est ",[25,1048,1049],{},"index de segments + Tool avec source à la demande","—",[25,1052,1053],{},"pas de couche vectorielle par choix",". Ci-dessous : raisons architecturales, sans nier la valeur du RAG vectoriel.",[54,1056,1058],{"id":1057},"périmètre-pas-pas-de-recherche-mais-pas-de-recherche-vectorielle","Périmètre : pas « pas de recherche », mais « pas de recherche vectorielle »",[82,1060,1061,1070],{},[85,1062,1063,1066,1067,206],{},[25,1064,1065],{},"RAG au sens large :"," chercher → générer → ",[25,1068,1069],{},"nous le faisons",[85,1071,1072,1075,1076,232],{},[25,1073,1074],{},"RAG vectoriel :"," rappel par similarité d'embedding → ",[25,1077,1078],{},"pas dans cette version",[11,1080,1081,1082,1085,1086,1089],{},"Le prétraitement construit un ",[25,1083,1084],{},"index de résumés de segments"," ; le modèle choisit des segments via Tools et reçoit le ",[25,1087,1088],{},"texte source",". La recherche existe sans modèle d'embedding séparé ni maintenance d'index vectoriel.",[34,1091],{},[54,1093,1095],{"id":1094},"raison-1-fournisseurs-llm-personnaliséssurface-dintégration-réduite","Raison 1 : Fournisseurs LLM personnalisés—surface d'intégration réduite",[11,1097,1098,1099,1102,1103,1106],{},"Les utilisateurs peuvent brancher ",[25,1100,1101],{},"leurs propres clés API",", des base URL personnalisées ou ",[25,1104,1105],{},"Ollama local","—le modèle de chat est leur choix ; coût et chemin de données restent maîtrisés.",[11,1108,1109],{},"Le RAG vectoriel typique élargit l'intégration :",[82,1111,1112,1123,1126],{},[85,1113,1114,1115,1118,1119,1122],{},"Outre le ",[25,1116,1117],{},"modèle de chat",", il faut en général un ",[25,1120,1121],{},"modèle d'embedding"," (autre nom, parfois autre endpoint) ;",[85,1124,1125],{},"Ollama local nécessite un modèle d'embedding séparé plus compatibilité dimension/API ;",[85,1127,1128,1129,1132],{},"Plus de modes de défaillance : chat OK mais ",[25,1130,1131],{},"recherche vide","—embedding, index ou dimension ; debug plus difficile qu'un seul fournisseur de bout en bout.",[11,1134,1135,1136,1139,1140,1143],{},"Ici, ",[25,1137,1138],{},"choix de segments et réponse partagent une config fournisseur","—pas de « chat sur A, index sur B ». Pour des apps ",[25,1141,1142],{},"LLM branchables",", cela compte souvent plus que quelques points de rappel.",[11,1145,1146],{},[14,1147],{"alt":1148,"src":1149},"Fournisseurs IA personnalisés","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[34,1151],{},[54,1153,1155],{"id":1154},"raison-2-les-embeddings-lient-lindexchanger-de-fournisseur-coûte-cher","Raison 2 : Les embeddings lient l'index—changer de fournisseur coûte cher",[11,1157,1158,1159,1162,1163,1166,1167,1170],{},"En RAG vectoriel, ",[25,1160,1161],{},"les vecteurs ne sont pas un format intermédiaire universel","—ce sont des coordonnées sous un modèle d'embedding. Index avec A, requête avec B : la similarité est en général ",[25,1164,1165],{},"incomparable","—souvent ",[25,1168,1169],{},"ré-embedding complet",", et les dimensions (768 / 1024 / 1536 …) verrouillent le schéma de stockage.",[11,1172,1173,1174,1177,1178,1181],{},"L'étape 3 persiste ",[25,1175,1176],{},"résumés structurés + spans de caractères",", pas de vecteurs ; changer de modèle de chat ",[25,1179,1180],{},"ne reconstruit pas l'index"," ; la chaîne de preuve (positions source) reste—aligné avec « tester différents LLM à tout moment ».",[34,1183],{},[54,1185,1187],{"id":1186},"raison-3-le-routage-structuré-suffit-souvent-pour-les-longs-documents-avec-toc","Raison 3 : Le routage structuré suffit souvent pour les longs documents avec TOC",[11,1189,1190,1191,1194,1195,1198,1199,1202,1203,1208],{},"E-books et PDF ont en général une ",[25,1192,1193],{},"structure de chapitres"," ; le prétraitement fournit ",[25,1196,1197],{},"titres de segment + résumés",". Pour « que dit le chapitre X » ou « comment le livre définit Y », choisir des segments dans le catalogue puis ",[25,1200,1201],{},"tirer la source"," fonctionne bien en pratique ; le Tool renvoie la ",[25,1204,1205,1206],{},"source avec ",[154,1207,838],{},", le zéro hallucination reste ancré sur les spans de caractères.",[11,1210,1211,1212,1215,1216,1219],{},"Les vecteurs aident pour la sémantique floue, le multilingue, les correspondances littérales longues ; pour des lecteurs ",[25,1213,1214],{},"TOC + prétraitement + forte traçabilité",", investir dans ",[25,1217,1218],{},"Tool + retour source + règles de citation"," a souvent un meilleur ROI.",[34,1221],{},[54,1223,1225],{"id":1224},"avenir-rappel-hybride-pas-une-refonte","Avenir : Rappel hybride, pas une refonte",[11,1227,1228,1229,1232,1233,1236,1237,1240,1241,1244],{},"Nous pourrions ajouter un ",[25,1230,1231],{},"rappel vectoriel grossier"," (embedding uniquement pour Top-N chapitres candidats), en terminant toujours par ",[25,1234,1235],{},"choix de segment → source → trace cliquable","—règles zéro hallucination inchangées. Si ajouté : embedding ",[25,1238,1239],{},"optionnel",", invites explicites de ",[25,1242,1243],{},"ré-indexation"," au changement de modèle—éviter un mauvais rappel silencieux.",[11,1246,1247,1248],{},"D'ici là : ",[25,1249,1250],{},"toute API chat compatible OpenAI fonctionne ; changer de modèle de chat ne reconstruit pas l'index local.",[34,1252],{},[37,1254,1256],{"id":1255},"x-synthèse","X. Synthèse",[281,1258,1259,1272],{},[284,1260,1261],{},[287,1262,1263,1266,1269],{},[290,1264,1265],{},"Étape",[290,1267,1268],{},"Méthode",[290,1270,1271],{},"Rôle",[303,1273,1274,1285,1298,1311,1322,1333],{},[287,1275,1276,1279,1282],{},[308,1277,1278],{},"Prétraitement",[308,1280,1281],{},"Découpage TOC/longueur + cache de segments",[308,1283,1284],{},"Longs ouvrages consultables et localisables",[287,1286,1287,1290,1295],{},[308,1288,1289],{},"Tags de position",[308,1291,1292,1294],{},[154,1293,156],{}," dans la source",[308,1296,1297],{},"Provenance analysable par machine",[287,1299,1300,1303,1308],{},[308,1301,1302],{},"Tool",[308,1304,1305,1306],{},"Segments / résumés livre entier par question, retour ",[25,1307,322],{},[308,1309,1310],{},"Forcer les preuves avant réponse",[287,1312,1313,1316,1319],{},[308,1314,1315],{},"System prompt",[308,1317,1318],{},"Livre d'abord, pas de faux tags, dire quand absent",[308,1320,1321],{},"Contraindre la génération",[287,1323,1324,1327,1330],{},[308,1325,1326],{},"Frontend",[308,1328,1329],{},"Note → aperçu → saut et surlignage",[308,1331,1332],{},"L'utilisateur vérifie les preuves",[287,1334,1335,1338,1341],{},[308,1336,1337],{},"Pas de recherche vectorielle",[308,1339,1340],{},"Un fournisseur ; changer de modèle chat sans ré-index",[308,1342,1343],{},"Coût d'intégration et migration réduit",[11,1345,1346,1347,1350],{},"« Zéro hallucination » ne signifie pas que le modèle ne se trompe jamais—c'est que ",[25,1348,1349],{},"l'ingénierie verrouille la sortie sur une chaîne de preuves"," : pas de recherche → ne pas feindre du contenu livre ; avec recherche → positions source vérifiables.",[11,1352,1353,1354,1357,1358,1361],{},"Si vous développez la lecture IA ou le Q&A documentaire, nous espérons que le chemin ",[25,1355,1356],{},"texte intégral → phrases clés → Tool-first à la demande",", plus ",[25,1359,1360],{},"tags de position inline + retour source",", soit une implémentation de référence utile.",[19,1363,1364],{},[11,1365,1366,1367,1372,1373,232],{},"Ce sont des retours d'expérience du lecteur IA ",[243,1368,1371],{"href":1369,"rel":1370},"https://reader.linghuxiong.com",[247],"Foxycape","—à titre indicatif uniquement. Essayez le lecteur sur la ",[243,1374,1376],{"href":1375},"/fr-fr#download","page de téléchargement",{"title":617,"searchDepth":1378,"depth":1378,"links":1379},2,[1380,1386,1387,1388,1389,1393,1400,1404,1405,1412],{"id":39,"depth":1378,"text":40,"children":1381},[1382,1384,1385],{"id":56,"depth":1383,"text":57},3,{"id":138,"depth":1383,"text":139},{"id":235,"depth":1383,"text":236},{"id":425,"depth":1378,"text":426},{"id":486,"depth":1378,"text":487},{"id":501,"depth":1378,"text":502},{"id":631,"depth":1378,"text":632,"children":1390},[1391,1392],{"id":659,"depth":1383,"text":660},{"id":685,"depth":1383,"text":686},{"id":761,"depth":1378,"text":762,"children":1394},[1395,1397,1399],{"id":780,"depth":1383,"text":1396},"6.1 get_related_segment_summaries — Recherche ciblée de segments",{"id":842,"depth":1383,"text":1398},"6.2 get_full_book_segment_summaries — Vue d'ensemble du livre",{"id":863,"depth":1383,"text":864},{"id":894,"depth":1378,"text":895,"children":1401},[1402,1403],{"id":904,"depth":1383,"text":905},{"id":915,"depth":1383,"text":916},{"id":951,"depth":1378,"text":952},{"id":1027,"depth":1378,"text":1028,"children":1406},[1407,1408,1409,1410,1411],{"id":1057,"depth":1383,"text":1058},{"id":1094,"depth":1383,"text":1095},{"id":1154,"depth":1383,"text":1155},{"id":1186,"depth":1383,"text":1187},{"id":1224,"depth":1383,"text":1225},{"id":1255,"depth":1378,"text":1256},null,"2026-06-03","Notes d'ingénierie sur le Q&R sans hallucination dans un lecteur IA—réponses ancrées dans le livre ouvert, avec citations en un clic vers les passages exacts.",false,"md",{},true,"/fr-fr/blog/zero-hallucination-qa",{"title":6,"description":1415},"fr-fr/blog/zero-hallucination-qa",[1424,1425,1426],"lecteur","IA","ingénierie","zero-hallucination-qa","gsgsYarvWXVdqLHduv9kAQG_s3pGvEdA7JdLzzVfdek",1780489852825]