[{"data":1,"prerenderedAt":2338},["ShallowReactive",2],{"blog-article-/it-it/blog/zero-hallucination-qa":3,"blog-list-it-it":1427},{"id":4,"title":5,"body":6,"config":1411,"date":1412,"description":1413,"draft":1414,"extension":1415,"image":1411,"meta":1416,"navigation":1417,"path":1418,"seo":1419,"stem":1420,"tags":1421,"toolbar":1411,"translationKey":1425,"updated":1412,"__hash__":1426},"blog/it-it/blog/zero-hallucination-qa.md","Come ho implementato Q&A a zero allucinazioni nel nostro reader",{"type":7,"value":8,"toc":1375},"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,1053,1057,1077,1088,1090,1094,1105,1108,1131,1142,1148,1150,1154,1169,1180,1182,1186,1207,1218,1220,1224,1243,1249,1251,1255,1342,1349,1360],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"Copertina: Q&A a zero allucinazioni","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,19,20],"blockquote",{},[10,21,22,23,27,28,31],{},"Questo articolo descrive l'implementazione tecnica del ",[24,25,26],"strong",{},"Q&A a zero allucinazioni"," nel nostro reader IA: le risposte si basano rigorosamente sul testo del libro aperto e le affermazioni chiave possono essere ",[24,29,30],{},"ricondotte con un clic"," al passaggio esatto. Se sviluppi lettura IA, Q&A documentale o app in stile RAG, speriamo che tre iterazioni e l'architettura finale possano essere utili.",[33,34],"hr",{},[36,37,39],"h2",{"id":38},"i-evoluzione-in-tre-fasi","I. Evoluzione in tre fasi",[10,41,42,43,46],{},"Il Q&A a zero allucinazioni non è stato progettato perfetto dal primo giorno. È evoluto sotto la tensione tra ",[24,44,45],{},"costo, latenza e accuratezza",". Di seguito le tre fasi in ordine cronologico—contesto per capire perché l'architettura attuale ha questa forma.",[48,49],"mermaid",{":config":50,"code":51},"config","flowchart%20LR%0A%20%20%20%20P1%5BFase%201%3A%20Testo%20integrale%5D%20--%3E%20P2%5BFase%202%3A%20LLM%20frasi%20chiave%5D%0A%20%20%20%20P2%20--%3E%20P3%5BFase%203%3A%20Indice%20segmenti%20%2B%20Tool%5D%0A%20%20%20%20P1%20-.-%3E%7CLento%2C%20costoso%2C%20impreciso%20su%20libri%20lunghi%7C%20X1%5BAbbandonato%5D%0A%20%20%20%20P2%20-.-%3E%7CPerdita%20di%20dettaglio%2C%20ancora%20lento%7C%20X2%5BAbbandonato%5D%0A%20%20%20%20P3%20--%3E%7CAttuale%7C%20OK%5BZero%20allucinazioni%20%2B%20tracciabile%5D",[53,54,56],"h3",{"id":55},"fase-1-inserire-tutto-il-libro-nel-context-la-più-semplicee-la-prima-a-cedere","Fase 1: Inserire tutto il libro nel context (la più semplice—e la prima a cedere)",[10,58,59,62,63,66,67,70,71,74],{},[24,60,61],{},"Approccio:"," Quando l'utente apre un libro e pone una domanda, mettere ",[24,64,65],{},"tutto il corpo di testo estratto"," nel system prompt o nel messaggio utente e lasciare rispondere il modello di chat. Se il libro supera circa ",[24,68,69],{},"400.000 caratteri",", ",[24,72,73],{},"troncamento rigido","—resta solo l'inizio; i capitoli successivi sono invisibili al modello.",[10,76,77],{},[24,78,79],{},"Vantaggi:",[81,82,83,87,90],"ul",{},[84,85,86],"li",{},"Costo di implementazione molto basso, quasi nessun pre-processing;",[84,88,89],{},"Funziona ragionevolmente su libri brevi e documenti semplici—il modello ha davvero «visto tutto il libro»;",[84,91,92],{},"UX semplice: chiedi e ottieni risposta, senza stato «attendere l'analisi».",[10,94,95],{},[24,96,97],{},"Svantaggi (presto inaccettabili):",[81,99,100,106,112,122],{},[84,101,102,105],{},[24,103,104],{},"Risposte lente:"," Ogni domanda reinvia un payload enorme; time-to-first-token e latenza totale crescono con la lunghezza del libro;",[84,107,108,111],{},[24,109,110],{},"Costo token elevato:"," Si paga l'input dell'intero libro a ogni domanda;",[84,113,114,117,118,121],{},[24,115,116],{},"Libri lunghi fortemente distorti:"," Oltre 400k caratteri, seconda metà, appendici e conclusioni praticamente non esistono—e l'UI ",[24,119,120],{},"spesso non segnala chiaramente"," il troncamento;",[84,123,124,127,128,131],{},[24,125,126],{},"Granularità di ricerca zero:"," Il modello deve «trovare un ago nel pagliaio» su centinaia di migliaia di caratteri—facile perdere dettagli e produrre ",[24,129,130],{},"riassunti plausibili senza fondamento","—esattamente ciò che le app di lettura devono evitare.",[10,133,134],{},"La fase 1 va bene per un MVP, non per una soluzione di prodotto.",[53,136,138],{"id":137},"fase-2-un-llm-leggero-estrae-frasi-chiave-comprimere-il-contexttroppo-aggressivamente","Fase 2: Un LLM leggero estrae frasi chiave (comprimere il context—troppo aggressivamente)",[10,140,141,143,144,147,148,151,152,156],{},[24,142,61],{}," Prima del Q&A (o al primo accesso), far girare un ",[24,145,146],{},"modello più economico"," sul corpo: suddivisione per capitolo spine (o chunk del libro), estrazione di ",[24,149,150],{},"frasi chiave",", conservazione di tag di posizione come ",[153,154,155],"code",{},"[fFile-inizio-fine]",", poi concatenazione in un context più corto per il Q&A successivo.",[10,158,159,160,163],{},"Pipeline tipica: ",[24,161,162],{},"Extract → Cache → Chat",". Estrarre una volta (offline o on demand), salvare un «pacchetto di frasi chiave», riutilizzarlo a ogni domanda—come molti prototipi document Q&A: comprimere prima, rispondere dopo.",[10,165,166],{},[24,167,79],{},[81,169,170,177,180],{},[84,171,172,173,176],{},"Ogni domanda invia ",[24,174,175],{},"molto meno testo","; il consumo di token per richiesta cala rispetto alla fase 1;",[84,178,179],{},"Il pre-processing può essere in cache; niente ri-estrazione per domanda sullo stesso libro;",[84,181,182],{},"I tag di posizione gettano le basi per le citazioni.",[10,184,185],{},[24,186,187],{},"Svantaggi (ancora insufficienti su libri lunghi):",[81,189,190,196,206,215],{},[84,191,192,195],{},[24,193,194],{},"Forte perdita di dettaglio:"," Le «frasi chiave» sono scelte dal modello; qualificatori, controesempi e catene argomentative spesso spariscono—risposte «corrette ma parziali»;",[84,197,198,201,202,205],{},[24,199,200],{},"Context ancora grande su opere lunghe:"," Anche i pacchetti di frasi chiave sono consistenti—latenza e costo ",[24,203,204],{},"si attenuano, non si risolvono",";",[84,207,208,211,212,205],{},[24,209,210],{},"Doppio errore LLM:"," L'estrazione può omettere; il Q&A può leggere male gli estratti—gli errori ",[24,213,214],{},"si accumulano",[84,216,217,220,221,224],{},[24,218,219],{},"Context statico:"," Che la domanda riguardi un capitolo o la struttura globale, il modello riceve sempre ",[24,222,223],{},"lo stesso blob pre-estratto","—nessun restringimento dinamico per domanda.",[10,226,227,228,231],{},"La lezione: il problema non è «se comprimiamo», ma ",[24,229,230],{},"«se la compressione è on demand e se possiamo tornare al testo sorgente»",".",[53,233,235],{"id":234},"fase-3-indice-segmenti-tool-on-demand-restituzione-testo-sorgente-attuale","Fase 3: Indice segmenti + Tool on demand + restituzione testo sorgente (attuale)",[10,237,238,240,241,248],{},[24,239,61],{}," Ispirato a ",[242,243,247],"a",{"href":244,"rel":245},"https://github.com/VectifyAI/PageIndex",[246],"nofollow","PageIndex",". Rispetto alla fase 2, tre cambiamenti centrali:",[250,251,252,258,268],"ol",{},[84,253,254,257],{},[24,255,256],{},"Il pre-processing produce un indice strutturato"," (riassunti a livello TOC + span di caratteri esatti), non estratti usati direttamente come context Q&A;",[84,259,260,263,264,267],{},[24,261,262],{},"Ogni domanda usa Tool Calling per cercare on demand",", poi ",[24,265,266],{},"recupera testo sorgente con tag di posizione"," per rispondere;",[84,269,270,273],{},[24,271,272],{},"System prompt + frontend"," impongono il formato di citazione e supportano clic → salto → evidenziazione nel reader.",[10,275,276],{},[24,277,278],{},"Confronto delle tre fasi:",[280,281,282,301],"table",{},[283,284,285],"thead",{},[286,287,288,292,295,298],"tr",{},[289,290,291],"th",{},"Dimensione",[289,293,294],{},"Fase 1 (testo integrale)",[289,296,297],{},"Fase 2 (frasi chiave)",[289,299,300],{},"Fase 3 (attuale)",[302,303,304,323,337,351,365,382],"tbody",{},[286,305,306,310,313,316],{},[307,308,309],"td",{},"Context per domanda",[307,311,312],{},"Libro intero (o prima metà troncata)",[307,314,315],{},"Frasi chiave pre-estratte",[307,317,318,319,322],{},"Solo frammenti di ",[24,320,321],{},"sorgente"," pertinenti",[286,324,325,328,331,334],{},[307,326,327],{},"Accuratezza su libri lunghi",[307,329,330],{},"Collasso oltre ~400k caratteri",[307,332,333],{},"Dipende dall'estrazione; perde dettaglio",[307,335,336],{},"Ricerca per TOC/span; niente troncamento rigido dell'intero libro",[286,338,339,342,345,348],{},[307,340,341],{},"Velocità di risposta",[307,343,344],{},"Lenta",[307,346,347],{},"Un po' meglio; libri lunghi ancora lenti",[307,349,350],{},"Ricerca + context breve—nettamente più veloce",[286,352,353,356,359,362],{},[307,354,355],{},"Costo token",[307,357,358],{},"Molto alto",[307,360,361],{},"Medio-alto",[307,363,364],{},"Pre-processing ammortizzato + pagamento on demand",[286,366,367,370,373,376],{},[307,368,369],{},"Tracciabilità",[307,371,372],{},"Debole (citazioni difficili)",[307,374,375],{},"Tag presenti ma contenuto filtrato",[307,377,378,379],{},"Note a piè di pagina → ",[24,380,381],{},"span sorgente reali",[286,383,384,387,390,393],{},[307,385,386],{},"Complessità ingegneristica",[307,388,389],{},"Bassa",[307,391,392],{},"Media",[307,394,395],{},"Alta",[10,397,398,401,402,405,406,409,410,413],{},[24,399,400],{},"Perché ci siamo fermati alla fase 3:"," In lettura, zero allucinazioni non significa «mostrare al modello il massimo testo», ma ",[24,403,404],{},"«prima di rispondere, ottenere prove sorgente per la domanda»",". Le fasi 1–2 combattevano la ",[24,407,408],{},"dimensione del context","; la fase 3 spezza la pipeline in ",[24,411,412],{},"indice (pre-processing) → ricerca (Tool) → prova (sorgente) → risposta (generazione vincolata)","—equilibrio tra accuratezza, costo e tracciabilità.",[10,415,416,417,231],{},"Di seguito il dettaglio della ",[24,418,419],{},"fase 3",[33,421],{},[36,423,425],{"id":424},"ii-definizione-del-problema-nel-qa-su-libri-lallucinazione-costa-più-che-in-una-chat-generica","II. Definizione del problema: Nel Q&A su libri, l'allucinazione costa più che in una chat generica",[10,427,428,429,432],{},"Gli utenti perdonano errori occasionali in un chatbot generale. Nel ",[24,430,431],{},"Q&A su libri",", il prezzo è più alto:",[81,434,435,442,445],{},[84,436,437,438,441],{},"Chiedono cosa dice ",[24,439,440],{},"questo libro","—non ciò che vive nella memoria parametrica del modello;",[84,443,444],{},"Un'«opinione del libro» plausibile può indurre in errore note, citazioni e condivisioni;",[84,446,447],{},"Senza fonti, niente verifica—la fiducia è difficile da costruire.",[10,449,450,451,454],{},"«Zero allucinazioni» diventa quindi tre regole ",[24,452,453],{},"applicabili",":",[250,456,457,463,469],{},[84,458,459,462],{},[24,460,461],{},"Le domande sul libro devono interrogare il libro prima:"," Tutto ciò che può riguardare il libro aperto passa per il retrieval (Tool) prima della risposta;",[84,464,465,468],{},[24,466,467],{},"Le risposte devono essere tracciabili:"," Le affermazioni chiave portano tag di posizione che l'UI può parsare e raggiungere;",[84,470,471,474],{},[24,472,473],{},"Dire quando non si trova:"," Se il libro non contiene l'informazione, dirlo—non mascherare conoscenza generale come «ciò che dice il libro».",[10,476,477,478,480],{},"Il resto segue il flusso dati della ",[24,479,419],{}," e l'implementazione di queste regole.",[33,482],{},[36,484,486],{"id":485},"iii-architettura-pre-processing-tool-generazione-vincolata-citazioni-cliccabili","III. Architettura: Pre-processing → Tool → Generazione vincolata → Citazioni cliccabili",[48,488],{":config":50,"code":489},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BOffline%20%2F%20primo%20pre-processing%5D%0A%20%20%20%20%20%20%20%20A%5BDividere%20libro%20per%20TOC%20o%20lunghezza%5D%20--%3E%20B%5BRiassunti%20segmenti%20LLM%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BPersistere%20cache%20Segment%20in%20locale%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BDomanda%20utente%5D%0A%20%20%20%20%20%20%20%20D%5BInput%20utente%5D%20--%3E%20E%7BCache%20Segment%20esistente%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNo%7C%20F%5BEstrarre%20testo%20integrale%20%2F%20proporre%20pre-processing%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7CS%C3%AC%7C%20G%5BRegistrare%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BRicerca%20Tool%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BTipo%20di%20domanda%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CPanoramica%20%2F%20recensione%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFatti%20%2F%20persone%20%2F%20capitolo%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20sceglie%20ID%20segmento%20dal%20catalogo%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BRecuperare%20sorgente%20per%20span%20%2B%20tag%20di%20posizione%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BConcatenare%20tutti%20i%20riassunti%20segmenti%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGenerare%20e%20mostrare%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BRisultati%20Tool%20al%20modello%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%5BRegole%20citazione%20system%20prompt%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BRisposta%20in%20streaming%20%2B%20note%20di%20posizione%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BRenderizzare%20note%20cliccabili%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BClic%20%E2%86%92%20anteprima%20%E2%86%92%20salto%20ed%20evidenziazione%5D%0A%20%20%20%20end",[10,491,492,493],{},"Idea centrale: ",[24,494,495],{},"non lasciare il modello «rispondere a memoria»—obbligarlo a «raccogliere prove, rispondere, segnare le fonti».",[33,497],{},[36,499,501],{"id":500},"iv-pre-processing-trasformare-il-libro-in-un-indice-di-segmenti-ricercabile","IV. Pre-processing: Trasformare il libro in un indice di segmenti ricercabile",[10,503,504,505,508,509,512,513,516,517,520,521,524],{},"Se ogni domanda usasse ancora il context ",[24,506,507],{},"fase 1"," dell'intero libro, i libri lunghi esplodono il budget token e la ricerca è troppo grossolana. Fase 3: al primo chat IA su un libro, eseguire in background un ",[24,510,511],{},"job di riassunto segmenti","—suddivisione per ",[24,514,515],{},"TOC"," o ",[24,518,519],{},"lunghezza testo"," in ",[153,522,523],{},"Segment",", riassunto di ciascuno, persistenza in IndexedDB locale.",[10,526,527,528,530,531,454],{},"Ogni ",[153,529,523],{}," contiene riassunto più ",[24,532,533],{},"posizione fisica nel corpo",[280,535,536,546],{},[283,537,538],{},[286,539,540,543],{},[289,541,542],{},"Campo",[289,544,545],{},"Significato",[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],{},"Indice file spine (PDF: un file per pagina)",[286,563,564,572],{},[307,565,566,555,569],{},[153,567,568],{},"startOffset",[153,570,571],{},"endOffset",[307,573,574],{},"Inizio/fine in caratteri",[286,576,577,582],{},[307,578,579],{},[153,580,581],{},"sequence",[307,583,584],{},"Ordine di lettura lineare",[286,586,587,592],{},[307,588,589],{},[153,590,591],{},"title",[307,593,594],{},"Titolo TOC",[10,596,597],{},"La suddivisione bilancia precisione e costo: nodo TOC sotto ~20 KB → riassumere solo quel nodo; nodi fratelli fusi in batch (15–20 KB) prima della chiamata LLM; blocchi lunghi non strutturati in intervalli ~30–40k caratteri.",[10,599,600,601,604,605,608],{},"Il system prompt di riassunto richiede di ",[24,602,603],{},"conservare tag di posizione inline"," (",[153,606,607],{},"[fNumero-Numero-Numero]",") affinché la sorgente recuperata via Tool si allinei agli offset spine. Vincolo 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],{},"Dopo il pre-processing, il Q&A dipende da un ",[24,623,624],{},"indice segmenti strutturato",", non dal context dell'intero libro—prerequisito tecnico dello zero allucinazioni su libri lunghi.",[33,627],{},[36,629,631],{"id":630},"v-sistema-di-tag-di-posizione-codificare-il-da-dove-nel-testo","V. Sistema di tag di posizione: Codificare il «da dove» nel testo",[10,633,634,635,638,639,642],{},"Zero allucinazioni richiede contenuto dalla sorgente ",[24,636,637],{},"e"," ",[24,640,641],{},"provenienza"," analizzabile dalla macchina e raggiungibile in UI. Usiamo tag 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],{},"Esempio: ",[153,653,654],{},"[f5-123-165]"," = file spine 5 (base 0), caratteri 123–165.",[53,657,659],{"id":658},"_51-come-i-tag-sono-scritti-nel-corpo","5.1 Come i tag sono scritti nel corpo",[10,661,662,663,666],{},"Lo strato di estrazione aggiunge ",[153,664,665],{},"[f{fileIndex}-{start}-{end}]"," a fine segmento:",[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],{},"Riassunti di pre-processing o estratti Tool: le posizioni si allineano agli ",[24,679,680],{},"offset caratteri spine","—non numeri di pagina stimati dal modello.",[53,683,685],{"id":684},"_52-vincoli-sulloutput-del-modello","5.2 Vincoli sull'output del modello",[10,687,688,689,695],{},"Il system prompt include ",[24,690,691],{},[692,693,694],"span",{},"Position Citation Rules","—cinque punti essenziali:",[250,697,698,708,718,724,733],{},[84,699,700,703,704,707],{},[24,701,702],{},"Formato standard:"," Deve usare ",[153,705,706],{},"[f_fileIndex-startChar-endChar]","; tutte e tre le parti numeriche obbligatorie;",[84,709,710,713,714,717],{},[24,711,712],{},"Copiare solo dalle fonti attuali:"," Note ",[24,715,716],{},"verbatim"," da messaggi system/user o ritorni Tool di questo turno;",[84,719,720,723],{},[24,721,722],{},"Nessuna fabbricazione:"," Non calcolare, modificare o inventare posizioni;",[84,725,726,729,730,205],{},[24,727,728],{},"Preferire omissione:"," Nessun tag valido nel context → rispondere normalmente—",[24,731,732],{},"non emettere tag di posizione",[84,734,735,738],{},[24,736,737],{},"Inline con le affermazioni:"," Tag dopo la frase pertinente; niente elenchi di citazioni a fine risposta.",[10,740,741,742,745,746,749],{},"L'UI filtra anche tag ",[24,743,744],{},"bipartiti"," invalidi occasionali (es. ",[153,747,748],{},"[f1-293]",") prima del render.",[10,751,752],{},[13,753],{"alt":754,"src":755},"Popup tracciamento citazioni","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[33,757],{},[36,759,761],{"id":760},"vi-tool-calling-prima-cercare-poi-rispondere","VI. Tool Calling: Prima cercare, poi rispondere",[10,763,764,765,768,769,772,773,776],{},"Quando la chat è legata a un libro (",[153,766,767],{},"resourceId"," presente, ",[153,770,771],{},"chatType === 'chat'","), registriamo due Tool con executor prima di ogni generazione—ciclo ",[24,774,775],{},"function calling"," compatibile OpenAI.",[53,778,780,781,784],{"id":779},"_61-get_related_segment_summaries-ricerca-mirata-di-segmenti","6.1 ",[153,782,783],{},"get_related_segment_summaries"," — Ricerca mirata di segmenti",[10,786,787,788,231],{},"Per: concetti, personaggi, trama, dettagli di capitolo—",[24,789,790],{},"intento di ricerca chiaro",[10,792,793],{},"Flusso:",[250,795,796,803,809,812,822],{},[84,797,798,799,802],{},"Il modello riformula la domanda in ",[24,800,801],{},"termini probabili nel libro"," («Optimize Search Queries» nel system prompt);",[84,804,805,806,205],{},"Chiamata Tool con ",[153,807,808],{},"question",[84,810,811],{},"Raggruppare tutti i riassunti segmenti per budget token (~30k token per batch, max 5 batch);",[84,813,814,815,818,819,205],{},"Per batch: richiesta LLM separata sceglie ID pertinenti (max 5) da ",[153,816,817],{},"{ id, title, summary }",", JSON come ",[153,820,821],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[84,823,824,825,828],{},"Per i segmenti scelti, estrarre ",[24,826,827],{},"testo sorgente taggato"," dallo spine—not i riassunti—come risultato Tool.",[10,830,831,834,835,838],{},[24,832,833],{},"Design chiave: il Tool restituisce sorgente, non riassunti."," Il modello risponde da paragrafi reali con ",[153,836,837],{},"[f…]"," inline, evitando la deriva «riassunto → ri-riassunto».",[53,840,842,843,846],{"id":841},"_62-get_full_book_segment_summaries-panoramica-dellintero-libro","6.2 ",[153,844,845],{},"get_full_book_segment_summaries"," — Panoramica dell'intero libro",[10,848,849,850,231],{},"Per: «riassumi il libro», «recensisci questo libro», «struttura/temi globali»—",[24,851,852],{},"vista globale",[10,854,855,856,859],{},"Concatenare tutti i campi ",[153,857,858],{},"summary"," dei segmenti in ordine di lettura—evitare di perdere capitoli chiave solo per rilevanza per chunk.",[53,861,863],{"id":862},"_63-system-prompt-libro-prima-tool-prima","6.3 System prompt: Libro prima, tool prima",[10,865,866,867,454],{},"Con libro legato, si applica ",[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 generazione esegue il ciclo Tool: ",[153,882,883],{},"tool_calls"," → eseguire → append ",[153,886,887],{},"role: tool"," → continuare fino al testo finale. Con tools attivi, il canale thinking è spento per evitare conflitti di protocollo.",[33,890],{},[36,892,894],{"id":893},"vii-tracciabilità-frontend-dalla-nota-allevidenziazione","VII. Tracciabilità frontend: Dalla nota all'evidenziazione",[10,896,897,898,900],{},"L'output ",[153,899,654],{}," del modello non è mostrato grezzo; lo strato di render converte i tag in citazioni cliccabili.",[53,902,904],{"id":903},"_71-render-delle-note","7.1 Render delle note",[10,906,907,908,911],{},"Normalizzare i tag in link Markdown come ",[153,909,910],{},"[1]([f5-123-165])",", mostrare come note numerate; deduplicare la stessa posizione.",[53,913,915],{"id":914},"_72-interazione-al-clic","7.2 Interazione al clic",[250,917,918,927,933],{},[84,919,920,923,924,926],{},[24,921,922],{},"Primo clic:"," Parsare ",[153,925,837],{}," → fileIndex + offset → estrarre testo spine → anteprima (titolo TOC opzionale);",[84,928,929,932],{},[24,930,931],{},"Stessa nota di nuovo:"," Chiudere anteprima;",[84,934,935,938],{},[24,936,937],{},"Confermare salto:"," Aprire vista lettura, evidenziare intervallo caratteri.",[10,940,941,942,945],{},"Dal tag copiato dal modello al testo sorgente visibile all'utente, la catena ",[24,943,944],{},"non passa mai da un'altra chiamata LLM","—deterministica e riproducibile.",[33,947],{},[36,949,951],{"id":950},"viii-casi-limite-e-degradazione-onesta","VIII. Casi limite e degradazione onesta",[10,953,954,955,454],{},"Zero allucinazioni ≠ «c'è sempre una risposta»—è ",[24,956,957],{},"nessuna prova, nessuna invenzione",[280,959,960,970],{},[283,961,962],{},[286,963,964,967],{},[289,965,966],{},"Scenario",[289,968,969],{},"Comportamento",[302,971,972,980,992,1000,1008],{},[286,973,974,977],{},[307,975,976],{},"Riassunti segmenti non pronti",[307,978,979],{},"Estrarre prima testo integrale e riassumere",[286,981,982,985],{},[307,983,984],{},"Tool non trova nulla",[307,986,987,988,991],{},"Restituire ",[153,989,990],{},"(No relevant segment excerpts found…)","; il modello deve dire «non nel libro»",[286,993,994,997],{},[307,995,996],{},"Tag bipartiti invalidi dal modello",[307,998,999],{},"Filtraggio frontend; niente note rotte",[286,1001,1002,1005],{},[307,1003,1004],{},"Chiacchierata informale",[307,1006,1007],{},"Il system prompt consente conoscenza generale fuori dal libro",[286,1009,1010,1013],{},[307,1011,1012],{},"Esportare chat",[307,1014,1015],{},"Le note possono diventare deep link del reader per condivisione/archivio",[10,1017,1018],{},[13,1019],{"alt":1020,"src":1021},"Esportazione chat","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[33,1023],{},[36,1025,1027],{"id":1026},"ix-compromesso-di-design-perché-non-il-rag-vettoriale","IX. Compromesso di design: Perché non il «RAG vettoriale»?",[10,1029,1030,1031,1034],{},"I colleghi nel Q&A documentale chiedono spesso: se fai retrieval-augmented generation, perché non ",[24,1032,1033],{},"Embedding + vector DB Top-K","?",[10,1036,1037,1040,1041,1044,1045,1048,1049,1052],{},[24,1038,1039],{},"Facciamo RAG","—cercare prima di generare. La differenza: «RAG» nel discorso comunitario implica spesso ",[24,1042,1043],{},"similarità vettoriale","; la nostra fase 3 è ",[24,1046,1047],{},"indice segmenti + Tool con sorgente on demand","—",[24,1050,1051],{},"nessuno strato vettoriale per scelta",". Sotto: ragioni architetturali, senza negare il valore del RAG vettoriale.",[53,1054,1056],{"id":1055},"ambito-non-nessuna-ricerca-ma-nessuna-ricerca-vettoriale","Ambito: non «nessuna ricerca», ma «nessuna ricerca vettoriale»",[81,1058,1059,1068],{},[84,1060,1061,1064,1065,205],{},[24,1062,1063],{},"RAG ampio:"," cercare → generare → ",[24,1066,1067],{},"lo facciamo",[84,1069,1070,1073,1074,231],{},[24,1071,1072],{},"RAG vettoriale:"," recall via similarità embedding → ",[24,1075,1076],{},"non in questa versione",[10,1078,1079,1080,1083,1084,1087],{},"Il pre-processing costruisce un ",[24,1081,1082],{},"indice di riassunti segmenti","; il modello sceglie segmenti via Tools e ottiene ",[24,1085,1086],{},"testo sorgente",". C'è ricerca senza modello embedding separato né manutenzione indice vettoriale.",[33,1089],{},[53,1091,1093],{"id":1092},"motivo-1-provider-llm-personalizzatisuperficie-di-integrazione-ridotta","Motivo 1: Provider LLM personalizzati—superficie di integrazione ridotta",[10,1095,1096,1097,1100,1101,1104],{},"Gli utenti possono collegare ",[24,1098,1099],{},"le proprie API key",", base URL personalizzate o ",[24,1102,1103],{},"Ollama locale","—il modello di chat è loro scelta; costo e percorso dati restano sotto controllo.",[10,1106,1107],{},"Il RAG vettoriale tipico allarga l'integrazione:",[81,1109,1110,1121,1124],{},[84,1111,1112,1113,1116,1117,1120],{},"Oltre al ",[24,1114,1115],{},"modello di chat",", serve di solito un ",[24,1118,1119],{},"modello di embedding"," (altro nome, a volte altro endpoint);",[84,1122,1123],{},"Ollama locale richiede modello embedding separato più compatibilità dimensione/API;",[84,1125,1126,1127,1130],{},"Più modi di guasto: chat OK ma ",[24,1128,1129],{},"ricerca vuota","—embedding, indice o dimensione; debug più difficile di un provider end-to-end.",[10,1132,1133,1134,1137,1138,1141],{},"Qui, ",[24,1135,1136],{},"scelta segmenti e risposta condividono una config provider","—niente «chat su A, indice su B». Per app ",[24,1139,1140],{},"LLM pluggabili",", spesso conta più di qualche punto di recall.",[10,1143,1144],{},[13,1145],{"alt":1146,"src":1147},"Provider IA personalizzati","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[33,1149],{},[53,1151,1153],{"id":1152},"motivo-2-gli-embedding-legano-lindicecambiare-provider-costa-caro","Motivo 2: Gli embedding legano l'indice—cambiare provider costa caro",[10,1155,1156,1157,1160,1161,1164,1165,1168],{},"Nel RAG vettoriale, ",[24,1158,1159],{},"i vettori non sono un formato intermedio universale","—sono coordinate sotto un modello di embedding. Indice con A, query con B: la similarità di solito ",[24,1162,1163],{},"non è comparabile","—spesso ",[24,1166,1167],{},"re-embedding completo",", e dimensioni (768 / 1024 / 1536 …) bloccano lo schema di storage.",[10,1170,1171,1172,1175,1176,1179],{},"La fase 3 persiste ",[24,1173,1174],{},"riassunti strutturati + span caratteri",", non vettori; cambiare modello chat ",[24,1177,1178],{},"non ricostruisce l'indice","; la catena di prova (posizioni sorgente) resta—allineato a «provare LLM diversi in qualsiasi momento».",[33,1181],{},[53,1183,1185],{"id":1184},"motivo-3-il-routing-strutturato-spesso-basta-per-documenti-lunghi-con-toc","Motivo 3: Il routing strutturato spesso basta per documenti lunghi con TOC",[10,1187,1188,1189,1192,1193,1196,1197,1200,1201,1206],{},"E-book e PDF hanno di solito ",[24,1190,1191],{},"struttura a capitoli","; il pre-processing fornisce ",[24,1194,1195],{},"titoli segmento + riassunti",". Per «cosa dice il capitolo X» o «come il libro definisce Y», scegliere segmenti dal catalogo e ",[24,1198,1199],{},"tirare la sorgente"," funziona bene in pratica; il Tool restituisce ",[24,1202,1203,1204],{},"sorgente con ",[153,1205,837],{},", lo zero allucinazioni resta ancorato agli span caratteri.",[10,1208,1209,1210,1213,1214,1217],{},"I vettori aiutano per semantica fuzzy, multilingue, match letterale lungo; per reader ",[24,1211,1212],{},"TOC + pre-processing + forte tracciabilità",", investire in ",[24,1215,1216],{},"Tool + restituzione sorgente + regole citazione"," ha spesso ROI migliore.",[33,1219],{},[53,1221,1223],{"id":1222},"futuro-recall-ibrido-non-riscrittura","Futuro: Recall ibrido, non riscrittura",[10,1225,1226,1227,1230,1231,1234,1235,1238,1239,1242],{},"Potremmo aggiungere ",[24,1228,1229],{},"recall vettoriale grossolano"," (embedding solo per Top-N capitoli candidati), terminando sempre in ",[24,1232,1233],{},"scegli segmento → sorgente → traccia cliccabile","—regole zero allucinazioni invariate. Se aggiunto: embedding ",[24,1236,1237],{},"opzionale",", prompt espliciti di ",[24,1240,1241],{},"re-indicizzazione"," al cambio modello—evitare silent wrong retrieval.",[10,1244,1245,1246],{},"Fino ad allora: ",[24,1247,1248],{},"qualsiasi API chat compatibile OpenAI funziona; cambiare modello chat non ricostruisce l'indice locale.",[33,1250],{},[36,1252,1254],{"id":1253},"x-sintesi","X. Sintesi",[280,1256,1257,1270],{},[283,1258,1259],{},[286,1260,1261,1264,1267],{},[289,1262,1263],{},"Passo",[289,1265,1266],{},"Metodo",[289,1268,1269],{},"Ruolo",[302,1271,1272,1283,1296,1309,1320,1331],{},[286,1273,1274,1277,1280],{},[307,1275,1276],{},"Pre-processing",[307,1278,1279],{},"Suddivisione TOC/lunghezza + cache segmenti",[307,1281,1282],{},"Libri lunghi ricercabili e localizzabili",[286,1284,1285,1288,1293],{},[307,1286,1287],{},"Tag di posizione",[307,1289,1290,1292],{},[153,1291,155],{}," nella sorgente",[307,1294,1295],{},"Provenienza analizzabile dalla macchina",[286,1297,1298,1301,1306],{},[307,1299,1300],{},"Tool",[307,1302,1303,1304],{},"Segmenti / riassunti libro per domanda, restituire ",[24,1305,321],{},[307,1307,1308],{},"Forzare prove prima della risposta",[286,1310,1311,1314,1317],{},[307,1312,1313],{},"System prompt",[307,1315,1316],{},"Libro prima, niente tag falsi, dire quando manca",[307,1318,1319],{},"Vincolare la generazione",[286,1321,1322,1325,1328],{},[307,1323,1324],{},"Frontend",[307,1326,1327],{},"Nota → anteprima → salto ed evidenziazione",[307,1329,1330],{},"L'utente verifica le prove",[286,1332,1333,1336,1339],{},[307,1334,1335],{},"Nessuna ricerca vettoriale",[307,1337,1338],{},"Un provider; cambiare modello chat senza re-indice",[307,1340,1341],{},"Costo integrazione e migrazione ridotto",[10,1343,1344,1345,1348],{},"«Zero allucinazioni» non significa che il modello non sbaglia mai—significa che ",[24,1346,1347],{},"l'ingegneria lega l'output a una catena di prove",": nessuna ricerca → non fingere contenuto del libro; con ricerca → posizioni sorgente verificabili.",[10,1350,1351,1352,1355,1356,1359],{},"Se sviluppi lettura IA o Q&A documentale, speriamo che il percorso ",[24,1353,1354],{},"testo integrale → frasi chiave → Tool-first on demand",", più ",[24,1357,1358],{},"tag di posizione inline + restituzione sorgente",", sia un'implementazione di riferimento utile.",[18,1361,1362],{},[10,1363,1364,1365,1370,1371,231],{},"Queste sono lezioni dal reader IA ",[242,1366,1369],{"href":1367,"rel":1368},"https://reader.linghuxiong.com",[246],"Foxycape","—solo a titolo di riferimento. Prova il reader nella ",[242,1372,1374],{"href":1373},"/it-it#download","pagina download",{"title":616,"searchDepth":1376,"depth":1376,"links":1377},2,[1378,1384,1385,1386,1387,1391,1398,1402,1403,1410],{"id":38,"depth":1376,"text":39,"children":1379},[1380,1382,1383],{"id":55,"depth":1381,"text":56},3,{"id":137,"depth":1381,"text":138},{"id":234,"depth":1381,"text":235},{"id":424,"depth":1376,"text":425},{"id":485,"depth":1376,"text":486},{"id":500,"depth":1376,"text":501},{"id":630,"depth":1376,"text":631,"children":1388},[1389,1390],{"id":658,"depth":1381,"text":659},{"id":684,"depth":1381,"text":685},{"id":760,"depth":1376,"text":761,"children":1392},[1393,1395,1397],{"id":779,"depth":1381,"text":1394},"6.1 get_related_segment_summaries — Ricerca mirata di segmenti",{"id":841,"depth":1381,"text":1396},"6.2 get_full_book_segment_summaries — Panoramica dell'intero libro",{"id":862,"depth":1381,"text":863},{"id":893,"depth":1376,"text":894,"children":1399},[1400,1401],{"id":903,"depth":1381,"text":904},{"id":914,"depth":1381,"text":915},{"id":950,"depth":1376,"text":951},{"id":1026,"depth":1376,"text":1027,"children":1404},[1405,1406,1407,1408,1409],{"id":1055,"depth":1381,"text":1056},{"id":1092,"depth":1381,"text":1093},{"id":1152,"depth":1381,"text":1153},{"id":1184,"depth":1381,"text":1185},{"id":1222,"depth":1381,"text":1223},{"id":1253,"depth":1376,"text":1254},null,"2026-06-03","Note tecniche sul Q&A a zero allucinazioni in un reader IA—risposte ancorate al libro aperto, con citazioni in un clic al passaggio esatto.",false,"md",{},true,"/it-it/blog/zero-hallucination-qa",{"title":5,"description":1413},"it-it/blog/zero-hallucination-qa",[1422,1423,1424],"lettore","IA","ingegneria","zero-hallucination-qa","BdcEGBJmQs13oi-Il4fViNueRch1ksDhMYMtbkheQic",[1428],{"id":4,"title":5,"body":1429,"config":1411,"date":1412,"description":1413,"draft":1414,"extension":1415,"image":1411,"meta":2335,"navigation":1417,"path":1418,"seo":2336,"stem":1420,"tags":2337,"toolbar":1411,"translationKey":1425,"updated":1412,"__hash__":1426},{"type":7,"value":1430,"toc":2303},[1431,1435,1443,1445,1447,1451,1453,1455,1465,1469,1477,1481,1503,1505,1507,1517,1521,1525,1535,1539,1563,1567,1569,1576,1592,1596,1676,1686,1690,1692,1694,1698,1708,1712,1726,1730,1732,1734,1736,1740,1742,1744,1756,1762,1810,1812,1818,1823,1827,1829,1831,1837,1842,1846,1848,1852,1857,1861,1863,1869,1897,1903,1907,1909,1911,1919,1923,1927,1929,1951,1957,1961,1965,1969,1971,1977,1982,1988,1990,1992,1996,1998,2002,2004,2020,2024,2026,2028,2032,2076,2080,2082,2084,2088,2098,2100,2114,2120,2122,2124,2130,2132,2146,2152,2156,2158,2160,2168,2174,2176,2178,2190,2196,2198,2200,2210,2214,2216,2218,2284,2288,2294],[10,1432,1433],{},[13,1434],{"alt":15,"src":16},[18,1436,1437],{},[10,1438,22,1439,27,1441,31],{},[24,1440,26],{},[24,1442,30],{},[33,1444],{},[36,1446,39],{"id":38},[10,1448,42,1449,46],{},[24,1450,45],{},[48,1452],{":config":50,"code":51},[53,1454,56],{"id":55},[10,1456,1457,62,1459,66,1461,70,1463,74],{},[24,1458,61],{},[24,1460,65],{},[24,1462,69],{},[24,1464,73],{},[10,1466,1467],{},[24,1468,79],{},[81,1470,1471,1473,1475],{},[84,1472,86],{},[84,1474,89],{},[84,1476,92],{},[10,1478,1479],{},[24,1480,97],{},[81,1482,1483,1487,1491,1497],{},[84,1484,1485,105],{},[24,1486,104],{},[84,1488,1489,111],{},[24,1490,110],{},[84,1492,1493,117,1495,121],{},[24,1494,116],{},[24,1496,120],{},[84,1498,1499,127,1501,131],{},[24,1500,126],{},[24,1502,130],{},[10,1504,134],{},[53,1506,138],{"id":137},[10,1508,1509,143,1511,147,1513,151,1515,156],{},[24,1510,61],{},[24,1512,146],{},[24,1514,150],{},[153,1516,155],{},[10,1518,159,1519,163],{},[24,1520,162],{},[10,1522,1523],{},[24,1524,79],{},[81,1526,1527,1531,1533],{},[84,1528,172,1529,176],{},[24,1530,175],{},[84,1532,179],{},[84,1534,182],{},[10,1536,1537],{},[24,1538,187],{},[81,1540,1541,1545,1551,1557],{},[84,1542,1543,195],{},[24,1544,194],{},[84,1546,1547,201,1549,205],{},[24,1548,200],{},[24,1550,204],{},[84,1552,1553,211,1555,205],{},[24,1554,210],{},[24,1556,214],{},[84,1558,1559,220,1561,224],{},[24,1560,219],{},[24,1562,223],{},[10,1564,227,1565,231],{},[24,1566,230],{},[53,1568,235],{"id":234},[10,1570,1571,240,1573,248],{},[24,1572,61],{},[242,1574,247],{"href":244,"rel":1575},[246],[250,1577,1578,1582,1588],{},[84,1579,1580,257],{},[24,1581,256],{},[84,1583,1584,263,1586,267],{},[24,1585,262],{},[24,1587,266],{},[84,1589,1590,273],{},[24,1591,272],{},[10,1593,1594],{},[24,1595,278],{},[280,1597,1598,1610],{},[283,1599,1600],{},[286,1601,1602,1604,1606,1608],{},[289,1603,291],{},[289,1605,294],{},[289,1607,297],{},[289,1609,300],{},[302,1611,1612,1624,1634,1644,1654,1666],{},[286,1613,1614,1616,1618,1620],{},[307,1615,309],{},[307,1617,312],{},[307,1619,315],{},[307,1621,318,1622,322],{},[24,1623,321],{},[286,1625,1626,1628,1630,1632],{},[307,1627,327],{},[307,1629,330],{},[307,1631,333],{},[307,1633,336],{},[286,1635,1636,1638,1640,1642],{},[307,1637,341],{},[307,1639,344],{},[307,1641,347],{},[307,1643,350],{},[286,1645,1646,1648,1650,1652],{},[307,1647,355],{},[307,1649,358],{},[307,1651,361],{},[307,1653,364],{},[286,1655,1656,1658,1660,1662],{},[307,1657,369],{},[307,1659,372],{},[307,1661,375],{},[307,1663,378,1664],{},[24,1665,381],{},[286,1667,1668,1670,1672,1674],{},[307,1669,386],{},[307,1671,389],{},[307,1673,392],{},[307,1675,395],{},[10,1677,1678,401,1680,405,1682,409,1684,413],{},[24,1679,400],{},[24,1681,404],{},[24,1683,408],{},[24,1685,412],{},[10,1687,416,1688,231],{},[24,1689,419],{},[33,1691],{},[36,1693,425],{"id":424},[10,1695,428,1696,432],{},[24,1697,431],{},[81,1699,1700,1704,1706],{},[84,1701,437,1702,441],{},[24,1703,440],{},[84,1705,444],{},[84,1707,447],{},[10,1709,450,1710,454],{},[24,1711,453],{},[250,1713,1714,1718,1722],{},[84,1715,1716,462],{},[24,1717,461],{},[84,1719,1720,468],{},[24,1721,467],{},[84,1723,1724,474],{},[24,1725,473],{},[10,1727,477,1728,480],{},[24,1729,419],{},[33,1731],{},[36,1733,486],{"id":485},[48,1735],{":config":50,"code":489},[10,1737,492,1738],{},[24,1739,495],{},[33,1741],{},[36,1743,501],{"id":500},[10,1745,504,1746,508,1748,512,1750,516,1752,520,1754,524],{},[24,1747,507],{},[24,1749,511],{},[24,1751,515],{},[24,1753,519],{},[153,1755,523],{},[10,1757,527,1758,530,1760,454],{},[153,1759,523],{},[24,1761,533],{},[280,1763,1764,1772],{},[283,1765,1766],{},[286,1767,1768,1770],{},[289,1769,542],{},[289,1771,545],{},[302,1773,1774,1784,1794,1802],{},[286,1775,1776,1782],{},[307,1777,1778,555,1780],{},[153,1779,554],{},[153,1781,558],{},[307,1783,561],{},[286,1785,1786,1792],{},[307,1787,1788,555,1790],{},[153,1789,568],{},[153,1791,571],{},[307,1793,574],{},[286,1795,1796,1800],{},[307,1797,1798],{},[153,1799,581],{},[307,1801,584],{},[286,1803,1804,1808],{},[307,1805,1806],{},[153,1807,591],{},[307,1809,594],{},[10,1811,597],{},[10,1813,600,1814,604,1816,608],{},[24,1815,603],{},[153,1817,607],{},[610,1819,1821],{"className":1820,"code":614,"language":615,"meta":616},[613],[153,1822,614],{"__ignoreMap":616},[10,1824,621,1825,625],{},[24,1826,624],{},[33,1828],{},[36,1830,631],{"id":630},[10,1832,634,1833,638,1835,642],{},[24,1834,637],{},[24,1836,641],{},[610,1838,1840],{"className":1839,"code":646,"language":615},[613],[153,1841,646],{"__ignoreMap":616},[10,1843,651,1844,655],{},[153,1845,654],{},[53,1847,659],{"id":658},[10,1849,662,1850,666],{},[153,1851,665],{},[610,1853,1855],{"className":1854,"code":671,"language":672,"meta":616},[670],[153,1856,671],{"__ignoreMap":616},[10,1858,677,1859,681],{},[24,1860,680],{},[53,1862,685],{"id":684},[10,1864,688,1865,695],{},[24,1866,1867],{},[692,1868,694],{},[250,1870,1871,1877,1883,1887,1893],{},[84,1872,1873,703,1875,707],{},[24,1874,702],{},[153,1876,706],{},[84,1878,1879,713,1881,717],{},[24,1880,712],{},[24,1882,716],{},[84,1884,1885,723],{},[24,1886,722],{},[84,1888,1889,729,1891,205],{},[24,1890,728],{},[24,1892,732],{},[84,1894,1895,738],{},[24,1896,737],{},[10,1898,741,1899,745,1901,749],{},[24,1900,744],{},[153,1902,748],{},[10,1904,1905],{},[13,1906],{"alt":754,"src":755},[33,1908],{},[36,1910,761],{"id":760},[10,1912,764,1913,768,1915,772,1917,776],{},[153,1914,767],{},[153,1916,771],{},[24,1918,775],{},[53,1920,780,1921,784],{"id":779},[153,1922,783],{},[10,1924,787,1925,231],{},[24,1926,790],{},[10,1928,793],{},[250,1930,1931,1935,1939,1941,1947],{},[84,1932,798,1933,802],{},[24,1934,801],{},[84,1936,805,1937,205],{},[153,1938,808],{},[84,1940,811],{},[84,1942,814,1943,818,1945,205],{},[153,1944,817],{},[153,1946,821],{},[84,1948,824,1949,828],{},[24,1950,827],{},[10,1952,1953,834,1955,838],{},[24,1954,833],{},[153,1956,837],{},[53,1958,842,1959,846],{"id":841},[153,1960,845],{},[10,1962,849,1963,231],{},[24,1964,852],{},[10,1966,855,1967,859],{},[153,1968,858],{},[53,1970,863],{"id":862},[10,1972,866,1973,454],{},[24,1974,1975],{},[692,1976,871],{},[610,1978,1980],{"className":1979,"code":875,"language":615},[613],[153,1981,875],{"__ignoreMap":616},[10,1983,880,1984,884,1986,888],{},[153,1985,883],{},[153,1987,887],{},[33,1989],{},[36,1991,894],{"id":893},[10,1993,897,1994,900],{},[153,1995,654],{},[53,1997,904],{"id":903},[10,1999,907,2000,911],{},[153,2001,910],{},[53,2003,915],{"id":914},[250,2005,2006,2012,2016],{},[84,2007,2008,923,2010,926],{},[24,2009,922],{},[153,2011,837],{},[84,2013,2014,932],{},[24,2015,931],{},[84,2017,2018,938],{},[24,2019,937],{},[10,2021,941,2022,945],{},[24,2023,944],{},[33,2025],{},[36,2027,951],{"id":950},[10,2029,954,2030,454],{},[24,2031,957],{},[280,2033,2034,2042],{},[283,2035,2036],{},[286,2037,2038,2040],{},[289,2039,966],{},[289,2041,969],{},[302,2043,2044,2050,2058,2064,2070],{},[286,2045,2046,2048],{},[307,2047,976],{},[307,2049,979],{},[286,2051,2052,2054],{},[307,2053,984],{},[307,2055,987,2056,991],{},[153,2057,990],{},[286,2059,2060,2062],{},[307,2061,996],{},[307,2063,999],{},[286,2065,2066,2068],{},[307,2067,1004],{},[307,2069,1007],{},[286,2071,2072,2074],{},[307,2073,1012],{},[307,2075,1015],{},[10,2077,2078],{},[13,2079],{"alt":1020,"src":1021},[33,2081],{},[36,2083,1027],{"id":1026},[10,2085,1030,2086,1034],{},[24,2087,1033],{},[10,2089,2090,1040,2092,1044,2094,1048,2096,1052],{},[24,2091,1039],{},[24,2093,1043],{},[24,2095,1047],{},[24,2097,1051],{},[53,2099,1056],{"id":1055},[81,2101,2102,2108],{},[84,2103,2104,1064,2106,205],{},[24,2105,1063],{},[24,2107,1067],{},[84,2109,2110,1073,2112,231],{},[24,2111,1072],{},[24,2113,1076],{},[10,2115,1079,2116,1083,2118,1087],{},[24,2117,1082],{},[24,2119,1086],{},[33,2121],{},[53,2123,1093],{"id":1092},[10,2125,1096,2126,1100,2128,1104],{},[24,2127,1099],{},[24,2129,1103],{},[10,2131,1107],{},[81,2133,2134,2140,2142],{},[84,2135,1112,2136,1116,2138,1120],{},[24,2137,1115],{},[24,2139,1119],{},[84,2141,1123],{},[84,2143,1126,2144,1130],{},[24,2145,1129],{},[10,2147,1133,2148,1137,2150,1141],{},[24,2149,1136],{},[24,2151,1140],{},[10,2153,2154],{},[13,2155],{"alt":1146,"src":1147},[33,2157],{},[53,2159,1153],{"id":1152},[10,2161,1156,2162,1160,2164,1164,2166,1168],{},[24,2163,1159],{},[24,2165,1163],{},[24,2167,1167],{},[10,2169,1171,2170,1175,2172,1179],{},[24,2171,1174],{},[24,2173,1178],{},[33,2175],{},[53,2177,1185],{"id":1184},[10,2179,1188,2180,1192,2182,1196,2184,1200,2186,1206],{},[24,2181,1191],{},[24,2183,1195],{},[24,2185,1199],{},[24,2187,1203,2188],{},[153,2189,837],{},[10,2191,1209,2192,1213,2194,1217],{},[24,2193,1212],{},[24,2195,1216],{},[33,2197],{},[53,2199,1223],{"id":1222},[10,2201,1226,2202,1230,2204,1234,2206,1238,2208,1242],{},[24,2203,1229],{},[24,2205,1233],{},[24,2207,1237],{},[24,2209,1241],{},[10,2211,1245,2212],{},[24,2213,1248],{},[33,2215],{},[36,2217,1254],{"id":1253},[280,2219,2220,2230],{},[283,2221,2222],{},[286,2223,2224,2226,2228],{},[289,2225,1263],{},[289,2227,1266],{},[289,2229,1269],{},[302,2231,2232,2240,2250,2260,2268,2276],{},[286,2233,2234,2236,2238],{},[307,2235,1276],{},[307,2237,1279],{},[307,2239,1282],{},[286,2241,2242,2244,2248],{},[307,2243,1287],{},[307,2245,2246,1292],{},[153,2247,155],{},[307,2249,1295],{},[286,2251,2252,2254,2258],{},[307,2253,1300],{},[307,2255,1303,2256],{},[24,2257,321],{},[307,2259,1308],{},[286,2261,2262,2264,2266],{},[307,2263,1313],{},[307,2265,1316],{},[307,2267,1319],{},[286,2269,2270,2272,2274],{},[307,2271,1324],{},[307,2273,1327],{},[307,2275,1330],{},[286,2277,2278,2280,2282],{},[307,2279,1335],{},[307,2281,1338],{},[307,2283,1341],{},[10,2285,1344,2286,1348],{},[24,2287,1347],{},[10,2289,1351,2290,1355,2292,1359],{},[24,2291,1354],{},[24,2293,1358],{},[18,2295,2296],{},[10,2297,1364,2298,1370,2301,231],{},[242,2299,1369],{"href":1367,"rel":2300},[246],[242,2302,1374],{"href":1373},{"title":616,"searchDepth":1376,"depth":1376,"links":2304},[2305,2310,2311,2312,2313,2317,2322,2326,2327,2334],{"id":38,"depth":1376,"text":39,"children":2306},[2307,2308,2309],{"id":55,"depth":1381,"text":56},{"id":137,"depth":1381,"text":138},{"id":234,"depth":1381,"text":235},{"id":424,"depth":1376,"text":425},{"id":485,"depth":1376,"text":486},{"id":500,"depth":1376,"text":501},{"id":630,"depth":1376,"text":631,"children":2314},[2315,2316],{"id":658,"depth":1381,"text":659},{"id":684,"depth":1381,"text":685},{"id":760,"depth":1376,"text":761,"children":2318},[2319,2320,2321],{"id":779,"depth":1381,"text":1394},{"id":841,"depth":1381,"text":1396},{"id":862,"depth":1381,"text":863},{"id":893,"depth":1376,"text":894,"children":2323},[2324,2325],{"id":903,"depth":1381,"text":904},{"id":914,"depth":1381,"text":915},{"id":950,"depth":1376,"text":951},{"id":1026,"depth":1376,"text":1027,"children":2328},[2329,2330,2331,2332,2333],{"id":1055,"depth":1381,"text":1056},{"id":1092,"depth":1381,"text":1093},{"id":1152,"depth":1381,"text":1153},{"id":1184,"depth":1381,"text":1185},{"id":1222,"depth":1381,"text":1223},{"id":1253,"depth":1376,"text":1254},{},{"title":5,"description":1413},[1422,1423,1424],1780489852881]