[{"data":1,"prerenderedAt":2339},["ShallowReactive",2],{"blog-article-/fr-fr/blog/zero-hallucination-qa":3,"blog-list-fr-fr":1428},{"id":4,"title":5,"body":6,"config":1412,"date":1413,"description":1414,"draft":1415,"extension":1416,"image":1412,"meta":1417,"navigation":1418,"path":1419,"seo":1420,"stem":1421,"tags":1422,"toolbar":1412,"translationKey":1426,"updated":1413,"__hash__":1427},"blog/fr-fr/blog/zero-hallucination-qa.md","Comment j'ai implémenté le Q&R sans hallucination dans notre lecteur",{"type":7,"value":8,"toc":1376},"minimark",[9,17,32,35,40,47,52,57,75,80,93,98,132,135,139,157,164,168,183,188,225,232,236,249,274,279,396,414,420,422,426,433,448,455,475,481,483,487,490,496,498,502,525,534,595,598,609,619,626,628,632,643,649,656,660,667,675,682,686,696,739,750,756,758,762,777,785,791,794,829,839,847,853,860,864,872,878,889,891,895,901,905,912,916,939,946,948,952,958,1016,1022,1024,1028,1035,1054,1058,1078,1089,1091,1095,1106,1109,1132,1143,1149,1151,1155,1170,1181,1183,1187,1208,1219,1221,1225,1244,1250,1252,1256,1343,1350,1361],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"Couverture : Q&R sans hallucination","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,19,20],"blockquote",{},[10,21,22,23,27,28,31],{},"Cet article décrit l'implémentation technique du ",[24,25,26],"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 ",[24,29,30],{},"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.",[33,34],"hr",{},[36,37,39],"h2",{"id":38},"i-évolution-en-trois-étapes","I. Évolution en trois étapes",[10,41,42,43,46],{},"Le Q&R sans hallucination n'a pas été conçu parfaitement dès le départ. Il a évolué sous la tension entre ",[24,44,45],{},"coût, latence et précision",". Voici les trois étapes dans l'ordre chronologique—pour comprendre pourquoi l'architecture actuelle a cette forme.",[48,49],"mermaid",{":config":50,"code":51},"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",[53,54,56],"h3",{"id":55},"é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)",[10,58,59,62,63,66,67,70,71,74],{},[24,60,61],{},"Approche :"," Quand l'utilisateur ouvre un livre et pose une question, placer ",[24,64,65],{},"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 ",[24,68,69],{},"400 000 caractères",", ",[24,72,73],{},"troncature brutale","—seul le début est conservé ; les chapitres suivants sont invisibles pour le modèle.",[10,76,77],{},[24,78,79],{},"Avantages :",[81,82,83,87,90],"ul",{},[84,85,86],"li",{},"Coût d'implémentation très faible, presque pas de prétraitement ;",[84,88,89],{},"Résultats corrects sur les livres courts et documents simples—le modèle a vraiment « vu tout le livre » ;",[84,91,92],{},"UX simple : poser une question, obtenir une réponse, sans état « veuillez patienter pendant l'analyse ».",[10,94,95],{},[24,96,97],{},"Inconvénients (rapidement inacceptables) :",[81,99,100,106,112,122],{},[84,101,102,105],{},[24,103,104],{},"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 ;",[84,107,108,111],{},[24,109,110],{},"Coût token élevé :"," Vous payez l'intégralité du livre en entrée à chaque question ;",[84,113,114,117,118,121],{},[24,115,116],{},"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 ",[24,119,120],{},"n'indique souvent pas clairement"," la troncature ;",[84,123,124,127,128,131],{},[24,125,126],{},"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 ",[24,129,130],{},"résumés plausibles sans fondement","—exactement ce qu'il faut éviter en lecture.",[10,133,134],{},"L'étape 1 convient à un MVP, pas à une solution produit.",[53,136,138],{"id":137},"é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)",[10,140,141,143,144,147,148,151,152,156],{},[24,142,61],{}," Avant le Q&R (ou à la première ouverture), faire tourner un ",[24,145,146],{},"modèle moins cher"," sur le corps : découpage par chapitre spine (ou par blocs), extraction de ",[24,149,150],{},"phrases clés",", conservation des tags de position comme ",[153,154,155],"code",{},"[fFichier-début-fin]",", puis concaténation en un contexte plus court pour le Q&R ultérieur.",[10,158,159,160,163],{},"Pipeline typique : ",[24,161,162],{},"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.",[10,165,166],{},[24,167,79],{},[81,169,170,177,180],{},[84,171,172,173,176],{},"Chaque question envoie ",[24,174,175],{},"beaucoup moins de texte"," ; la consommation de tokens par requête baisse par rapport à l'étape 1 ;",[84,178,179],{},"Le prétraitement peut être mis en cache ; pas de ré-extraction par question sur le même livre ;",[84,181,182],{},"Les tags de position posent les bases des citations.",[10,184,185],{},[24,186,187],{},"Inconvénients (encore insuffisant sur les longs ouvrages) :",[81,189,190,196,206,215],{},[84,191,192,195],{},[24,193,194],{},"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 » ;",[84,197,198,201,202,205],{},[24,199,200],{},"Contexte encore volumineux sur les gros ouvrages :"," Même les paquets de phrases clés restent conséquents—latence et coût ",[24,203,204],{},"atténués, pas résolus"," ;",[84,207,208,211,212,205],{},[24,209,210],{},"Double erreur LLM :"," L'extraction peut omettre ; le Q&R peut mal lire les extraits—les erreurs ",[24,213,214],{},"s'accumulent",[84,216,217,220,221,224],{},[24,218,219],{},"Contexte statique :"," Que la question porte sur un chapitre ou la structure globale, le modèle reçoit toujours ",[24,222,223],{},"le même blob pré-extrait","—pas de rétrécissement dynamique selon la question.",[10,226,227,228,231],{},"La leçon : le problème n'est pas « de compresser ou non », mais ",[24,229,230],{},"« si la compression est à la demande et si l'on peut revenir au texte source »",".",[53,233,235],{"id":234},"é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)",[10,237,238,240,241,248],{},[24,239,61],{}," Inspiré de ",[242,243,247],"a",{"href":244,"rel":245},"https://github.com/VectifyAI/PageIndex",[246],"nofollow","PageIndex",". Par rapport à l'étape 2, trois changements majeurs :",[250,251,252,258,268],"ol",{},[84,253,254,257],{},[24,255,256],{},"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 ;",[84,259,260,263,264,267],{},[24,261,262],{},"Chaque question utilise le Tool Calling pour chercher à la demande",", puis ",[24,265,266],{},"récupère le texte source avec tags de position"," pour répondre ;",[84,269,270,273],{},[24,271,272],{},"System prompt + frontend"," imposent le format de citation et permettent clic → saut → surlignage dans le lecteur.",[10,275,276],{},[24,277,278],{},"Comparaison des trois étapes :",[280,281,282,301],"table",{},[283,284,285],"thead",{},[286,287,288,292,295,298],"tr",{},[289,290,291],"th",{},"Dimension",[289,293,294],{},"Étape 1 (texte intégral)",[289,296,297],{},"Étape 2 (phrases clés)",[289,299,300],{},"Étape 3 (actuel)",[302,303,304,323,337,351,365,382],"tbody",{},[286,305,306,310,313,316],{},[307,308,309],"td",{},"Contexte par question",[307,311,312],{},"Livre entier (ou première moitié tronquée)",[307,314,315],{},"Phrases clés pré-extraites",[307,317,318,319,322],{},"Uniquement extraits de ",[24,320,321],{},"source"," pertinents",[286,324,325,328,331,334],{},[307,326,327],{},"Précision sur longs ouvrages",[307,329,330],{},"Effondrement au-delà de ~400k",[307,332,333],{},"Dépend de l'extraction ; perte de détail",[307,335,336],{},"Recherche par TOC/span ; pas de troncature brutale du livre entier",[286,338,339,342,345,348],{},[307,340,341],{},"Vitesse de réponse",[307,343,344],{},"Lente",[307,346,347],{},"Un peu mieux ; longs ouvrages encore lents",[307,349,350],{},"Recherche + contexte court—nettement plus rapide",[286,352,353,356,359,362],{},[307,354,355],{},"Coût token",[307,357,358],{},"Très élevé",[307,360,361],{},"Moyen-élevé",[307,363,364],{},"Prétraitement amorti + paiement à la demande",[286,366,367,370,373,376],{},[307,368,369],{},"Traçabilité",[307,371,372],{},"Faible (citations difficiles)",[307,374,375],{},"Tags présents mais contenu filtré",[307,377,378,379],{},"Notes de bas de page → ",[24,380,381],{},"vrais spans source",[286,383,384,387,390,393],{},[307,385,386],{},"Complexité technique",[307,388,389],{},"Faible",[307,391,392],{},"Moyenne",[307,394,395],{},"Élevée",[10,397,398,401,402,405,406,409,410,413],{},[24,399,400],{},"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 ",[24,403,404],{},"« avant de répondre, obtenir des preuves source pour la question »",". Les étapes 1–2 luttaient sur la ",[24,407,408],{},"taille du contexte"," ; l'étape 3 découpe le pipeline en ",[24,411,412],{},"index (prétraitement) → recherche (Tool) → preuve (source) → réponse (génération contrainte)","—équilibre précision, coût et traçabilité.",[10,415,416,417,231],{},"Ci-dessous le détail de ",[24,418,419],{},"l'étape 3",[33,421],{},[36,423,425],{"id":424},"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",[10,427,428,429,432],{},"Les utilisateurs tolèrent parfois des erreurs dans un chatbot général. En ",[24,430,431],{},"Q&R livre",", le prix est plus élevé :",[81,434,435,442,445],{},[84,436,437,438,441],{},"Ils demandent ce que ",[24,439,440],{},"ce livre"," dit—not ce qui vit dans la mémoire paramétrique du modèle ;",[84,443,444],{},"Une « opinion du livre » plausible peut induire en erreur notes, citations et partages ;",[84,446,447],{},"Sans sources, pas de vérification—la confiance est difficile à établir.",[10,449,450,451,454],{},"« Zéro hallucination » devient donc trois règles ",[24,452,453],{},"applicables"," :",[250,456,457,463,469],{},[84,458,459,462],{},[24,460,461],{},"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 ;",[84,464,465,468],{},[24,466,467],{},"Les réponses doivent être traçables :"," Les affirmations clés portent des tags de position que l'UI peut parser et atteindre ;",[84,470,471,474],{},[24,472,473],{},"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 ».",[10,476,477,478,480],{},"La suite suit le flux de données de ",[24,479,419],{}," et la mise en œuvre de ces règles.",[33,482],{},[36,484,486],{"id":485},"iii-architecture-prétraitement-tool-génération-contrainte-citations-cliquables","III. Architecture : Prétraitement → Tool → Génération contrainte → Citations cliquables",[48,488],{":config":50,"code":489},"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",[10,491,492,493],{},"Idée centrale : ",[24,494,495],{},"ne pas laisser le modèle « répondre de mémoire »—l'obliger à « rassembler des preuves, répondre, marquer les sources ».",[33,497],{},[36,499,501],{"id":500},"iv-prétraitement-transformer-le-livre-en-index-de-segments-consultable","IV. Prétraitement : Transformer le livre en index de segments consultable",[10,503,504,505,508,509,512,513,516,517,520,521,524],{},"Si chaque question utilisait encore le contexte ",[24,506,507],{},"é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 ",[24,510,511],{},"job de résumé de segments","—découpage par ",[24,514,515],{},"TOC"," ou ",[24,518,519],{},"longueur de texte"," en ",[153,522,523],{},"Segment","s, résumé de chacun, persistance en IndexedDB locale.",[10,526,527,528,530,531,454],{},"Chaque ",[153,529,523],{}," contient le résumé plus la ",[24,532,533],{},"position physique dans le corps",[280,535,536,546],{},[283,537,538],{},[286,539,540,543],{},[289,541,542],{},"Champ",[289,544,545],{},"Signification",[302,547,548,562,575,585],{},[286,549,550,559],{},[307,551,552,555,556],{},[153,553,554],{},"startFileIndex"," / ",[153,557,558],{},"endFileIndex",[307,560,561],{},"Index de fichier spine (PDF : un fichier par page)",[286,563,564,572],{},[307,565,566,555,569],{},[153,567,568],{},"startOffset",[153,570,571],{},"endOffset",[307,573,574],{},"Début/fin en caractères",[286,576,577,582],{},[307,578,579],{},[153,580,581],{},"sequence",[307,583,584],{},"Ordre de lecture linéaire",[286,586,587,592],{},[307,588,589],{},[153,590,591],{},"title",[307,593,594],{},"Titre TOC",[10,596,597],{},"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.",[10,599,600,601,604,605,608],{},"Le system prompt de résumé exige de ",[24,602,603],{},"conserver les tags de position inline"," (",[153,606,607],{},"[fNombre-Nombre-Nombre]",") pour que la source récupérée par Tool s'aligne sur les offsets spine. Contrainte centrale :",[610,611,617],"pre",{"className":612,"code":614,"language":615,"meta":616},[613],"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","",[153,618,614],{"__ignoreMap":616},[10,620,621,622,625],{},"Après prétraitement, le Q&R dépend d'un ",[24,623,624],{},"index de segments structuré",", pas du contexte livre entier—prérequis technique du zéro hallucination sur longs ouvrages.",[33,627],{},[36,629,631],{"id":630},"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",[10,633,634,635,638,639,642],{},"Le zéro hallucination exige du contenu source ",[24,636,637],{},"et"," une ",[24,640,641],{},"provenance"," analysable par machine et atteignable dans l'UI. Nous utilisons des tags inline :",[610,644,647],{"className":645,"code":646,"language":615},[613],"[f{fileIndex}-{startChar}-{endChar}]\n",[153,648,646],{"__ignoreMap":616},[10,650,651,652,655],{},"Exemple : ",[153,653,654],{},"[f5-123-165]"," = fichier spine 5 (base 0), caractères 123–165.",[53,657,659],{"id":658},"_51-comment-les-tags-sont-écrits-dans-le-corps","5.1 Comment les tags sont écrits dans le corps",[10,661,662,663,666],{},"La couche d'extraction ajoute ",[153,664,665],{},"[f{fileIndex}-{start}-{end}]"," en fin de segment :",[610,668,673],{"className":669,"code":671,"language":672,"meta":616},[670],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[153,674,671],{"__ignoreMap":616},[10,676,677,678,681],{},"Résumés de prétraitement ou extraits Tool : les positions s'alignent sur les ",[24,679,680],{},"offsets caractères spine","—pas des numéros de page estimés par le modèle.",[53,683,685],{"id":684},"_52-contraintes-sur-la-sortie-du-modèle","5.2 Contraintes sur la sortie du modèle",[10,687,688,689,695],{},"Le system prompt inclut ",[24,690,691],{},[692,693,694],"span",{},"Position Citation Rules","—cinq points essentiels :",[250,697,698,708,718,724,733],{},[84,699,700,703,704,707],{},[24,701,702],{},"Format standard :"," Doit utiliser ",[153,705,706],{},"[f_fileIndex-startChar-endChar]"," ; les trois parties numériques obligatoires ;",[84,709,710,713,714,717],{},[24,711,712],{},"Copier uniquement depuis les sources actuelles :"," Notes ",[24,715,716],{},"verbatim"," des messages system/user ou retours Tool de ce tour ;",[84,719,720,723],{},[24,721,722],{},"Pas de fabrication :"," Ne pas calculer, modifier ou inventer des positions ;",[84,725,726,729,730,205],{},[24,727,728],{},"Préférer l'omission :"," Pas de tag valide dans le contexte → répondre normalement—",[24,731,732],{},"ne pas émettre de tags de position",[84,734,735,738],{},[24,736,737],{},"Inline avec les affirmations :"," Tags après la phrase concernée ; pas de listes de citations en fin de réponse.",[10,740,741,742,745,746,749],{},"L'UI filtre aussi les tags ",[24,743,744],{},"bipartites"," invalides occasionnels (ex. ",[153,747,748],{},"[f1-293]",") avant rendu.",[10,751,752],{},[13,753],{"alt":754,"src":755},"Popup de traçage des citations","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[33,757],{},[36,759,761],{"id":760},"vi-tool-calling-dabord-chercher-ensuite-répondre","VI. Tool Calling : D'abord chercher, ensuite répondre",[10,763,764,765,768,769,772,773,776],{},"Quand le chat est lié à un livre (",[153,766,767],{},"resourceId"," présent, ",[153,770,771],{},"chatType === 'chat'","), nous enregistrons deux Tools avec executors avant chaque génération—boucle ",[24,774,775],{},"function calling"," compatible OpenAI.",[53,778,780,781,784],{"id":779},"_61-get_related_segment_summaries-recherche-ciblée-de-segments","6.1 ",[153,782,783],{},"get_related_segment_summaries"," — Recherche ciblée de segments",[10,786,787,788,231],{},"Pour : concepts, personnages, intrigue, détails de chapitre—",[24,789,790],{},"intention de recherche claire",[10,792,793],{},"Flux :",[250,795,796,803,809,812,822],{},[84,797,798,799,802],{},"Le modèle reformule la question en ",[24,800,801],{},"termes susceptibles d'apparaître dans le livre"," (« Optimize Search Queries » dans le system prompt) ;",[84,804,805,806,205],{},"Appel Tool avec ",[153,807,808],{},"question",[84,810,811],{},"Grouper toutes les résumés de segments par budget token (~30k tokens par lot, max 5 lots) ;",[84,813,814,815,818,819,205],{},"Par lot : requête LLM séparée choisit les ID pertinents (max 5) dans ",[153,816,817],{},"{ id, title, summary }",", JSON du type ",[153,820,821],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[84,823,824,825,828],{},"Pour les segments choisis, tirer le ",[24,826,827],{},"texte source tagué"," du spine—not les résumés—comme résultat Tool.",[10,830,831,834,835,838],{},[24,832,833],{},"Design clé : le Tool renvoie la source, pas les résumés."," Le modèle répond à partir de vrais paragraphes avec ",[153,836,837],{},"[f…]"," inline, évitant la dérive « résumé → re-résumé ».",[53,840,842,843,846],{"id":841},"_62-get_full_book_segment_summaries-vue-densemble-du-livre","6.2 ",[153,844,845],{},"get_full_book_segment_summaries"," — Vue d'ensemble du livre",[10,848,849,850,231],{},"Pour : « résumer le livre », « critiquer ce livre », « structure/thèmes globaux »—",[24,851,852],{},"vue globale",[10,854,855,856,859],{},"Concaténer tous les champs ",[153,857,858],{},"summary"," des segments dans l'ordre de lecture—éviter de manquer des chapitres clés par pertinence par morceau seule.",[53,861,863],{"id":862},"_63-system-prompt-livre-dabord-outils-dabord","6.3 System prompt : Livre d'abord, outils d'abord",[10,865,866,867,454],{},"Avec un livre lié, s'applique ",[24,868,869],{},[692,870,871],{},"Core Principles for Reading Assistant",[610,873,876],{"className":874,"code":875,"language":615},[613],"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",[153,877,875],{"__ignoreMap":616},[10,879,880,881,884,885,888],{},"La génération exécute la boucle Tool : ",[153,882,883],{},"tool_calls"," → exécuter → ajouter ",[153,886,887],{},"role: tool"," → continuer jusqu'au texte final. Avec tools activés, le canal thinking est coupé pour éviter les conflits de protocole.",[33,890],{},[36,892,894],{"id":893},"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",[10,896,897,898,900],{},"La sortie ",[153,899,654],{}," du modèle n'est pas affichée brute ; la couche de rendu en fait des citations cliquables.",[53,902,904],{"id":903},"_71-rendu-des-notes","7.1 Rendu des notes",[10,906,907,908,911],{},"Normaliser les tags en liens Markdown comme ",[153,909,910],{},"[1]([f5-123-165])",", afficher en notes numérotées ; dédupliquer la même position.",[53,913,915],{"id":914},"_72-interaction-au-clic","7.2 Interaction au clic",[250,917,918,927,933],{},[84,919,920,923,924,926],{},[24,921,922],{},"Premier clic :"," Parser ",[153,925,837],{}," → fileIndex + offsets → extraire texte spine → aperçu (titre TOC optionnel) ;",[84,928,929,932],{},[24,930,931],{},"Même note à nouveau :"," Fermer l'aperçu ;",[84,934,935,938],{},[24,936,937],{},"Confirmer le saut :"," Ouvrir la vue lecture, surligner la plage de caractères.",[10,940,941,942,945],{},"Du tag copié du modèle au texte source visible par l'utilisateur, la chaîne ",[24,943,944],{},"ne repasse jamais par un autre appel LLM","—déterministe et reproductible.",[33,947],{},[36,949,951],{"id":950},"viii-cas-limites-et-dégradation-honnête","VIII. Cas limites et dégradation honnête",[10,953,954,955,454],{},"Zéro hallucination ≠ « toujours une réponse »—c'est ",[24,956,957],{},"pas de preuve, pas d'invention",[280,959,960,970],{},[283,961,962],{},[286,963,964,967],{},[289,965,966],{},"Scénario",[289,968,969],{},"Comportement",[302,971,972,980,992,1000,1008],{},[286,973,974,977],{},[307,975,976],{},"Résumés de segments pas prêts",[307,978,979],{},"Extraire d'abord le texte intégral et résumer",[286,981,982,985],{},[307,983,984],{},"Tool ne trouve rien",[307,986,987,988,991],{},"Retourner ",[153,989,990],{},"(No relevant segment excerpts found…)"," ; le modèle doit dire « pas dans le livre »",[286,993,994,997],{},[307,995,996],{},"Tags bipartites invalides du modèle",[307,998,999],{},"Filtrage frontend ; pas de notes cassées",[286,1001,1002,1005],{},[307,1003,1004],{},"Discussion informelle",[307,1006,1007],{},"Le system prompt autorise les connaissances générales hors livre",[286,1009,1010,1013],{},[307,1011,1012],{},"Exporter le chat",[307,1014,1015],{},"Les notes peuvent devenir des deep links lecteur pour partage/archivage",[10,1017,1018],{},[13,1019],{"alt":1020,"src":1021},"Export de conversation","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[33,1023],{},[36,1025,1027],{"id":1026},"ix-compromis-de-conception-pourquoi-pas-le-rag-vectoriel","IX. Compromis de conception : Pourquoi pas le « RAG vectoriel » ?",[10,1029,1030,1031,1034],{},"Les pairs en Q&A documentaire demandent souvent : si vous faites de la génération augmentée par recherche, pourquoi pas ",[24,1032,1033],{},"Embedding + base vectorielle Top-K"," ?",[10,1036,1037,1038,1041,1042,1045,1046,1049,1050,1053],{},"Nous ",[24,1039,1040],{},"faisons du RAG","—chercher avant de générer. La différence : « RAG » dans le discours commun implique souvent la ",[24,1043,1044],{},"similarité vectorielle"," ; notre étape 3 est ",[24,1047,1048],{},"index de segments + Tool avec source à la demande","—",[24,1051,1052],{},"pas de couche vectorielle par choix",". Ci-dessous : raisons architecturales, sans nier la valeur du RAG vectoriel.",[53,1055,1057],{"id":1056},"périmètre-pas-pas-de-recherche-mais-pas-de-recherche-vectorielle","Périmètre : pas « pas de recherche », mais « pas de recherche vectorielle »",[81,1059,1060,1069],{},[84,1061,1062,1065,1066,205],{},[24,1063,1064],{},"RAG au sens large :"," chercher → générer → ",[24,1067,1068],{},"nous le faisons",[84,1070,1071,1074,1075,231],{},[24,1072,1073],{},"RAG vectoriel :"," rappel par similarité d'embedding → ",[24,1076,1077],{},"pas dans cette version",[10,1079,1080,1081,1084,1085,1088],{},"Le prétraitement construit un ",[24,1082,1083],{},"index de résumés de segments"," ; le modèle choisit des segments via Tools et reçoit le ",[24,1086,1087],{},"texte source",". La recherche existe sans modèle d'embedding séparé ni maintenance d'index vectoriel.",[33,1090],{},[53,1092,1094],{"id":1093},"raison-1-fournisseurs-llm-personnaliséssurface-dintégration-réduite","Raison 1 : Fournisseurs LLM personnalisés—surface d'intégration réduite",[10,1096,1097,1098,1101,1102,1105],{},"Les utilisateurs peuvent brancher ",[24,1099,1100],{},"leurs propres clés API",", des base URL personnalisées ou ",[24,1103,1104],{},"Ollama local","—le modèle de chat est leur choix ; coût et chemin de données restent maîtrisés.",[10,1107,1108],{},"Le RAG vectoriel typique élargit l'intégration :",[81,1110,1111,1122,1125],{},[84,1112,1113,1114,1117,1118,1121],{},"Outre le ",[24,1115,1116],{},"modèle de chat",", il faut en général un ",[24,1119,1120],{},"modèle d'embedding"," (autre nom, parfois autre endpoint) ;",[84,1123,1124],{},"Ollama local nécessite un modèle d'embedding séparé plus compatibilité dimension/API ;",[84,1126,1127,1128,1131],{},"Plus de modes de défaillance : chat OK mais ",[24,1129,1130],{},"recherche vide","—embedding, index ou dimension ; debug plus difficile qu'un seul fournisseur de bout en bout.",[10,1133,1134,1135,1138,1139,1142],{},"Ici, ",[24,1136,1137],{},"choix de segments et réponse partagent une config fournisseur","—pas de « chat sur A, index sur B ». Pour des apps ",[24,1140,1141],{},"LLM branchables",", cela compte souvent plus que quelques points de rappel.",[10,1144,1145],{},[13,1146],{"alt":1147,"src":1148},"Fournisseurs IA personnalisés","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[33,1150],{},[53,1152,1154],{"id":1153},"raison-2-les-embeddings-lient-lindexchanger-de-fournisseur-coûte-cher","Raison 2 : Les embeddings lient l'index—changer de fournisseur coûte cher",[10,1156,1157,1158,1161,1162,1165,1166,1169],{},"En RAG vectoriel, ",[24,1159,1160],{},"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 ",[24,1163,1164],{},"incomparable","—souvent ",[24,1167,1168],{},"ré-embedding complet",", et les dimensions (768 / 1024 / 1536 …) verrouillent le schéma de stockage.",[10,1171,1172,1173,1176,1177,1180],{},"L'étape 3 persiste ",[24,1174,1175],{},"résumés structurés + spans de caractères",", pas de vecteurs ; changer de modèle de chat ",[24,1178,1179],{},"ne reconstruit pas l'index"," ; la chaîne de preuve (positions source) reste—aligné avec « tester différents LLM à tout moment ».",[33,1182],{},[53,1184,1186],{"id":1185},"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",[10,1188,1189,1190,1193,1194,1197,1198,1201,1202,1207],{},"E-books et PDF ont en général une ",[24,1191,1192],{},"structure de chapitres"," ; le prétraitement fournit ",[24,1195,1196],{},"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 ",[24,1199,1200],{},"tirer la source"," fonctionne bien en pratique ; le Tool renvoie la ",[24,1203,1204,1205],{},"source avec ",[153,1206,837],{},", le zéro hallucination reste ancré sur les spans de caractères.",[10,1209,1210,1211,1214,1215,1218],{},"Les vecteurs aident pour la sémantique floue, le multilingue, les correspondances littérales longues ; pour des lecteurs ",[24,1212,1213],{},"TOC + prétraitement + forte traçabilité",", investir dans ",[24,1216,1217],{},"Tool + retour source + règles de citation"," a souvent un meilleur ROI.",[33,1220],{},[53,1222,1224],{"id":1223},"avenir-rappel-hybride-pas-une-refonte","Avenir : Rappel hybride, pas une refonte",[10,1226,1227,1228,1231,1232,1235,1236,1239,1240,1243],{},"Nous pourrions ajouter un ",[24,1229,1230],{},"rappel vectoriel grossier"," (embedding uniquement pour Top-N chapitres candidats), en terminant toujours par ",[24,1233,1234],{},"choix de segment → source → trace cliquable","—règles zéro hallucination inchangées. Si ajouté : embedding ",[24,1237,1238],{},"optionnel",", invites explicites de ",[24,1241,1242],{},"ré-indexation"," au changement de modèle—éviter un mauvais rappel silencieux.",[10,1245,1246,1247],{},"D'ici là : ",[24,1248,1249],{},"toute API chat compatible OpenAI fonctionne ; changer de modèle de chat ne reconstruit pas l'index local.",[33,1251],{},[36,1253,1255],{"id":1254},"x-synthèse","X. Synthèse",[280,1257,1258,1271],{},[283,1259,1260],{},[286,1261,1262,1265,1268],{},[289,1263,1264],{},"Étape",[289,1266,1267],{},"Méthode",[289,1269,1270],{},"Rôle",[302,1272,1273,1284,1297,1310,1321,1332],{},[286,1274,1275,1278,1281],{},[307,1276,1277],{},"Prétraitement",[307,1279,1280],{},"Découpage TOC/longueur + cache de segments",[307,1282,1283],{},"Longs ouvrages consultables et localisables",[286,1285,1286,1289,1294],{},[307,1287,1288],{},"Tags de position",[307,1290,1291,1293],{},[153,1292,155],{}," dans la source",[307,1295,1296],{},"Provenance analysable par machine",[286,1298,1299,1302,1307],{},[307,1300,1301],{},"Tool",[307,1303,1304,1305],{},"Segments / résumés livre entier par question, retour ",[24,1306,321],{},[307,1308,1309],{},"Forcer les preuves avant réponse",[286,1311,1312,1315,1318],{},[307,1313,1314],{},"System prompt",[307,1316,1317],{},"Livre d'abord, pas de faux tags, dire quand absent",[307,1319,1320],{},"Contraindre la génération",[286,1322,1323,1326,1329],{},[307,1324,1325],{},"Frontend",[307,1327,1328],{},"Note → aperçu → saut et surlignage",[307,1330,1331],{},"L'utilisateur vérifie les preuves",[286,1333,1334,1337,1340],{},[307,1335,1336],{},"Pas de recherche vectorielle",[307,1338,1339],{},"Un fournisseur ; changer de modèle chat sans ré-index",[307,1341,1342],{},"Coût d'intégration et migration réduit",[10,1344,1345,1346,1349],{},"« Zéro hallucination » ne signifie pas que le modèle ne se trompe jamais—c'est que ",[24,1347,1348],{},"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.",[10,1351,1352,1353,1356,1357,1360],{},"Si vous développez la lecture IA ou le Q&A documentaire, nous espérons que le chemin ",[24,1354,1355],{},"texte intégral → phrases clés → Tool-first à la demande",", plus ",[24,1358,1359],{},"tags de position inline + retour source",", soit une implémentation de référence utile.",[18,1362,1363],{},[10,1364,1365,1366,1371,1372,231],{},"Ce sont des retours d'expérience du lecteur IA ",[242,1367,1370],{"href":1368,"rel":1369},"https://reader.linghuxiong.com",[246],"Foxycape","—à titre indicatif uniquement. Essayez le lecteur sur la ",[242,1373,1375],{"href":1374},"/fr-fr#download","page de téléchargement",{"title":616,"searchDepth":1377,"depth":1377,"links":1378},2,[1379,1385,1386,1387,1388,1392,1399,1403,1404,1411],{"id":38,"depth":1377,"text":39,"children":1380},[1381,1383,1384],{"id":55,"depth":1382,"text":56},3,{"id":137,"depth":1382,"text":138},{"id":234,"depth":1382,"text":235},{"id":424,"depth":1377,"text":425},{"id":485,"depth":1377,"text":486},{"id":500,"depth":1377,"text":501},{"id":630,"depth":1377,"text":631,"children":1389},[1390,1391],{"id":658,"depth":1382,"text":659},{"id":684,"depth":1382,"text":685},{"id":760,"depth":1377,"text":761,"children":1393},[1394,1396,1398],{"id":779,"depth":1382,"text":1395},"6.1 get_related_segment_summaries — Recherche ciblée de segments",{"id":841,"depth":1382,"text":1397},"6.2 get_full_book_segment_summaries — Vue d'ensemble du livre",{"id":862,"depth":1382,"text":863},{"id":893,"depth":1377,"text":894,"children":1400},[1401,1402],{"id":903,"depth":1382,"text":904},{"id":914,"depth":1382,"text":915},{"id":950,"depth":1377,"text":951},{"id":1026,"depth":1377,"text":1027,"children":1405},[1406,1407,1408,1409,1410],{"id":1056,"depth":1382,"text":1057},{"id":1093,"depth":1382,"text":1094},{"id":1153,"depth":1382,"text":1154},{"id":1185,"depth":1382,"text":1186},{"id":1223,"depth":1382,"text":1224},{"id":1254,"depth":1377,"text":1255},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":5,"description":1414},"fr-fr/blog/zero-hallucination-qa",[1423,1424,1425],"lecteur","IA","ingénierie","zero-hallucination-qa","gsgsYarvWXVdqLHduv9kAQG_s3pGvEdA7JdLzzVfdek",[1429],{"id":4,"title":5,"body":1430,"config":1412,"date":1413,"description":1414,"draft":1415,"extension":1416,"image":1412,"meta":2336,"navigation":1418,"path":1419,"seo":2337,"stem":1421,"tags":2338,"toolbar":1412,"translationKey":1426,"updated":1413,"__hash__":1427},{"type":7,"value":1431,"toc":2304},[1432,1436,1444,1446,1448,1452,1454,1456,1466,1470,1478,1482,1504,1506,1508,1518,1522,1526,1536,1540,1564,1568,1570,1577,1593,1597,1677,1687,1691,1693,1695,1699,1709,1713,1727,1731,1733,1735,1737,1741,1743,1745,1757,1763,1811,1813,1819,1824,1828,1830,1832,1838,1843,1847,1849,1853,1858,1862,1864,1870,1898,1904,1908,1910,1912,1920,1924,1928,1930,1952,1958,1962,1966,1970,1972,1978,1983,1989,1991,1993,1997,1999,2003,2005,2021,2025,2027,2029,2033,2077,2081,2083,2085,2089,2099,2101,2115,2121,2123,2125,2131,2133,2147,2153,2157,2159,2161,2169,2175,2177,2179,2191,2197,2199,2201,2211,2215,2217,2219,2285,2289,2295],[10,1433,1434],{},[13,1435],{"alt":15,"src":16},[18,1437,1438],{},[10,1439,22,1440,27,1442,31],{},[24,1441,26],{},[24,1443,30],{},[33,1445],{},[36,1447,39],{"id":38},[10,1449,42,1450,46],{},[24,1451,45],{},[48,1453],{":config":50,"code":51},[53,1455,56],{"id":55},[10,1457,1458,62,1460,66,1462,70,1464,74],{},[24,1459,61],{},[24,1461,65],{},[24,1463,69],{},[24,1465,73],{},[10,1467,1468],{},[24,1469,79],{},[81,1471,1472,1474,1476],{},[84,1473,86],{},[84,1475,89],{},[84,1477,92],{},[10,1479,1480],{},[24,1481,97],{},[81,1483,1484,1488,1492,1498],{},[84,1485,1486,105],{},[24,1487,104],{},[84,1489,1490,111],{},[24,1491,110],{},[84,1493,1494,117,1496,121],{},[24,1495,116],{},[24,1497,120],{},[84,1499,1500,127,1502,131],{},[24,1501,126],{},[24,1503,130],{},[10,1505,134],{},[53,1507,138],{"id":137},[10,1509,1510,143,1512,147,1514,151,1516,156],{},[24,1511,61],{},[24,1513,146],{},[24,1515,150],{},[153,1517,155],{},[10,1519,159,1520,163],{},[24,1521,162],{},[10,1523,1524],{},[24,1525,79],{},[81,1527,1528,1532,1534],{},[84,1529,172,1530,176],{},[24,1531,175],{},[84,1533,179],{},[84,1535,182],{},[10,1537,1538],{},[24,1539,187],{},[81,1541,1542,1546,1552,1558],{},[84,1543,1544,195],{},[24,1545,194],{},[84,1547,1548,201,1550,205],{},[24,1549,200],{},[24,1551,204],{},[84,1553,1554,211,1556,205],{},[24,1555,210],{},[24,1557,214],{},[84,1559,1560,220,1562,224],{},[24,1561,219],{},[24,1563,223],{},[10,1565,227,1566,231],{},[24,1567,230],{},[53,1569,235],{"id":234},[10,1571,1572,240,1574,248],{},[24,1573,61],{},[242,1575,247],{"href":244,"rel":1576},[246],[250,1578,1579,1583,1589],{},[84,1580,1581,257],{},[24,1582,256],{},[84,1584,1585,263,1587,267],{},[24,1586,262],{},[24,1588,266],{},[84,1590,1591,273],{},[24,1592,272],{},[10,1594,1595],{},[24,1596,278],{},[280,1598,1599,1611],{},[283,1600,1601],{},[286,1602,1603,1605,1607,1609],{},[289,1604,291],{},[289,1606,294],{},[289,1608,297],{},[289,1610,300],{},[302,1612,1613,1625,1635,1645,1655,1667],{},[286,1614,1615,1617,1619,1621],{},[307,1616,309],{},[307,1618,312],{},[307,1620,315],{},[307,1622,318,1623,322],{},[24,1624,321],{},[286,1626,1627,1629,1631,1633],{},[307,1628,327],{},[307,1630,330],{},[307,1632,333],{},[307,1634,336],{},[286,1636,1637,1639,1641,1643],{},[307,1638,341],{},[307,1640,344],{},[307,1642,347],{},[307,1644,350],{},[286,1646,1647,1649,1651,1653],{},[307,1648,355],{},[307,1650,358],{},[307,1652,361],{},[307,1654,364],{},[286,1656,1657,1659,1661,1663],{},[307,1658,369],{},[307,1660,372],{},[307,1662,375],{},[307,1664,378,1665],{},[24,1666,381],{},[286,1668,1669,1671,1673,1675],{},[307,1670,386],{},[307,1672,389],{},[307,1674,392],{},[307,1676,395],{},[10,1678,1679,401,1681,405,1683,409,1685,413],{},[24,1680,400],{},[24,1682,404],{},[24,1684,408],{},[24,1686,412],{},[10,1688,416,1689,231],{},[24,1690,419],{},[33,1692],{},[36,1694,425],{"id":424},[10,1696,428,1697,432],{},[24,1698,431],{},[81,1700,1701,1705,1707],{},[84,1702,437,1703,441],{},[24,1704,440],{},[84,1706,444],{},[84,1708,447],{},[10,1710,450,1711,454],{},[24,1712,453],{},[250,1714,1715,1719,1723],{},[84,1716,1717,462],{},[24,1718,461],{},[84,1720,1721,468],{},[24,1722,467],{},[84,1724,1725,474],{},[24,1726,473],{},[10,1728,477,1729,480],{},[24,1730,419],{},[33,1732],{},[36,1734,486],{"id":485},[48,1736],{":config":50,"code":489},[10,1738,492,1739],{},[24,1740,495],{},[33,1742],{},[36,1744,501],{"id":500},[10,1746,504,1747,508,1749,512,1751,516,1753,520,1755,524],{},[24,1748,507],{},[24,1750,511],{},[24,1752,515],{},[24,1754,519],{},[153,1756,523],{},[10,1758,527,1759,530,1761,454],{},[153,1760,523],{},[24,1762,533],{},[280,1764,1765,1773],{},[283,1766,1767],{},[286,1768,1769,1771],{},[289,1770,542],{},[289,1772,545],{},[302,1774,1775,1785,1795,1803],{},[286,1776,1777,1783],{},[307,1778,1779,555,1781],{},[153,1780,554],{},[153,1782,558],{},[307,1784,561],{},[286,1786,1787,1793],{},[307,1788,1789,555,1791],{},[153,1790,568],{},[153,1792,571],{},[307,1794,574],{},[286,1796,1797,1801],{},[307,1798,1799],{},[153,1800,581],{},[307,1802,584],{},[286,1804,1805,1809],{},[307,1806,1807],{},[153,1808,591],{},[307,1810,594],{},[10,1812,597],{},[10,1814,600,1815,604,1817,608],{},[24,1816,603],{},[153,1818,607],{},[610,1820,1822],{"className":1821,"code":614,"language":615,"meta":616},[613],[153,1823,614],{"__ignoreMap":616},[10,1825,621,1826,625],{},[24,1827,624],{},[33,1829],{},[36,1831,631],{"id":630},[10,1833,634,1834,638,1836,642],{},[24,1835,637],{},[24,1837,641],{},[610,1839,1841],{"className":1840,"code":646,"language":615},[613],[153,1842,646],{"__ignoreMap":616},[10,1844,651,1845,655],{},[153,1846,654],{},[53,1848,659],{"id":658},[10,1850,662,1851,666],{},[153,1852,665],{},[610,1854,1856],{"className":1855,"code":671,"language":672,"meta":616},[670],[153,1857,671],{"__ignoreMap":616},[10,1859,677,1860,681],{},[24,1861,680],{},[53,1863,685],{"id":684},[10,1865,688,1866,695],{},[24,1867,1868],{},[692,1869,694],{},[250,1871,1872,1878,1884,1888,1894],{},[84,1873,1874,703,1876,707],{},[24,1875,702],{},[153,1877,706],{},[84,1879,1880,713,1882,717],{},[24,1881,712],{},[24,1883,716],{},[84,1885,1886,723],{},[24,1887,722],{},[84,1889,1890,729,1892,205],{},[24,1891,728],{},[24,1893,732],{},[84,1895,1896,738],{},[24,1897,737],{},[10,1899,741,1900,745,1902,749],{},[24,1901,744],{},[153,1903,748],{},[10,1905,1906],{},[13,1907],{"alt":754,"src":755},[33,1909],{},[36,1911,761],{"id":760},[10,1913,764,1914,768,1916,772,1918,776],{},[153,1915,767],{},[153,1917,771],{},[24,1919,775],{},[53,1921,780,1922,784],{"id":779},[153,1923,783],{},[10,1925,787,1926,231],{},[24,1927,790],{},[10,1929,793],{},[250,1931,1932,1936,1940,1942,1948],{},[84,1933,798,1934,802],{},[24,1935,801],{},[84,1937,805,1938,205],{},[153,1939,808],{},[84,1941,811],{},[84,1943,814,1944,818,1946,205],{},[153,1945,817],{},[153,1947,821],{},[84,1949,824,1950,828],{},[24,1951,827],{},[10,1953,1954,834,1956,838],{},[24,1955,833],{},[153,1957,837],{},[53,1959,842,1960,846],{"id":841},[153,1961,845],{},[10,1963,849,1964,231],{},[24,1965,852],{},[10,1967,855,1968,859],{},[153,1969,858],{},[53,1971,863],{"id":862},[10,1973,866,1974,454],{},[24,1975,1976],{},[692,1977,871],{},[610,1979,1981],{"className":1980,"code":875,"language":615},[613],[153,1982,875],{"__ignoreMap":616},[10,1984,880,1985,884,1987,888],{},[153,1986,883],{},[153,1988,887],{},[33,1990],{},[36,1992,894],{"id":893},[10,1994,897,1995,900],{},[153,1996,654],{},[53,1998,904],{"id":903},[10,2000,907,2001,911],{},[153,2002,910],{},[53,2004,915],{"id":914},[250,2006,2007,2013,2017],{},[84,2008,2009,923,2011,926],{},[24,2010,922],{},[153,2012,837],{},[84,2014,2015,932],{},[24,2016,931],{},[84,2018,2019,938],{},[24,2020,937],{},[10,2022,941,2023,945],{},[24,2024,944],{},[33,2026],{},[36,2028,951],{"id":950},[10,2030,954,2031,454],{},[24,2032,957],{},[280,2034,2035,2043],{},[283,2036,2037],{},[286,2038,2039,2041],{},[289,2040,966],{},[289,2042,969],{},[302,2044,2045,2051,2059,2065,2071],{},[286,2046,2047,2049],{},[307,2048,976],{},[307,2050,979],{},[286,2052,2053,2055],{},[307,2054,984],{},[307,2056,987,2057,991],{},[153,2058,990],{},[286,2060,2061,2063],{},[307,2062,996],{},[307,2064,999],{},[286,2066,2067,2069],{},[307,2068,1004],{},[307,2070,1007],{},[286,2072,2073,2075],{},[307,2074,1012],{},[307,2076,1015],{},[10,2078,2079],{},[13,2080],{"alt":1020,"src":1021},[33,2082],{},[36,2084,1027],{"id":1026},[10,2086,1030,2087,1034],{},[24,2088,1033],{},[10,2090,1037,2091,1041,2093,1045,2095,1049,2097,1053],{},[24,2092,1040],{},[24,2094,1044],{},[24,2096,1048],{},[24,2098,1052],{},[53,2100,1057],{"id":1056},[81,2102,2103,2109],{},[84,2104,2105,1065,2107,205],{},[24,2106,1064],{},[24,2108,1068],{},[84,2110,2111,1074,2113,231],{},[24,2112,1073],{},[24,2114,1077],{},[10,2116,1080,2117,1084,2119,1088],{},[24,2118,1083],{},[24,2120,1087],{},[33,2122],{},[53,2124,1094],{"id":1093},[10,2126,1097,2127,1101,2129,1105],{},[24,2128,1100],{},[24,2130,1104],{},[10,2132,1108],{},[81,2134,2135,2141,2143],{},[84,2136,1113,2137,1117,2139,1121],{},[24,2138,1116],{},[24,2140,1120],{},[84,2142,1124],{},[84,2144,1127,2145,1131],{},[24,2146,1130],{},[10,2148,1134,2149,1138,2151,1142],{},[24,2150,1137],{},[24,2152,1141],{},[10,2154,2155],{},[13,2156],{"alt":1147,"src":1148},[33,2158],{},[53,2160,1154],{"id":1153},[10,2162,1157,2163,1161,2165,1165,2167,1169],{},[24,2164,1160],{},[24,2166,1164],{},[24,2168,1168],{},[10,2170,1172,2171,1176,2173,1180],{},[24,2172,1175],{},[24,2174,1179],{},[33,2176],{},[53,2178,1186],{"id":1185},[10,2180,1189,2181,1193,2183,1197,2185,1201,2187,1207],{},[24,2182,1192],{},[24,2184,1196],{},[24,2186,1200],{},[24,2188,1204,2189],{},[153,2190,837],{},[10,2192,1210,2193,1214,2195,1218],{},[24,2194,1213],{},[24,2196,1217],{},[33,2198],{},[53,2200,1224],{"id":1223},[10,2202,1227,2203,1231,2205,1235,2207,1239,2209,1243],{},[24,2204,1230],{},[24,2206,1234],{},[24,2208,1238],{},[24,2210,1242],{},[10,2212,1246,2213],{},[24,2214,1249],{},[33,2216],{},[36,2218,1255],{"id":1254},[280,2220,2221,2231],{},[283,2222,2223],{},[286,2224,2225,2227,2229],{},[289,2226,1264],{},[289,2228,1267],{},[289,2230,1270],{},[302,2232,2233,2241,2251,2261,2269,2277],{},[286,2234,2235,2237,2239],{},[307,2236,1277],{},[307,2238,1280],{},[307,2240,1283],{},[286,2242,2243,2245,2249],{},[307,2244,1288],{},[307,2246,2247,1293],{},[153,2248,155],{},[307,2250,1296],{},[286,2252,2253,2255,2259],{},[307,2254,1301],{},[307,2256,1304,2257],{},[24,2258,321],{},[307,2260,1309],{},[286,2262,2263,2265,2267],{},[307,2264,1314],{},[307,2266,1317],{},[307,2268,1320],{},[286,2270,2271,2273,2275],{},[307,2272,1325],{},[307,2274,1328],{},[307,2276,1331],{},[286,2278,2279,2281,2283],{},[307,2280,1336],{},[307,2282,1339],{},[307,2284,1342],{},[10,2286,1345,2287,1349],{},[24,2288,1348],{},[10,2290,1352,2291,1356,2293,1360],{},[24,2292,1355],{},[24,2294,1359],{},[18,2296,2297],{},[10,2298,1365,2299,1371,2302,231],{},[242,2300,1370],{"href":1368,"rel":2301},[246],[242,2303,1375],{"href":1374},{"title":616,"searchDepth":1377,"depth":1377,"links":2305},[2306,2311,2312,2313,2314,2318,2323,2327,2328,2335],{"id":38,"depth":1377,"text":39,"children":2307},[2308,2309,2310],{"id":55,"depth":1382,"text":56},{"id":137,"depth":1382,"text":138},{"id":234,"depth":1382,"text":235},{"id":424,"depth":1377,"text":425},{"id":485,"depth":1377,"text":486},{"id":500,"depth":1377,"text":501},{"id":630,"depth":1377,"text":631,"children":2315},[2316,2317],{"id":658,"depth":1382,"text":659},{"id":684,"depth":1382,"text":685},{"id":760,"depth":1377,"text":761,"children":2319},[2320,2321,2322],{"id":779,"depth":1382,"text":1395},{"id":841,"depth":1382,"text":1397},{"id":862,"depth":1382,"text":863},{"id":893,"depth":1377,"text":894,"children":2324},[2325,2326],{"id":903,"depth":1382,"text":904},{"id":914,"depth":1382,"text":915},{"id":950,"depth":1377,"text":951},{"id":1026,"depth":1377,"text":1027,"children":2329},[2330,2331,2332,2333,2334],{"id":1056,"depth":1382,"text":1057},{"id":1093,"depth":1382,"text":1094},{"id":1153,"depth":1382,"text":1154},{"id":1185,"depth":1382,"text":1186},{"id":1223,"depth":1382,"text":1224},{"id":1254,"depth":1377,"text":1255},{},{"title":5,"description":1414},[1423,1424,1425],1780489852828]