[{"data":1,"prerenderedAt":1841},["ShallowReactive",2],{"blog-article-/nl-nl/blog/foxycape-pdf-obsidian":3,"blog-list-nl-nl":270},{"id":4,"title":5,"body":6,"config":254,"date":255,"description":256,"draft":257,"extension":258,"image":254,"meta":259,"navigation":260,"path":261,"seo":262,"stem":263,"tags":264,"toolbar":254,"translationKey":268,"updated":255,"__hash__":269},"blog/nl-nl/blog/foxycape-pdf-obsidian.md","Foxycape PDF — Een PDF-lezer voor Obsidian die verbonden blijft met je notities",{"type":7,"value":8,"toc":237},"minimark",[9,17,23,26,31,34,53,56,60,65,68,74,78,81,86,90,93,121,126,130,133,138,143,147,159,164,168,171,176,180,183,188,192,199,204,208,211,216,221,225,232],[10,11,12],"p",{},[13,14],"img",{"alt":15,"src":16},"Foxycape PDF","https://cdn.linghuxiong.com/resources/obsidian/introduce/logo-64x64.png",[18,19,20],"blockquote",{},[10,21,22],{},"Een PDF-lezer voor Obsidian die verbonden blijft met je notities — markeringen, citaten en deep links die je terugbrengen naar de bron.",[24,25],"hr",{},[27,28,30],"h2",{"id":29},"waarom","Waarom",[10,32,33],{},"PDF's lezen in Obsidian onderbreekt vaak de notitieworkflow:",[35,36,37,41,44,47,50],"ul",{},[38,39,40],"li",{},"Markeringen blijven in de PDF; je vault-notities staan ergens anders.",[38,42,43],{},"Een afbeelding vastleggen betekent meestal een wazige screenshot.",[38,45,46],{},"Geplakte citaten en afbeeldingen verwijzen zelden terug naar de exacte pagina of regio.",[38,48,49],{},"Lichte PDF-pagina's voelen hard aan in een donker vault-thema.",[38,51,52],{},"Van lezer wisselen kan pagina-/selectielinks breken die je al gebruikt.",[10,54,55],{},"Foxycape PDF vult deze hiaten op zonder dat je Obsidian hoeft te verlaten.",[27,57,59],{"id":58},"functies","Functies",[61,62,64],"h3",{"id":63},"markering-notitiesynchronisatie","Markering → notitiesynchronisatie",[10,66,67],{},"In plaats van markeringen in de PDF achter te laten, kan elke nieuwe markering een Markdown-notitie met dezelfde naam aanmaken of bijwerken, het fragment met een teruglink toevoegen en optioneel die notitie in een gesplitst paneel openen. Schakel het op elk moment uit in de instellingen.",[10,69,70],{},[13,71],{"alt":72,"src":73},"","https://cdn.linghuxiong.com/resources/obsidian/introduce/highlight-notes.gif",[61,75,77],{"id":76},"ingebedde-afbeeldingen-extraheren","Ingebedde afbeeldingen extraheren",[10,79,80],{},"Geen wazige screenshots meer. Beweeg over een ingebedde afbeelding (of gebruik de aanraakbediening op mobiel) om het originele bestand te bekijken, te kopiëren of te downloaden.",[10,82,83],{},[13,84],{"alt":72,"src":85},"https://cdn.linghuxiong.com/resources/obsidian/introduce/embed-images.gif",[61,87,89],{"id":88},"tekst-en-afbeeldingen-citeren-en-terugspringen","Tekst en afbeeldingen citeren en terugspringen",[10,91,92],{},"Citaten blijven gekoppeld aan de bron, zodat je later vanuit de notitie kunt terugspringen:",[35,94,95,110,113],{},[38,96,97,98,102,103,102,106,109],{},"Kopieer een tekstcitaat als Markdown met een deep link (",[99,100,101],"code",{},"#page="," / ",[99,104,105],{},"#selection=",[99,107,108],{},"#markId=",").",[38,111,112],{},"Kopieer een afbeeldingscitaat; plak in Markdown om een PNG naast de PDF op te slaan en een klikbare link in te voegen.",[38,114,115,116,120],{},"Klik met de rechtermuisknop op de afbeelding in de notitie → ",[117,118,119],"strong",{},"Openen in Foxycape"," om terug te keren naar de pagina en de oorspronkelijke regio te markeren.",[10,122,123],{},[13,124],{"alt":72,"src":125},"https://cdn.linghuxiong.com/resources/obsidian/introduce/cite-and-back.gif",[61,127,129],{"id":128},"thema-aangepaste-pdf-paginas","Thema-aangepaste PDF-pagina's",[10,131,132],{},"Heldere PDF-pagina's kunnen botsen met een donkere vault. Remap optioneel grijstinten in vectorafbeeldingen naar de voorgrond/achtergrond van je thema (BETA) — voor alle thema's, alleen donker of alleen licht. Kleurillustraties blijven ongewijzigd.",[10,134,135],{},[13,136],{"alt":72,"src":137},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt.gif",[10,139,140],{},[13,141],{"alt":72,"src":142},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt-dark.gif",[61,144,146],{"id":145},"compatibel-met-obsidians-ingebouwde-pdf-links","Compatibel met Obsidians ingebouwde PDF-links",[10,148,149,150,152,153,155,156,158],{},"Van lezer wisselen mag je bestaande links niet breken. Foxycape begrijpt Obsidian-stijl ",[99,151,101],{}," en ",[99,154,105],{},", kan de standaard PDF-viewer worden, hergebruikt een open tabblad waar mogelijk en voegt ",[99,157,108],{}," toe voor precieze sprongen naar markeringen.",[10,160,161],{},[13,162],{"alt":72,"src":163},"https://cdn.linghuxiong.com/resources/obsidian/introduce/compat-links.gif",[61,165,167],{"id":166},"markeringen-en-markeringenlijst","Markeringen en markeringenlijst",[10,169,170],{},"Markeerstift, golvende onderstreping en rechte onderstreping met aangepaste kleuren. Blader door markeringen in een lijst — filter, sorteer, spring of verwijder.",[10,172,173],{},[13,174],{"alt":72,"src":175},"https://cdn.linghuxiong.com/resources/obsidian/introduce/annotations.gif",[61,177,179],{"id":178},"slim-kopiëren-zachte-regelafbrekingen-verwijderen","Slim kopiëren — zachte regelafbrekingen verwijderen",[10,181,182],{},"PDF-regels voegen vaak harde afbrekingen midden in een zin in. Selecteer tekst en kopieer zoals gewoonlijk: Foxycape verwijdert die zachte wraps zodat het plakken als doorlopende proza leest, terwijl echte alinea-afbrekingen behouden blijven.",[10,184,185],{},[13,186],{"alt":72,"src":187},"https://cdn.linghuxiong.com/resources/obsidian/introduce/smart-copy.gif",[61,189,191],{"id":190},"navigatie-en-zoeken","Navigatie en zoeken",[10,193,194,195,198],{},"Inhoudsopgave (TOC), paginaminiaturen, paginakiezer en zoeken in het document (",[99,196,197],{},"Mod+F",") met opties voor hoofdlettergevoeligheid / diakritische tekens / heel woord. Zoeken gebruikt de PDF-tekstlaag (geen OCR).",[10,200,201],{},[13,202],{"alt":72,"src":203},"https://cdn.linghuxiong.com/resources/obsidian/introduce/navigate-search.gif",[61,205,207],{"id":206},"leeslayout","Leeslayout",[10,209,210],{},"Zoom (automatisch / paginabreedte / percentages), verticaal of horizontaal scrollen, enkelvoudige / dubbele / boeklayout, paginarotatie, met wachtwoord beveiligde PDF's. Werkt op desktop en mobiel.",[10,212,213],{},[13,214],{"alt":72,"src":215},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout.gif",[10,217,218],{},[13,219],{"alt":72,"src":220},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout-1.gif",[61,222,224],{"id":223},"instellen-als-standaard-pdf-lezer","Instellen als standaard PDF-lezer",[10,226,227,228,231],{},"Voor de soepelste ervaring — deep links, markeringen en thema-aangepaste pagina's — schakel ",[117,229,230],{},"Gebruiken als standaard PDF-viewer"," in de Foxycape-instellingen in, zodat Obsidian PDF's standaard met Foxycape opent.",[10,233,234],{},[13,235],{"alt":72,"src":236},"https://cdn.linghuxiong.com/resources/obsidian/introduce/set-default.gif",{"title":72,"searchDepth":238,"depth":238,"links":239},2,[240,241],{"id":29,"depth":238,"text":30},{"id":58,"depth":238,"text":59,"children":242},[243,245,246,247,248,249,250,251,252,253],{"id":63,"depth":244,"text":64},3,{"id":76,"depth":244,"text":77},{"id":88,"depth":244,"text":89},{"id":128,"depth":244,"text":129},{"id":145,"depth":244,"text":146},{"id":166,"depth":244,"text":167},{"id":178,"depth":244,"text":179},{"id":190,"depth":244,"text":191},{"id":206,"depth":244,"text":207},{"id":223,"depth":244,"text":224},null,"2026-08-11","Markeringen, citaten en deep links die je terugbrengen naar de bron — Foxycape PDF houdt lezen en notities maken in Obsidian in één doorlopende workflow.",false,"md",{},true,"/nl-nl/blog/foxycape-pdf-obsidian",{"title":5,"description":256},"nl-nl/blog/foxycape-pdf-obsidian",[265,266,267],"Obsidian","PDF","Foxycape","foxycape-pdf-obsidian","Y-sHw84GqyITSFexzjQbnfZIfVKELcfx_hZULgs_zdM",[271,436],{"id":4,"title":5,"body":272,"config":254,"date":255,"description":256,"draft":257,"extension":258,"image":254,"meta":433,"navigation":260,"path":261,"seo":434,"stem":263,"tags":435,"toolbar":254,"translationKey":268,"updated":255,"__hash__":269},{"type":7,"value":273,"toc":418},[274,278,282,284,286,288,300,302,304,306,308,312,314,316,320,322,324,340,344,346,348,352,356,358,366,370,372,374,378,380,382,386,388,392,396,398,400,404,408,410,414],[10,275,276],{},[13,277],{"alt":15,"src":16},[18,279,280],{},[10,281,22],{},[24,283],{},[27,285,30],{"id":29},[10,287,33],{},[35,289,290,292,294,296,298],{},[38,291,40],{},[38,293,43],{},[38,295,46],{},[38,297,49],{},[38,299,52],{},[10,301,55],{},[27,303,59],{"id":58},[61,305,64],{"id":63},[10,307,67],{},[10,309,310],{},[13,311],{"alt":72,"src":73},[61,313,77],{"id":76},[10,315,80],{},[10,317,318],{},[13,319],{"alt":72,"src":85},[61,321,89],{"id":88},[10,323,92],{},[35,325,326,334,336],{},[38,327,97,328,102,330,102,332,109],{},[99,329,101],{},[99,331,105],{},[99,333,108],{},[38,335,112],{},[38,337,115,338,120],{},[117,339,119],{},[10,341,342],{},[13,343],{"alt":72,"src":125},[61,345,129],{"id":128},[10,347,132],{},[10,349,350],{},[13,351],{"alt":72,"src":137},[10,353,354],{},[13,355],{"alt":72,"src":142},[61,357,146],{"id":145},[10,359,149,360,152,362,155,364,158],{},[99,361,101],{},[99,363,105],{},[99,365,108],{},[10,367,368],{},[13,369],{"alt":72,"src":163},[61,371,167],{"id":166},[10,373,170],{},[10,375,376],{},[13,377],{"alt":72,"src":175},[61,379,179],{"id":178},[10,381,182],{},[10,383,384],{},[13,385],{"alt":72,"src":187},[61,387,191],{"id":190},[10,389,194,390,198],{},[99,391,197],{},[10,393,394],{},[13,395],{"alt":72,"src":203},[61,397,207],{"id":206},[10,399,210],{},[10,401,402],{},[13,403],{"alt":72,"src":215},[10,405,406],{},[13,407],{"alt":72,"src":220},[61,409,224],{"id":223},[10,411,227,412,231],{},[117,413,230],{},[10,415,416],{},[13,417],{"alt":72,"src":236},{"title":72,"searchDepth":238,"depth":238,"links":419},[420,421],{"id":29,"depth":238,"text":30},{"id":58,"depth":238,"text":59,"children":422},[423,424,425,426,427,428,429,430,431,432],{"id":63,"depth":244,"text":64},{"id":76,"depth":244,"text":77},{"id":88,"depth":244,"text":89},{"id":128,"depth":244,"text":129},{"id":145,"depth":244,"text":146},{"id":166,"depth":244,"text":167},{"id":178,"depth":244,"text":179},{"id":190,"depth":244,"text":191},{"id":206,"depth":244,"text":207},{"id":223,"depth":244,"text":224},{},{"title":5,"description":256},[265,266,267],{"id":437,"title":438,"body":439,"config":254,"date":1829,"description":1830,"draft":257,"extension":258,"image":254,"meta":1831,"navigation":260,"path":1832,"seo":1833,"stem":1834,"tags":1835,"toolbar":254,"translationKey":1839,"updated":1829,"__hash__":1840},"blog/nl-nl/blog/zero-hallucination-qa.md","Hoe ik nul-hallucinatie Q&A in onze reader heb gebouwd",{"type":7,"value":440,"toc":1795},[441,447,460,462,466,473,478,482,500,505,516,521,555,558,562,579,586,590,605,610,647,654,658,671,696,701,818,836,842,844,848,855,870,877,897,903,905,909,912,918,920,924,947,957,1017,1020,1031,1040,1047,1049,1053,1064,1070,1077,1081,1088,1096,1103,1107,1117,1160,1171,1177,1179,1183,1197,1205,1211,1214,1249,1259,1267,1273,1280,1284,1292,1298,1309,1311,1315,1321,1325,1332,1336,1359,1366,1368,1372,1378,1436,1441,1443,1447,1454,1473,1477,1497,1508,1510,1514,1525,1528,1551,1562,1568,1570,1574,1589,1600,1602,1606,1627,1638,1640,1644,1663,1669,1671,1675,1763,1770,1781],[10,442,443],{},[13,444],{"alt":445,"src":446},"Omslag: nul-hallucinatie Q&A","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,448,449],{},[10,450,451,452,455,456,459],{},"Dit artikel beschrijft hoe we ",[117,453,454],{},"nul-hallucinatie Q&A"," in onze AI-reader hebben geïmplementeerd: antwoorden zijn strikt gebaseerd op de brontekst van het geopende boek, en belangrijke uitspraken zijn ",[117,457,458],{},"met één klik te traceren"," naar de exacte passage. Als je AI-lezen, document-Q&A of RAG-achtige apps bouwt, hopen we dat drie iteraties aan lessen en de uiteindelijke architectuur nuttig zijn.",[24,461],{},[27,463,465],{"id":464},"i-evolutie-in-drie-fasen","I. Evolutie in drie fasen",[10,467,468,469,472],{},"Nul-hallucinatie Q&A was niet vanaf dag één perfect ontworpen. Het evolueerde onder spanning tussen ",[117,470,471],{},"kosten, latentie en nauwkeurigheid",". Hieronder een chronologisch overzicht van drie fasen—nuttige context om te begrijpen waarom de huidige architectuur er zo uitziet.",[474,475],"mermaid",{":config":476,"code":477},"config","flowchart%20LR%0A%20%20%20%20P1%5BFase%201%3A%20volledige%20tekst%20dumpen%5D%20--%3E%20P2%5BFase%202%3A%20LLM%20sleutelzinnen%20extraheren%5D%0A%20%20%20%20P2%20--%3E%20P3%5BFase%203%3A%20segmentindex%20%2B%20Tool-retrieval%5D%0A%20%20%20%20P1%20-.-%3E%7CTraag%2C%20duur%2C%20onnauwkeurig%20bij%20lange%20boeken%7C%20X1%5BAfgeschaft%5D%0A%20%20%20%20P2%20-.-%3E%7CDetailverlies%2C%20nog%20traag%7C%20X2%5BAfgeschaft%5D%0A%20%20%20%20P3%20--%3E%7CHuidig%7C%20OK%5BNul%20hallucinatie%20%2B%20traceerbaar%5D",[61,479,481],{"id":480},"fase-1-de-volledige-boektekst-in-de-context-dumpen-eenvoudigsten-als-eerste-problematisch","Fase 1: de volledige boektekst in de context dumpen (eenvoudigst—en als eerste problematisch)",[10,483,484,487,488,491,492,495,496,499],{},[117,485,486],{},"Aanpak:"," Wanneer een gebruiker een boek opent en een vraag stelt, plaats je ",[117,489,490],{},"alle geëxtraheerde hoofdtekst"," in de system prompt of het user-bericht en laat je het chatmodel antwoorden. Overschrijdt het boek ongeveer ",[117,493,494],{},"400.000 tekens",", dan volgt ",[117,497,498],{},"harde truncatie","—alleen het begin blijft behouden; latere hoofdstukken zijn onzichtbaar voor het model.",[10,501,502],{},[117,503,504],{},"Voordelen:",[35,506,507,510,513],{},[38,508,509],{},"Zeer lage implementatiekosten; vrijwel geen preprocessing;",[38,511,512],{},"Werkt redelijk op korte boeken en eenvoudige documenten—het model heeft het boek echt «gezien»;",[38,514,515],{},"Eenvoudige UX: vragen en antwoord krijgen, geen «even wachten terwijl we analyseren»-status.",[10,517,518],{},[117,519,520],{},"Nadelen (snel onacceptabel):",[35,522,523,529,535,545],{},[38,524,525,528],{},[117,526,527],{},"Trage reacties:"," Bij elke vraag gaat een enorme payload mee; time-to-first-token en totale latentie groeien met de boeklengte;",[38,530,531,534],{},[117,532,533],{},"Hoge tokenkosten:"," Je betaalt bij elke vraag opnieuw voor de volledige boekinput;",[38,536,537,540,541,544],{},[117,538,539],{},"Lange boeken vervormen sterk:"," Na 400.000 tekens bestaan het tweede deel, bijlagen en conclusies feitelijk niet meer—en de UI geeft vaak ",[117,542,543],{},"niet duidelijk aan"," dat er is afgekapt;",[38,546,547,550,551,554],{},[117,548,549],{},"Nul retrieval-granulariteit:"," Het model moet «naar een speld in een hooiberg zoeken» over honderdduizenden tekens—gemakkelijk details missen en makkelijker ",[117,552,553],{},"plausibel klinkende samenvattingen zonder basis"," produceren—precies wat leesapps moeten vermijden.",[10,556,557],{},"Fase 1 is prima voor een MVP, niet voor een productwaardige oplossing.",[61,559,561],{"id":560},"fase-2-een-lichter-llm-gebruiken-om-sleutelzinnen-te-extraheren-context-comprimerenmaar-te-agressief","Fase 2: een lichter LLM gebruiken om sleutelzinnen te extraheren (context comprimeren—maar te agressief)",[10,563,564,566,567,570,571,574,575,578],{},[117,565,486],{}," Vóór Q&A (of bij eerste openen) draait een ",[117,568,569],{},"goedkoper model"," over de hoofdtekst: splitsen per spine-hoofdstuk (of het hele boek in stukken), ",[117,572,573],{},"sleutelzinnen"," extraheren, positietags zoals ",[99,576,577],{},"[fBestand-start-einde]"," behouden, en de fragmenten samenvoegen tot kortere context voor latere Q&A.",[10,580,581,582,585],{},"Typische pipeline: ",[117,583,584],{},"Extract → Cache → Chat",". Eén keer extraheren (offline of on demand), een «sleutelzinnenbundel» opslaan, hergebruiken bij elke vraag—dezelfde gedachte als veel document-Q&A-prototypes die eerst comprimeren en dan antwoorden.",[10,587,588],{},[117,589,504],{},[35,591,592,599,602],{},[38,593,594,595,598],{},"Elke vraag stuurt ",[117,596,597],{},"veel minder tekst","; tokenverbruik per request daalt t.o.v. fase 1;",[38,600,601],{},"Preprocessing kan worden gecached; geen her-extractie per vraag voor hetzelfde boek;",[38,603,604],{},"Positietags leggen de basis voor bronverwijzingen.",[10,606,607],{},[117,608,609],{},"Nadelen (blijft falen bij lange boeken):",[35,611,612,618,628,637],{},[38,613,614,617],{},[117,615,616],{},"Zwaar detailverlies:"," «Sleutelzinnen» worden door het model gekozen; beperkingen, tegenargumenten en argumentatieketens vallen vaak weg—antwoorden worden «correct maar eenzijdig»;",[38,619,620,623,624,627],{},[117,621,622],{},"Context nog groot bij lange boeken:"," Zelfs sleutelzinnenbundels voor grote werken zijn aanzienlijk—latentie en kosten zijn ",[117,625,626],{},"verlicht, niet opgelost",";",[38,629,630,633,634,627],{},[117,631,632],{},"Dubbele LLM-fout:"," Extractie kan missen; Q&A kan fragmenten verkeerd lezen—fouten ",[117,635,636],{},"stapelen",[38,638,639,642,643,646],{},[117,640,641],{},"Statische context:"," Of de gebruiker naar één hoofdstuk of de hele boekstructuur vraagt, het model krijgt altijd ",[117,644,645],{},"dezelfde vooraf geëxtraheerde blob","—geen dynamische vernauwing per vraag.",[10,648,649,650,653],{},"Les: het probleem is niet «of we comprimeren», maar ",[117,651,652],{},"of compressie on demand is en of we terug kunnen naar brontekst",".",[61,655,657],{"id":656},"fase-3-segmentindex-tool-retrieval-on-demand-brontekst-terug-huidig","Fase 3: segmentindex + Tool-retrieval on demand + brontekst terug (huidig)",[10,659,660,662,663,670],{},[117,661,486],{}," Geïnspireerd door ",[664,665,669],"a",{"href":666,"rel":667},"https://github.com/VectifyAI/PageIndex",[668],"nofollow","PageIndex",". T.o.v. fase 2 drie kernverschuivingen:",[672,673,674,680,690],"ol",{},[38,675,676,679],{},[117,677,678],{},"Preprocessing levert een gestructureerde index"," (inhoudsopgave-samenvattingen + exacte character spans), geen fragmenten die direct als Q&A-context dienen;",[38,681,682,685,686,689],{},[117,683,684],{},"Bij elke vraag gebruikt het model Tool Calling om on demand te retrieven",", en ",[117,687,688],{},"haalt brontekst met positietags"," op om te antwoorden;",[38,691,692,695],{},[117,693,694],{},"System prompt + frontend"," dwingen het citatieformaat af en ondersteunen klik-naar-springen met markering in de reader.",[10,697,698],{},[117,699,700],{},"Vergelijking drie fasen:",[702,703,704,723],"table",{},[705,706,707],"thead",{},[708,709,710,714,717,720],"tr",{},[711,712,713],"th",{},"Dimensie",[711,715,716],{},"Fase 1 (volledige dump)",[711,718,719],{},"Fase 2 (sleutelzinnen)",[711,721,722],{},"Fase 3 (huidig)",[724,725,726,745,759,773,787,804],"tbody",{},[708,727,728,732,735,738],{},[729,730,731],"td",{},"Context per vraag",[729,733,734],{},"Heel boek (of afgekapt eerste deel)",[729,736,737],{},"Vooraf geëxtraheerde sleutelzinnen",[729,739,740,741,744],{},"Alleen ",[117,742,743],{},"bron","fragmenten relevant voor de vraag",[708,746,747,750,753,756],{},[729,748,749],{},"Nauwkeurigheid lange boeken",[729,751,752],{},"Ineenstorting na ~400k tekens",[729,754,755],{},"Hangt af van extractie; verliest detail",[729,757,758],{},"Opzoeken via TOC/span; geen harde truncatie van heel boek",[708,760,761,764,767,770],{},[729,762,763],{},"Reactiesnelheid",[729,765,766],{},"Traag",[729,768,769],{},"Iets beter; lange boeken nog traag",[729,771,772],{},"Retrieval + korte context—merkbaar sneller",[708,774,775,778,781,784],{},[729,776,777],{},"Tokenkosten",[729,779,780],{},"Zeer hoog",[729,782,783],{},"Middelhoog",[729,785,786],{},"Gespreid preprocess + betalen naar behoefte",[708,788,789,792,795,798],{},[729,790,791],{},"Traceerbaarheid",[729,793,794],{},"Zwak (moeilijk te citeren)",[729,796,797],{},"Tags bestaan maar inhoud is tweemaal gefilterd",[729,799,800,801],{},"Voetnoten verwijzen naar ",[117,802,803],{},"echte bronspans",[708,805,806,809,812,815],{},[729,807,808],{},"Engineeringcomplexiteit",[729,810,811],{},"Laag",[729,813,814],{},"Middel",[729,816,817],{},"Hoog",[10,819,820,823,824,827,828,831,832,835],{},[117,821,822],{},"Waarom we stopten bij fase 3:"," Voor lezen is nul hallucinatie niet «laat het model zoveel mogelijk tekst zien», maar ",[117,825,826],{},"«haal vóór het antwoorden bronbewijs op voor de vraag»",". Fase 1–2 vochten ",[117,829,830],{},"contextgrootte","; fase 3 splitst de pipeline in ",[117,833,834],{},"index (preprocess) → retrieve (Tool) → bewijs (bron) → antwoord (beperkte generatie)","—nauwkeurigheid, kosten en traceerbaarheid in balans.",[10,837,838,839,653],{},"Hieronder details van ",[117,840,841],{},"fase 3",[24,843],{},[27,845,847],{"id":846},"ii-probleemstelling-bij-boek-qa-is-hallucinatie-erger-dan-in-generieke-chat","II. Probleemstelling: bij boek-Q&A is hallucinatie erger dan in generieke chat",[10,849,850,851,854],{},"Gebruikers vergeven af en toe fouten in een algemene chatbot. Bij ",[117,852,853],{},"boek-Q&A"," is de prijs hoger:",[35,856,857,864,867],{},[38,858,859,860,863],{},"Gebruikers vragen wat ",[117,861,862],{},"dit boek"," zegt—niet wat in het parametrische geheugen van het model zit;",[38,865,866],{},"Een plausibel klinkende «mening uit het boek» kan notities, citaten en herdelingen misleiden;",[38,868,869],{},"Zonder bronnen kan de gebruiker niet verifiëren—vertrouwen is moeilijk op te bouwen.",[10,871,872,873,876],{},"«Nul hallucinatie» wordt daarom drie ",[117,874,875],{},"afdwingbare"," regels:",[672,878,879,885,891],{},[38,880,881,884],{},[117,882,883],{},"Boekvragen moeten eerst het boek raadplegen:"," Alles wat plausibel over het geopende boek gaat, moet via retrieval (Tool) vóór het antwoord;",[38,886,887,890],{},[117,888,889],{},"Antwoorden moeten traceerbaar zijn:"," Belangrijke conclusies dragen positietags die de UI kan parsen en naar kan springen;",[38,892,893,896],{},[117,894,895],{},"Zeg het wanneer je het niet vindt:"," Staat het niet in het boek, zeg dat—verkleed geen algemene kennis als «wat het boek zegt».",[10,898,899,900,902],{},"Het vervolg volgt de ",[117,901,841],{},"-datastroom en hoe deze regels worden geïmplementeerd.",[24,904],{},[27,906,908],{"id":907},"iii-architectuur-preprocess-tool-retrieval-beperkte-generatie-klikbare-bronverwijzingen","III. Architectuur: Preprocess → Tool-retrieval → Beperkte generatie → Klikbare bronverwijzingen",[474,910],{":config":476,"code":911},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BOffline%20%2F%20eerste%20preprocess%5D%0A%20%20%20%20%20%20%20%20A%5BBoek%20splitsen%20op%20TOC%20of%20lengte%5D%20--%3E%20B%5BLLM%20segment-samenvattingen%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BSegment-cache%20lokaal%20persistent%20maken%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BGebruikersvraag%5D%0A%20%20%20%20%20%20%20%20D%5BGebruikersinvoer%5D%20--%3E%20E%7BSegment-cache%20bestaat%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNee%7C%20F%5BVolledige%20tekst%20extraheren%20%2F%20vragen%20om%20preprocess%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7CJa%7C%20G%5BTool%20Calling%20registreren%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BTool-retrieval%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BVraagtype%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7COverzicht%20%2F%20recensie%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFeiten%20%2F%20personen%20%2F%20hoofdstuk%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20kiest%20segment-ID's%20uit%20samenvattingscatalogus%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BBron%20ophalen%20per%20span%20%2B%20positietags%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BAlle%20segment-samenvattingen%20samenvoegen%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGenereren%20%26%20tonen%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BTool-resultaten%20terug%20naar%20model%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%5BSystem%20prompt%20citatieregels%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BAntwoord%20streamen%20%2B%20positie-voetnoten%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BKlikbare%20voetnoten%20renderen%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BKlik%20%E2%86%92%20preview%20%E2%86%92%20spring%20%26%20markeer%5D%0A%20%20%20%20end",[10,913,914,915],{},"Kernidee: ",[117,916,917],{},"laat het model niet «uit het geheugen antwoorden»—laat het «bewijs verzamelen, dan antwoorden, en bronnen markeren».",[24,919],{},[27,921,923],{"id":922},"iv-preprocessing-het-hele-boek-omzetten-in-een-doorzoekbare-segmentindex","IV. Preprocessing: het hele boek omzetten in een doorzoekbare segmentindex",[10,925,926,927,930,931,934,935,938,939,942,943,946],{},"Als elke vraag nog ",[117,928,929],{},"fase 1"," volledige boekcontext gebruikte, exploderen tokenbudgetten bij lange boeken en is retrieval te grof. Fase 3: bij de eerste AI-chat voor een boek draait op de achtergrond een ",[117,932,933],{},"segment-samenvattingstaak","—splitsen op ",[117,936,937],{},"TOC"," of ",[117,940,941],{},"tekstlengte"," in ",[99,944,945],{},"Segment","s, elk samenvatten, persistent in lokale IndexedDB.",[10,948,949,950,952,953,956],{},"Elk ",[99,951,945],{}," bevat samenvatting plus ",[117,954,955],{},"fysieke positie in de hoofdtekst",":",[702,958,959,969],{},[705,960,961],{},[708,962,963,966],{},[711,964,965],{},"Veld",[711,967,968],{},"Betekenis",[724,970,971,984,997,1007],{},[708,972,973,981],{},[729,974,975,102,978],{},[99,976,977],{},"startFileIndex",[99,979,980],{},"endFileIndex",[729,982,983],{},"Spine-bestandsindex (PDF: één bestand per pagina)",[708,985,986,994],{},[729,987,988,102,991],{},[99,989,990],{},"startOffset",[99,992,993],{},"endOffset",[729,995,996],{},"Teken begin/einde",[708,998,999,1004],{},[729,1000,1001],{},[99,1002,1003],{},"sequence",[729,1005,1006],{},"Lineaire leesvolgorde",[708,1008,1009,1014],{},[729,1010,1011],{},[99,1012,1013],{},"title",[729,1015,1016],{},"TOC-titel",[10,1018,1019],{},"Splitsen balanceert precisie en kosten: is de hoofdtekst van een TOC-node onder ~20KB, alleen die node samenvatten; sibling-nodes kunnen in batches (15–20KB) vóór LLM-aanroepen; ongestructureerde lange blokken splitsen in ~30–40k tekens.",[10,1021,1022,1023,1026,1027,1030],{},"De samenvattingssystem prompt vereist ",[117,1024,1025],{},"behoud van inline positietags"," (",[99,1028,1029],{},"[fNummer-Nummer-Nummer]",") zodat door Tool opgehaalde bron overeenkomt met spine-offsets. Kernbeperking:",[1032,1033,1038],"pre",{"className":1034,"code":1036,"language":1037,"meta":72},[1035],"language-text","Als samenvattingsinhoud betrekking heeft op een passage, behoud de positietag aan het einde [fNummer-Nummer-Nummer] (bijv. [f1-90-109]).\nTags zijn atomair—wijzig, voeg samen of laat geen enkel teken of cijfer weg.\n","text",[99,1039,1036],{"__ignoreMap":72},[10,1041,1042,1043,1046],{},"Na preprocessing hangt Q&A af van een ",[117,1044,1045],{},"gestructureerde segmentindex",", niet van hele-boek-context—de engineeringvoorwaarde voor nul hallucinatie bij lange boeken.",[24,1048],{},[27,1050,1052],{"id":1051},"v-positietagsysteem-waar-in-tekst-coderen","V. Positietagsysteem: «waar» in tekst coderen",[10,1054,1055,1056,1059,1060,1063],{},"Nul hallucinatie vereist inhoud uit de bron ",[117,1057,1058],{},"én"," machine-parseerbare, in de UI springbare ",[117,1061,1062],{},"herkomst",". We gebruiken inline tags:",[1032,1065,1068],{"className":1066,"code":1067,"language":1037},[1035],"[f{fileIndex}-{startChar}-{endChar}]\n",[99,1069,1067],{"__ignoreMap":72},[10,1071,1072,1073,1076],{},"Voorbeeld: ",[99,1074,1075],{},"[f5-123-165]"," = spine-bestand 5 (0-based), tekens 123–165.",[61,1078,1080],{"id":1079},"_51-hoe-tags-in-de-hoofdtekst-worden-geschreven","5.1 Hoe tags in de hoofdtekst worden geschreven",[10,1082,1083,1084,1087],{},"De extractielaag voegt aan segmenteinden ",[99,1085,1086],{},"[f{fileIndex}-{start}-{end}]"," toe:",[1032,1089,1094],{"className":1090,"code":1092,"language":1093,"meta":72},[1091],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[99,1095,1092],{"__ignoreMap":72},[10,1097,1098,1099,1102],{},"Of het nu preprocess-samenvattingen of Tool-fragmenten zijn: posities sluiten aan op ",[117,1100,1101],{},"spine-tekenoffsets","—geen door het model geschatte paginanummers.",[61,1104,1106],{"id":1105},"_52-beperkingen-op-modeloutput","5.2 Beperkingen op modeloutput",[10,1108,1109,1110,1116],{},"De system prompt bevat ",[117,1111,1112],{},[1113,1114,1115],"span",{},"Position Citation Rules","—vijf kernpunten:",[672,1118,1119,1129,1139,1145,1154],{},[38,1120,1121,1124,1125,1128],{},[117,1122,1123],{},"Standaardformaat:"," Moet ",[99,1126,1127],{},"[f_fileIndex-startChar-endChar]"," gebruiken; alle drie numerieke delen verplicht;",[38,1130,1131,1134,1135,1138],{},[117,1132,1133],{},"Alleen kopiëren uit huidige bronnen:"," Voetnoten moeten ",[117,1136,1137],{},"letterlijk"," uit system/user-berichten of Tool-returns van deze beurt komen;",[38,1140,1141,1144],{},[117,1142,1143],{},"Geen verzinsels:"," Bereken, bewerk of verzin geen posities;",[38,1146,1147,1150,1151,627],{},[117,1148,1149],{},"Liever weglaten:"," Geen geldige tag in context—antwoord normaal—",[117,1152,1153],{},"geen positietags outputten",[38,1155,1156,1159],{},[117,1157,1158],{},"Inline bij uitspraken:"," Tags volgen de relevante zin; geen citatielijsten aan het einde.",[10,1161,1162,1163,1166,1167,1170],{},"De UI filtert ook incidentele ",[117,1164,1165],{},"tweedelige"," ongeldige tags (bijv. ",[99,1168,1169],{},"[f1-293]",") vóór render.",[10,1172,1173],{},[13,1174],{"alt":1175,"src":1176},"Popup bronverwijzing","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[24,1178],{},[27,1180,1182],{"id":1181},"vi-tool-calling-eerst-retrieven-dan-antwoorden","VI. Tool Calling: eerst retrieven, dan antwoorden",[10,1184,1185,1186,1189,1190,1193,1194,653],{},"Wanneer chat aan een boek is gekoppeld (",[99,1187,1188],{},"resourceId"," aanwezig, ",[99,1191,1192],{},"chatType === 'chat'","), registreren we vóór elke generatie twee Tools met executors—standaard OpenAI-achtige ",[117,1195,1196],{},"function calling loop",[61,1198,1200,1201,1204],{"id":1199},"_61-get_related_segment_summaries-gerichte-segmentlookup","6.1 ",[99,1202,1203],{},"get_related_segment_summaries"," — gerichte segmentlookup",[10,1206,1207,1208,653],{},"Voor: concepten, personages, plot, hoofdstukdetails—",[117,1209,1210],{},"duidelijke retrieval-intentie",[10,1212,1213],{},"Flow:",[672,1215,1216,1223,1229,1232,1242],{},[38,1217,1218,1219,1222],{},"Model herschrijft gebruikersformulering naar ",[117,1220,1221],{},"termen die waarschijnlijk in het boek voorkomen"," («Optimize Search Queries» in system prompt);",[38,1224,1225,1226,627],{},"Tool aanroepen met ",[99,1227,1228],{},"question",[38,1230,1231],{},"Alle segment-samenvattingen batchen op tokenbudget (~30k tokens per batch, max 5 batches);",[38,1233,1234,1235,1238,1239,627],{},"Per batch: apart LLM-verzoek kiest relevante segment-ID's (max 5) uit ",[99,1236,1237],{},"{ id, title, summary }",", JSON zoals ",[99,1240,1241],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[38,1243,1244,1245,1248],{},"Voor geselecteerde segmenten ",[117,1246,1247],{},"getagde brontekst"," uit spine ophalen—geen samenvattingen—als Tool-resultaat.",[10,1250,1251,1254,1255,1258],{},[117,1252,1253],{},"Kernontwerp: Tool retourneert bron, geen samenvattingen."," Het model antwoordt van echte alinea's met inline ",[99,1256,1257],{},"[f…]",", vermijdt «samenvatting → hersamenvatting»-drift.",[61,1260,1262,1263,1266],{"id":1261},"_62-get_full_book_segment_summaries-heel-boek-overzicht","6.2 ",[99,1264,1265],{},"get_full_book_segment_summaries"," — heel-boek-overzicht",[10,1268,1269,1270,653],{},"Voor: «vat het boek samen», «recenseer dit boek», «algemene structuur/thema's»—",[117,1271,1272],{},"globaal beeld",[10,1274,1275,1276,1279],{},"Alle segment-",[99,1277,1278],{},"summary","-velden in leesvolgorde samenvoegen—voorkomt missen van sleutelhoofdstukken via alleen per-chunk relevantie.",[61,1281,1283],{"id":1282},"_63-system-prompt-book-first-tools-first","6.3 System prompt: Book first, tools first",[10,1285,1286,1287,956],{},"Met gekoppeld boek geldt ",[117,1288,1289],{},[1113,1290,1291],{},"Core Principles for Reading Assistant",[1032,1293,1296],{"className":1294,"code":1295,"language":1037},[1035],"1. Book First, Tool First\n   - Elke vraag die mogelijk over het boek gaat, moet eerst tools aanroepen;\n   - Antwoorden moeten vooral op retrieval steunen—nooit «boekinhoud» verzinnen zonder retrieval.\n\n2. General Knowledge as Fallback Only\n   - Alleen voor: informele chat / gebruiker slaat boek expliciet over / tools geven niets;\n   - Staat het niet in het boek, zeg «niet vermeld in dit boek» vóór algemene kennis.\n\n3. Direct Style\n   - Ga direct ter zake—vermijd «op basis van de aangeleverde materialen…» en vergelijkbare opvulling.\n",[99,1297,1295],{"__ignoreMap":72},[10,1299,1300,1301,1304,1305,1308],{},"Generatie draait de tool-loop: ",[99,1302,1303],{},"tool_calls"," → uitvoeren → ",[99,1306,1307],{},"role: tool"," toevoegen → doorgaan tot definitieve tekst. Met tools aan staat het thinking-kanaal uit om protocolconflicten te vermijden.",[24,1310],{},[27,1312,1314],{"id":1313},"vii-frontend-traceerbaarheid-van-voetnoot-naar-markering","VII. Frontend-traceerbaarheid: van voetnoot naar markering",[10,1316,1317,1318,1320],{},"Modeloutput ",[99,1319,1075],{}," wordt niet rauw getoond; de renderlaag maakt er klikbare citaten van.",[61,1322,1324],{"id":1323},"_71-voetnoten-renderen","7.1 Voetnoten renderen",[10,1326,1327,1328,1331],{},"Tags normaliseren naar Markdown-links zoals ",[99,1329,1330],{},"[1]([f5-123-165])",", renderen als genummerde voetnoten; deduplicatie van dezelfde positie tegen UI-rommel.",[61,1333,1335],{"id":1334},"_72-klikinteractie","7.2 Klikinteractie",[672,1337,1338,1347,1353],{},[38,1339,1340,1343,1344,1346],{},[117,1341,1342],{},"Eerste klik:"," Parse ",[99,1345,1257],{}," → fileIndex + offsets → spine-tekst extraheren → preview (optioneel TOC-titel);",[38,1348,1349,1352],{},[117,1350,1351],{},"Zelfde voetnoot opnieuw:"," Preview sluiten;",[38,1354,1355,1358],{},[117,1356,1357],{},"Spring bevestigen:"," Leesweergave openen, tekenbereik markeren.",[10,1360,1361,1362,1365],{},"Van gekopieerde modeltag tot zichtbare bron voor de gebruiker: de keten ",[117,1363,1364],{},"gaat nooit door een tweede LLM-aanroep","—deterministisch en reproduceerbaar.",[24,1367],{},[27,1369,1371],{"id":1370},"viii-randgevallen-en-eerlijke-degradatie","VIII. Randgevallen en eerlijke degradatie",[10,1373,1374,1375,956],{},"Nul hallucinatie ≠ «altijd een antwoord»—het betekent ",[117,1376,1377],{},"geen bewijs, geen verzinsels",[702,1379,1380,1390],{},[705,1381,1382],{},[708,1383,1384,1387],{},[711,1385,1386],{},"Scenario",[711,1388,1389],{},"Gedrag",[724,1391,1392,1400,1412,1420,1428],{},[708,1393,1394,1397],{},[729,1395,1396],{},"Segment-samenvattingen nog niet klaar",[729,1398,1399],{},"Eerst volledige tekst extraheren en samenvatten",[708,1401,1402,1405],{},[729,1403,1404],{},"Tool vindt niets",[729,1406,1407,1408,1411],{},"Retourneer ",[99,1409,1410],{},"(No relevant segment excerpts found…)","; model moet zeggen dat het niet in het boek staat",[708,1413,1414,1417],{},[729,1415,1416],{},"Ongeldige tweedelige tags van model",[729,1418,1419],{},"Frontend filtert; geen kapotte voetnoten",[708,1421,1422,1425],{},[729,1423,1424],{},"Informele chat",[729,1426,1427],{},"System prompt staat algemene kennis buiten het boek toe",[708,1429,1430,1433],{},[729,1431,1432],{},"Chat exporteren",[729,1434,1435],{},"Voetnoten kunnen reader-deeplinks worden voor delen/archiveren",[10,1437,1438],{},[13,1439],{"alt":1432,"src":1440},"https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[24,1442],{},[27,1444,1446],{"id":1445},"ix-ontwerpafweging-waarom-geen-vector-rag","IX. Ontwerpafweging: waarom geen «vector RAG»?",[10,1448,1449,1450,1453],{},"Peers die document-Q&A bouwen vragen vaak: als je retrieval-augmented generation doet, waarom geen ",[117,1451,1452],{},"Embedding + vector DB Top-K","?",[10,1455,1456,1457,1460,1461,1464,1465,1468,1469,1472],{},"We ",[117,1458,1459],{},"doen RAG","—retrieven vóór genereren. Het verschil: «RAG» in communitytaal impliceert vaak ",[117,1462,1463],{},"vector-gelijkenis","; onze fase 3 is ",[117,1466,1467],{},"segmentindex + Tool on-demand bronpull","—",[117,1470,1471],{},"bewust geen vectorlaag",". Hieronder architecturale redenen, geen ontkenning van de waarde van vector RAG.",[61,1474,1476],{"id":1475},"scope-niet-geen-retrieval-maar-geen-vector-retrieval","Scope: niet «geen retrieval», maar «geen vector-retrieval»",[35,1478,1479,1488],{},[38,1480,1481,1484,1485,627],{},[117,1482,1483],{},"Brede RAG:"," ophalen → genereren → ",[117,1486,1487],{},"dat doen we",[38,1489,1490,1493,1494,653],{},[117,1491,1492],{},"Vector RAG:"," recall via embedding-gelijkenis → ",[117,1495,1496],{},"niet in deze versie",[10,1498,1499,1500,1503,1504,1507],{},"Preprocessing bouwt een ",[117,1501,1502],{},"segment-samenvattingsindex","; het model kiest segmenten via Tools en krijgt ",[117,1505,1506],{},"brontekst",". Retrieval bestaat zonder apart embedding-model en vectorindex-onderhoud.",[24,1509],{},[61,1511,1513],{"id":1512},"reden-1-aangepaste-llm-providershoud-het-integratieoppervlak-klein","Reden 1: aangepaste LLM-providers—houd het integratieoppervlak klein",[10,1515,1516,1517,1520,1521,1524],{},"Gebruikers kunnen ",[117,1518,1519],{},"eigen API-keys",", custom base URL's of ",[117,1522,1523],{},"lokale Ollama"," koppelen—chatmodel is hun keuze; kosten en datapad blijven onder controle.",[10,1526,1527],{},"Typische vector RAG verbreedt integratie:",[35,1529,1530,1541,1544],{},[38,1531,1532,1533,1536,1537,1540],{},"Naast ",[117,1534,1535],{},"chatmodel"," meestal een ",[117,1538,1539],{},"embeddingmodel"," (andere naam, soms ander endpoint);",[38,1542,1543],{},"Lokale Ollama heeft apart embeddingmodel plus dimensie/API-compatibiliteit;",[38,1545,1546,1547,1550],{},"Meer faalmodi: chat werkt maar ",[117,1548,1549],{},"lege retrieval","—embedding, index of dimensiemismatch; moeilijker te debuggen dan één provider end-to-end.",[10,1552,1553,1554,1557,1558,1561],{},"Hier delen ",[117,1555,1556],{},"segmentkeuze en antwoorden één providerconfig","—geen «chat op A, index op B». Voor ",[117,1559,1560],{},"plug-in LLM","-apps weegt dat vaak zwaarder dan enkele recallpunten.",[10,1563,1564],{},[13,1565],{"alt":1566,"src":1567},"Aangepaste AI-providers","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[24,1569],{},[61,1571,1573],{"id":1572},"reden-2-embeddings-binden-aan-de-indexproviderwissels-zijn-duur","Reden 2: embeddings binden aan de index—providerwissels zijn duur",[10,1575,1576,1577,1580,1581,1584,1585,1588],{},"In vector RAG zijn ",[117,1578,1579],{},"vectoren geen universeel tussenformaat","—het zijn coördinaten onder één embeddingmodel. Index met A, query met B: gelijkenis is meestal ",[117,1582,1583],{},"niet vergelijkbaar","—vaak ",[117,1586,1587],{},"volledige her-embedding",", en dimensies (768 / 1024 / 1536 …) vergrendelen het opslagschema.",[10,1590,1591,1592,1595,1596,1599],{},"Fase 3 persist ",[117,1593,1594],{},"gestructureerde samenvattingen + character spans",", geen vectoren; chatmodel wisselen ",[117,1597,1598],{},"bouwt de index niet opnieuw","; bewijsketen (bronposities) blijft gelijk—in lijn met «probeer anytime verschillende LLM's».",[24,1601],{},[61,1603,1605],{"id":1604},"reden-3-gestructureerde-routing-is-vaak-genoeg-voor-toc-zware-lange-docs","Reden 3: gestructureerde routing is vaak genoeg voor TOC-zware lange docs",[10,1607,1608,1609,1612,1613,1616,1617,1620,1621,1626],{},"E-boeken en PDF's hebben meestal ",[117,1610,1611],{},"hoofdstukstructuur","; preprocessing levert ",[117,1614,1615],{},"segmenttitels + samenvattingen",". Voor «wat zegt hoofdstuk X» of «hoe definieert het boek Y» werkt segmentkeuze uit de catalogus en dan ",[117,1618,1619],{},"bron ophalen"," stabiel in de praktijk; Tool retourneert ",[117,1622,1623,1624],{},"bron met ",[99,1625,1257],{},", dus nul hallucinatie blijft verankerd op character spans.",[10,1628,1629,1630,1633,1634,1637],{},"Vectoren helpen bij vage semantiek, meertaligheid, lange letterlijke mismatch; voor readers met ",[117,1631,1632],{},"TOC + preprocess + sterke traceerbaarheid"," is investeren in ",[117,1635,1636],{},"Tool + bronreturn + citatieregels"," vaak betere ROI.",[24,1639],{},[61,1641,1643],{"id":1642},"toekomst-hybride-recall-geen-herschrijving","Toekomst: hybride recall, geen herschrijving",[10,1645,1646,1647,1650,1651,1654,1655,1658,1659,1662],{},"We kunnen ",[117,1648,1649],{},"vector grove recall"," toevoegen (embedding alleen voor Top-N hoofdstukkandidaten), nog steeds eindigend in ",[117,1652,1653],{},"segment kiezen → bron → klikbare trace","—nul-hallucinatieregels ongewijzigd. Indien toegevoegd: embedding ",[117,1656,1657],{},"optioneel",", expliciete ",[117,1660,1661],{},"her-index","-meldingen bij modelwissel—vermijd stille verkeerde retrieval.",[10,1664,1665,1666],{},"Tot dan: ",[117,1667,1668],{},"elke OpenAI-compatibele chat-API werkt; chatmodel wisselen herbouwt de lokale index niet.",[24,1670],{},[27,1672,1674],{"id":1673},"x-samenvatting","X. Samenvatting",[702,1676,1677,1690],{},[705,1678,1679],{},[708,1680,1681,1684,1687],{},[711,1682,1683],{},"Stap",[711,1685,1686],{},"Methode",[711,1688,1689],{},"Rol",[724,1691,1692,1703,1716,1730,1741,1752],{},[708,1693,1694,1697,1700],{},[729,1695,1696],{},"Preprocess",[729,1698,1699],{},"Splitsen op TOC/lengte + segment-samenvattingcache",[729,1701,1702],{},"Lange boeken doorzoekbaar & lokaliseerbaar",[708,1704,1705,1708,1713],{},[729,1706,1707],{},"Positietags",[729,1709,1710,1712],{},[99,1711,577],{}," in bron",[729,1714,1715],{},"Machine-parseerbare herkomst",[708,1717,1718,1721,1727],{},[729,1719,1720],{},"Tool-retrieval",[729,1722,1723,1724,1726],{},"Per vraag segmenten / heel-boek-samenvattingen, ",[117,1725,743],{}," terug",[729,1728,1729],{},"Bewijs afdwingen vóór antwoord",[708,1731,1732,1735,1738],{},[729,1733,1734],{},"System prompt",[729,1736,1737],{},"Book first, geen valse tags, zeg wanneer ontbreekt",[729,1739,1740],{},"Generatie beperken",[708,1742,1743,1746,1749],{},[729,1744,1745],{},"Frontend",[729,1747,1748],{},"Voetnoot → preview → spring & markeer",[729,1750,1751],{},"Gebruiker verifieert bewijs",[708,1753,1754,1757,1760],{},[729,1755,1756],{},"Geen vector-retrieval",[729,1758,1759],{},"Eén provider; chatmodel wisselen zonder re-index",[729,1761,1762],{},"Lagere integratie- & migratiekosten",[10,1764,1765,1766,1769],{},"«Nul hallucinatie» betekent niet dat het model nooit fout gaat—het betekent ",[117,1767,1768],{},"engineering die output aan een bewijsketen koppelt",": geen retrieval → niet doen alsof het boekinhoud is; met retrieval → verifieerbare bronposities geven.",[10,1771,1772,1773,1776,1777,1780],{},"Als je AI-lezen of document-Q&A bouwt, hopen we dat het pad ",[117,1774,1775],{},"volledige dump → sleutelzinnen → Tool-first on demand retrieval",", plus ",[117,1778,1779],{},"inline positietags + bronreturn",", een nuttige referentie-implementatie is.",[18,1782,1783],{},[10,1784,1785,1786,1790,1791,653],{},"Dit zijn lessen uit het bouwen van de ",[664,1787,267],{"href":1788,"rel":1789},"https://reader.linghuxiong.com",[668]," AI-reader—alleen ter referentie. Probeer de reader op de ",[664,1792,1794],{"href":1793},"/nl-nl#download","downloadpagina",{"title":72,"searchDepth":238,"depth":238,"links":1796},[1797,1802,1803,1804,1805,1809,1816,1820,1821,1828],{"id":464,"depth":238,"text":465,"children":1798},[1799,1800,1801],{"id":480,"depth":244,"text":481},{"id":560,"depth":244,"text":561},{"id":656,"depth":244,"text":657},{"id":846,"depth":238,"text":847},{"id":907,"depth":238,"text":908},{"id":922,"depth":238,"text":923},{"id":1051,"depth":238,"text":1052,"children":1806},[1807,1808],{"id":1079,"depth":244,"text":1080},{"id":1105,"depth":244,"text":1106},{"id":1181,"depth":238,"text":1182,"children":1810},[1811,1813,1815],{"id":1199,"depth":244,"text":1812},"6.1 get_related_segment_summaries — gerichte segmentlookup",{"id":1261,"depth":244,"text":1814},"6.2 get_full_book_segment_summaries — heel-boek-overzicht",{"id":1282,"depth":244,"text":1283},{"id":1313,"depth":238,"text":1314,"children":1817},[1818,1819],{"id":1323,"depth":244,"text":1324},{"id":1334,"depth":244,"text":1335},{"id":1370,"depth":238,"text":1371},{"id":1445,"depth":238,"text":1446,"children":1822},[1823,1824,1825,1826,1827],{"id":1475,"depth":244,"text":1476},{"id":1512,"depth":244,"text":1513},{"id":1572,"depth":244,"text":1573},{"id":1604,"depth":244,"text":1605},{"id":1642,"depth":244,"text":1643},{"id":1673,"depth":238,"text":1674},"2026-06-03","Technische notities over nul-hallucinatie Q&A in een AI-reader—antwoorden gebaseerd op de huidige boektekst, met bronverwijzingen in één klik naar exacte passages.",{},"/nl-nl/blog/zero-hallucination-qa",{"title":438,"description":1830},"nl-nl/blog/zero-hallucination-qa",[1836,1837,1838],"reader","AI","techniek","zero-hallucination-qa","gxMYlJfB8eAB7BakuNSIisf_FYey7WhkraYR1nVl0LQ",1786513819845]