[{"data":1,"prerenderedAt":1431},["ShallowReactive",2],{"blog-list-sv-se":3},[4],{"id":5,"title":6,"body":7,"config":1415,"date":1416,"description":1417,"draft":1418,"extension":1419,"image":1415,"meta":1420,"navigation":1421,"path":1422,"seo":1423,"stem":1424,"tags":1425,"toolbar":1415,"translationKey":1429,"updated":1416,"__hash__":1430},"blog/sv-se/blog/zero-hallucination-qa.md","Hur jag byggde noll-hallucination Q&A i läsaren",{"type":8,"value":9,"toc":1379},"minimark",[10,18,33,36,41,48,53,58,76,81,94,99,133,136,140,158,165,169,184,189,226,233,237,250,275,280,397,415,421,423,427,434,449,456,476,482,484,488,491,497,499,503,526,536,597,600,611,621,628,630,634,645,651,658,662,669,677,684,688,698,741,752,758,760,764,779,787,793,796,831,841,849,855,862,866,874,880,891,893,897,903,907,914,918,941,948,950,954,960,1018,1024,1026,1030,1037,1056,1060,1080,1091,1093,1097,1108,1111,1134,1145,1151,1153,1157,1172,1183,1185,1189,1210,1221,1223,1227,1246,1252,1254,1258,1346,1353,1364],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"Omslag: Noll-hallucination Q&A","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[19,20,21],"blockquote",{},[11,22,23,24,28,29,32],{},"Det här inlägget delar hur vi implementerade ",[25,26,27],"strong",{},"noll-hallucination Q&A"," i vår AI-läsare: svar grundas strikt i texten i den bok du har öppen, och viktiga påståenden kan ",[25,30,31],{},"spåras i ett klick"," till exakt stycke. Om du bygger AI-läsning, dokument-Q&A eller RAG-liknande appar hoppas tre iterationers lärdomar och den slutliga arkitekturen vara till nytta.",[34,35],"hr",{},[37,38,40],"h2",{"id":39},"i-utveckling-i-tre-steg","I. Utveckling i tre steg",[11,42,43,44,47],{},"Noll-hallucination Q&A designades inte perfekt dag ett. Det utvecklades under spänning mellan ",[25,45,46],{},"kostnad, latens och träffsäkerhet",". Nedan följer en kronologisk bild av tre steg—användbar kontext för varför den nuvarande arkitekturen ser ut som den gör.",[49,50],"mermaid",{":config":51,"code":52},"config","flowchart%20LR%0A%20%20%20%20P1%5BSteg%201%3A%20Hela%20texten%20i%20kontext%5D%20--%3E%20P2%5BSteg%202%3A%20LLM%20extraherar%20nyckelmeningar%5D%0A%20%20%20%20P2%20--%3E%20P3%5BSteg%203%3A%20Segmentindex%20%2B%20Tool%20retrieval%5D%0A%20%20%20%20P1%20-.-%3E%7CL%C3%A5ngsamt%2C%20dyrt%2C%20fel%20p%C3%A5%20l%C3%A5nga%20b%C3%B6cker%7C%20X1%5BAvvecklat%5D%0A%20%20%20%20P2%20-.-%3E%7CTappar%20detaljer%2C%20fortfarande%20l%C3%A5ngsamt%7C%20X2%5BAvvecklat%5D%0A%20%20%20%20P3%20--%3E%7CNuvarande%7C%20OK%5BNoll%20hallucination%20%2B%20sp%C3%A5rbar%5D",[54,55,57],"h3",{"id":56},"steg-1-stoppa-in-hela-boken-i-kontexten-enklastoch-först-att-brista","Steg 1: Stoppa in hela boken i kontexten (enklast—och först att brista)",[11,59,60,63,64,67,68,71,72,75],{},[25,61,62],{},"Tillvägagångssätt:"," När användaren öppnar en bok och ställer en fråga läggs ",[25,65,66],{},"all extraherad brödtext"," i System Prompt eller användarmeddelande och chattmodellen svarar. Överskrider boken cirka ",[25,69,70],{},"400 000 tecken"," sker ",[25,73,74],{},"hård trunkering","—bara början behålls; senare kapitel är osynliga för modellen.",[11,77,78],{},[25,79,80],{},"Fördelar:",[82,83,84,88,91],"ul",{},[85,86,87],"li",{},"Mycket låg implementeringskostnad; nästan ingen förbehandling;",[85,89,90],{},"Fungerar rimligt på korta böcker och enkla dokument—modellen «såg verkligen hela boken»;",[85,92,93],{},"Enkel UX: fråga och få svar, inget «vänta medan vi analyserar».",[11,95,96],{},[25,97,98],{},"Nackdelar (snabbt oacceptabla):",[82,100,101,107,113,123],{},[85,102,103,106],{},[25,104,105],{},"Långsamma svar:"," Varje fråga skickar om en enorm payload; tid till första token och total latens växer med boklängd;",[85,108,109,112],{},[25,110,111],{},"Hög tokenkostnad:"," Du betalar för hela bokens input vid varje fråga;",[85,114,115,118,119,122],{},[25,116,117],{},"Långa böcker förvrängs:"," Efter 400 000 tecken kan andra halvan, bilagor och slutsatser lika gärna saknas—och UI:t säger ofta ",[25,120,121],{},"inte tydligt"," att trunkering skett;",[85,124,125,128,129,132],{},[25,126,127],{},"Noll retrieval-granularitet:"," Modellen måste «hitta nålen i höstacken» över hundratusentals tecken—lätt att missa detaljer och lättare att producera ",[25,130,131],{},"plausibla sammanfattningar utan underlag","—precis vad läsappar måste undvika.",[11,134,135],{},"Steg 1 duger för MVP, inte för produktkvalitet.",[54,137,139],{"id":138},"steg-2-lättare-llm-extraherar-nyckelmeningar-komprimera-kontextmen-för-hårt","Steg 2: Lättare LLM extraherar nyckelmeningar (komprimera kontext—men för hårt)",[11,141,142,144,145,148,149,152,153,157],{},[25,143,62],{}," Före Q&A (eller vid första öppning) körs en ",[25,146,147],{},"billigare modell"," över brödtexten: dela per Spine-kapitel (eller chunka hela boken), extrahera ",[25,150,151],{},"nyckelmeningar",", behåll positions-taggar som ",[154,155,156],"code",{},"[fFil-start-slut]",", sedan sammanfoga utdrag till kortare kontext för senare Q&A.",[11,159,160,161,164],{},"Typisk pipeline: ",[25,162,163],{},"Extract → Cache → Chat",". Extrahera en gång (offline eller på begäran), lagra «nyckelmeningsbunt», återanvänd vid varje fråga—samma idé som många dokument-Q&A-prototyper som komprimerar först och sedan svarar.",[11,166,167],{},[25,168,80],{},[82,170,171,178,181],{},[85,172,173,174,177],{},"Varje fråga skickar ",[25,175,176],{},"mycket mindre text","; token per förfrågan sjunker mot steg 1;",[85,179,180],{},"Förbehandling kan cachas; ingen om-extrahering per fråga på samma bok;",[85,182,183],{},"Positionstaggar lägger grund för citeringar.",[11,185,186],{},[25,187,188],{},"Nackdelar (håller fortfarande inte på långa böcker):",[82,190,191,197,207,216],{},[85,192,193,196],{},[25,194,195],{},"Stor detaljförlust:"," «Nyckelmeningar» väljs av modellen; kvalificerare, motexempel och argumentkedjor tappas ofta—svar blir «korrekta men ensidiga»;",[85,198,199,202,203,206],{},[25,200,201],{},"Kontext fortfarande stor på långa böcker:"," Även nyckelmeningsbuntar för stora verk är betydande—latens och kostnad ",[25,204,205],{},"lättas, inte löses",";",[85,208,209,212,213,206],{},[25,210,211],{},"Dubbelt LLM-fel:"," Extrahering kan missa; Q&A kan feltolka utdrag—fel ",[25,214,215],{},"staplas",[85,217,218,221,222,225],{},[25,219,220],{},"Statisk kontext:"," Oavsett om användaren frågar om ett kapitel eller helboksstruktur får modellen alltid samma ",[25,223,224],{},"för-extraherade blob","—ingen dynamisk avgränsning per fråga.",[11,227,228,229,232],{},"Lärdom: frågan är inte «om vi komprimerar», utan ",[25,230,231],{},"om komprimering sker på begäran och om vi kan återgå till källtext",".",[54,234,236],{"id":235},"steg-3-segmentindex-tool-retrieval-på-begäran-källtext-tillbaka-nuvarande","Steg 3: Segmentindex + Tool retrieval på begäran + källtext tillbaka (nuvarande)",[11,238,239,241,242,249],{},[25,240,62],{}," Inspirerat av ",[243,244,248],"a",{"href":245,"rel":246},"https://github.com/VectifyAI/PageIndex",[247],"nofollow","PageIndex",". Mot steg 2, tre kärnskiften:",[251,252,253,259,269],"ol",{},[85,254,255,258],{},[25,256,257],{},"Förbehandling ger strukturerat index"," (innehållsförteckningssammanfattningar + exakta tecken-spans), inte utdrag som direkt Q&A-kontext;",[85,260,261,264,265,268],{},[25,262,263],{},"Varje fråga använder Tool Calling för retrieval på begäran",", sedan ",[25,266,267],{},"hämtar källtext med positionstaggar"," för svar;",[85,270,271,274],{},[25,272,273],{},"System Prompt + frontend"," tvingar citeringsformat och stödjer klick-till-hopp med markering i läsaren.",[11,276,277],{},[25,278,279],{},"Jämförelse av tre steg:",[281,282,283,302],"table",{},[284,285,286],"thead",{},[287,288,289,293,296,299],"tr",{},[290,291,292],"th",{},"Dimension",[290,294,295],{},"Steg 1 (hel dump)",[290,297,298],{},"Steg 2 (nyckelmeningar)",[290,300,301],{},"Steg 3 (nuvarande)",[303,304,305,324,338,352,366,383],"tbody",{},[287,306,307,311,314,317],{},[308,309,310],"td",{},"Kontext per fråga",[308,312,313],{},"Hela boken (eller trunkerad första halva)",[308,315,316],{},"För-extraherade nyckelmeningar",[308,318,319,320,323],{},"Endast ",[25,321,322],{},"käll","-utdrag relevanta för frågan",[287,325,326,329,332,335],{},[308,327,328],{},"Träffsäkerhet långa böcker",[308,330,331],{},"Kollapsar efter ~400k tecken",[308,333,334],{},"Beror på extrahering; tappar detaljer",[308,336,337],{},"Hämta via TOC/span; ingen hård helbokstrunkering",[287,339,340,343,346,349],{},[308,341,342],{},"Svarshastighet",[308,344,345],{},"Långsam",[308,347,348],{},"Något bättre; långa böcker fortfarande långsamma",[308,350,351],{},"Retrieval + kort kontext—märkbart snabbare",[287,353,354,357,360,363],{},[308,355,356],{},"Tokenkostnad",[308,358,359],{},"Mycket hög",[308,361,362],{},"Medelhög",[308,364,365],{},"Amorterad förbehandling + betala vid behov",[287,367,368,371,374,377],{},[308,369,370],{},"Spårbarhet",[308,372,373],{},"Svag (svårt att citera)",[308,375,376],{},"Taggar finns men innehåll redan filtrerat",[308,378,379,380],{},"Fotnoter mappar till ",[25,381,382],{},"riktiga käll-spans",[287,384,385,388,391,394],{},[308,386,387],{},"Teknisk komplexitet",[308,389,390],{},"Låg",[308,392,393],{},"Medel",[308,395,396],{},"Hög",[11,398,399,402,403,406,407,410,411,414],{},[25,400,401],{},"Varför vi stannade vid steg 3:"," För läsning är noll hallucination inte «visa modellen så mycket text som möjligt», utan ",[25,404,405],{},"«innan svar, hämta källevidens för frågan»",". Steg 1–2 kämpade om ",[25,408,409],{},"kontextstorlek","; steg 3 delar pipelinen i ",[25,412,413],{},"index (förbehandla) → hämta (Tool) → evidens (källa) → svara (begränsad generering)","—balanserar träffsäkerhet, kostnad och spårbarhet.",[11,416,417,418,232],{},"Nedan detaljer för ",[25,419,420],{},"steg 3",[34,422],{},[37,424,426],{"id":425},"ii-problemformulering-i-bok-qa-gör-hallucination-mer-ont-än-i-generisk-chatt","II. Problemformulering: I bok-Q&A gör hallucination mer ont än i generisk chatt",[11,428,429,430,433],{},"Användare förlåter tillfälliga fel i en generell chatbot. I ",[25,431,432],{},"bok-Q&A"," är kostnaden högre:",[82,435,436,443,446],{},[85,437,438,439,442],{},"De frågar vad ",[25,440,441],{},"den här boken"," säger—inte vad som finns i modellens parametriska minne;",[85,444,445],{},"Ett plausibelt «bokens synpunkt» kan vilseleda anteckningar, citeringar och vidaredelning;",[85,447,448],{},"Utan källor kan de inte verifiera—förtroende är svårt att bygga.",[11,450,451,452,455],{},"Så «noll hallucination» blir tre ",[25,453,454],{},"genomförbara"," regler:",[251,457,458,464,470],{},[85,459,460,463],{},[25,461,462],{},"Bokfrågor måste fråga boken först:"," Allt som rimligen gäller den öppna boken måste genom retrieval (Tool) före svar;",[85,465,466,469],{},[25,467,468],{},"Svar måste vara spårbara:"," Viktiga påståenden bär positionstaggar som UI kan tolka och hoppa till;",[85,471,472,475],{},[25,473,474],{},"Säg när du inte hittar:"," Finns det inte i boken, säg det—klä inte allmän kunskap som «vad boken säger».",[11,477,478,479,481],{},"Resten följer ",[25,480,420],{}," dataflöde och hur reglerna implementeras.",[34,483],{},[37,485,487],{"id":486},"iii-arkitektur-förbehandla-tool-retrieval-begränsad-generering-klickbara-citeringar","III. Arkitektur: Förbehandla → Tool retrieval → Begränsad generering → Klickbara citeringar",[49,489],{":config":51,"code":490},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BOffline%20%2F%20f%C3%B6rsta%20g%C3%A5ngen%20f%C3%B6rbehandling%5D%0A%20%20%20%20%20%20%20%20A%5BDela%20bok%20efter%20TOC%20eller%20l%C3%A4ngd%5D%20--%3E%20B%5BLLM%20segment-sammanfattningar%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BPersist%20Segment-cache%20lokalt%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BAnv%C3%A4ndarfr%C3%A5ga%5D%0A%20%20%20%20%20%20%20%20D%5BAnv%C3%A4ndarinput%5D%20--%3E%20E%7BFinns%20Segment-cache%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNej%7C%20F%5BExtrahera%20full%20text%20%2F%20be%20om%20f%C3%B6rbehandling%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%5BRegistrera%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BTool%20retrieval%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BFr%C3%A5getyp%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%C3%96versikt%20%2F%20recension%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFakta%20%2F%20personer%20%2F%20kapitel%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20v%C3%A4ljer%20segment-ID%20fr%C3%A5n%20sammanfattningskatalog%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BH%C3%A4mta%20k%C3%A4lla%20per%20span%20%2B%20positionstaggar%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BSammanfoga%20alla%20segment-sammanfattningar%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGenerera%20och%20visa%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BTool-resultat%20tillbaka%20till%20modell%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%20citeringsregler%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BStr%C3%B6mma%20svar%20%2B%20positionsfotnoter%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BRendera%20klickbara%20fotnoter%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BKlick%20%E2%86%92%20f%C3%B6rhandsgranska%20%E2%86%92%20hoppa%20och%20markera%5D%0A%20%20%20%20end",[11,492,493,494],{},"Kärnidé: ",[25,495,496],{},"låt inte modellen «svara ur minnet»—tvinga den att «samla evidens, svara och markera källor».",[34,498],{},[37,500,502],{"id":501},"iv-förbehandling-gör-hela-boken-till-ett-sökbart-segmentindex","IV. Förbehandling: Gör hela boken till ett sökbart segmentindex",[11,504,505,506,509,510,513,514,517,518,521,522,525],{},"Om varje fråga fortfarande använde helbokskontext från ",[25,507,508],{},"steg 1"," spränger långa böcker tokenbudget och retrieval är för grov. Steg 3: vid första AI-chatt för en bok körs ",[25,511,512],{},"segment-sammanfattningsjobb"," i bakgrunden—dela efter ",[25,515,516],{},"TOC"," eller ",[25,519,520],{},"textlängd"," i ",[154,523,524],{},"Segment",", sammanfatta varje, persist i lokal IndexedDB.",[11,527,528,529,531,532,535],{},"Varje ",[154,530,524],{}," innehåller sammanfattning plus ",[25,533,534],{},"fysisk position i brödtext",":",[281,537,538,548],{},[284,539,540],{},[287,541,542,545],{},[290,543,544],{},"Fält",[290,546,547],{},"Betydelse",[303,549,550,564,577,587],{},[287,551,552,561],{},[308,553,554,557,558],{},[154,555,556],{},"startFileIndex"," / ",[154,559,560],{},"endFileIndex",[308,562,563],{},"Spine-filindex (PDF: en fil per sida)",[287,565,566,574],{},[308,567,568,557,571],{},[154,569,570],{},"startOffset",[154,572,573],{},"endOffset",[308,575,576],{},"Tecken start/slut",[287,578,579,584],{},[308,580,581],{},[154,582,583],{},"sequence",[308,585,586],{},"Linjär läsordning",[287,588,589,594],{},[308,590,591],{},[154,592,593],{},"title",[308,595,596],{},"TOC-titel",[11,598,599],{},"Delning balanserar precision och kostnad: om en TOC-nods brödtext är under ~20KB, sammanfatta bara den noden; syskon kan slås ihop i batchar (15–20KB) före LLM-anrop; ostrukturerade långa block delas i ~30–40k teckenintervall.",[11,601,602,603,606,607,610],{},"Sammanfattnings-System Prompt kräver ",[25,604,605],{},"behålla inline positionstaggar"," (",[154,608,609],{},"[fNummer-Nummer-Nummer]",") så Tool-hämtad källa stämmer med Spine-offsets. Kärnbegränsning:",[612,613,619],"pre",{"className":614,"code":616,"language":617,"meta":618},[615],"language-text","Om sammanfattning relaterar till ett stycke, behåll avslutande positionstagg [fNummer-Nummer-Nummer] (t.ex. [f1-90-109]).\nTaggar är atomära—ändra, slå ihop eller utelämna inte tecken eller siffror.\n","text","",[154,620,616],{"__ignoreMap":618},[11,622,623,624,627],{},"Efter förbehandling beror Q&A på ",[25,625,626],{},"strukturerat segmentindex",", inte helbokskontext—tekniskt förutsättning för noll hallucination på långa böcker.",[34,629],{},[37,631,633],{"id":632},"v-positionstaggsystem-koda-var-i-text","V. Positionstaggsystem: Koda «var» i text",[11,635,636,637,640,641,644],{},"Noll hallucination kräver innehåll från källa ",[25,638,639],{},"och"," maskintolkbar, UI-hoppbar ",[25,642,643],{},"härkomst",". Vi använder inline-taggar:",[612,646,649],{"className":647,"code":648,"language":617},[615],"[f{fileIndex}-{startChar}-{endChar}]\n",[154,650,648],{"__ignoreMap":618},[11,652,653,654,657],{},"Exempel: ",[154,655,656],{},"[f5-123-165]"," = Spine-fil 5 (0-baserad), tecken 123–165.",[54,659,661],{"id":660},"_51-hur-taggar-skrivs-in-i-brödtext","5.1 Hur taggar skrivs in i brödtext",[11,663,664,665,668],{},"Extraheringslagret lägger till ",[154,666,667],{},"[f{fileIndex}-{start}-{end}]"," i segmentets slut:",[612,670,675],{"className":671,"code":673,"language":674,"meta":618},[672],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[154,676,673],{"__ignoreMap":618},[11,678,679,680,683],{},"Oavsett förbehandlingssammanfattningar eller Tool-utdrag stämmer positioner med ",[25,681,682],{},"Spine-teckenoffset","—inte modellens gissade sidnummer.",[54,685,687],{"id":686},"_52-begränsningar-på-modellutdata","5.2 Begränsningar på modellutdata",[11,689,690,691,697],{},"System Prompt inkluderar ",[25,692,693],{},[694,695,696],"span",{},"Position Citation Rules","—fem kärnpunkter:",[251,699,700,710,720,726,735],{},[85,701,702,705,706,709],{},[25,703,704],{},"Standardformat:"," Måste använda ",[154,707,708],{},"[f_fileIndex-startChar-endChar]","; alla tre numeriska delar krävs;",[85,711,712,715,716,719],{},[25,713,714],{},"Kopiera endast från aktuella källor:"," Fotnoter ",[25,717,718],{},"ordagrant"," från denna rundas system/user-meddelanden eller Tool-returer;",[85,721,722,725],{},[25,723,724],{},"Ingen fabricering:"," Beräkna, redigera eller hitta inte på positioner;",[85,727,728,731,732,206],{},[25,729,730],{},"Föredra utelämnande:"," Finns ingen giltig tagg i kontext, svara normalt—",[25,733,734],{},"skriv inga positionstaggar",[85,736,737,740],{},[25,738,739],{},"Inline med påståenden:"," Taggar följer relevant mening; inga citeringslistor i slutet.",[11,742,743,744,747,748,751],{},"UI filtrerar också tillfälliga ",[25,745,746],{},"tvådelade"," ogiltiga taggar (t.ex. ",[154,749,750],{},"[f1-293]",") före render.",[11,753,754],{},[14,755],{"alt":756,"src":757},"Popup för citeringsspårning","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[34,759],{},[37,761,763],{"id":762},"vi-tool-calling-hämta-först-svara-sedan","VI. Tool Calling: Hämta först, svara sedan",[11,765,766,767,770,771,774,775,778],{},"När chatt är bunden till bok (",[154,768,769],{},"resourceId"," finns, ",[154,772,773],{},"chatType === 'chat'",") registrerar vi två Tools med executors före varje generering—standard OpenAI ",[25,776,777],{},"function calling","-loop.",[54,780,782,783,786],{"id":781},"_61-get_related_segment_summaries-riktad-segmentuppslagning","6.1 ",[154,784,785],{},"get_related_segment_summaries"," — Riktad segmentuppslagning",[11,788,789,790,232],{},"För: begrepp, figurer, handling, kapiteldetaljer—",[25,791,792],{},"tydlig retrieval-avsikt",[11,794,795],{},"Flöde:",[251,797,798,805,811,814,824],{},[85,799,800,801,804],{},"Modellen skriver om användarens formulering till ",[25,802,803],{},"termer som sannolikt finns i boken"," («Optimize Search Queries» i System Prompt);",[85,806,807,808,206],{},"Anropa Tool med ",[154,809,810],{},"question",[85,812,813],{},"Batcha alla segment-sammanfattningar per tokenbudget (~30k tokens per batch, max 5 batchar);",[85,815,816,817,820,821,206],{},"Varje batch: separat LLM-begäran väljer relevanta segment-ID (max 5) från ",[154,818,819],{},"{ id, title, summary }",", JSON som ",[154,822,823],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[85,825,826,827,830],{},"För valda segment, hämta ",[25,828,829],{},"taggad källtext"," från Spine—inte sammanfattningar—som Tool-resultat.",[11,832,833,836,837,840],{},[25,834,835],{},"Nyckeldesign: Tool returnerar källa, inte sammanfattningar."," Modellen svarar från riktiga stycken med inline ",[154,838,839],{},"[f…]",", undviker «sammanfattning → om-sammanfattning»-drift.",[54,842,844,845,848],{"id":843},"_62-get_full_book_segment_summaries-helboksöversikt","6.2 ",[154,846,847],{},"get_full_book_segment_summaries"," — Helboksöversikt",[11,850,851,852,232],{},"För: «sammanfatta boken», «recensera den här boken», «övergripande struktur/teman»—",[25,853,854],{},"global vy",[11,856,857,858,861],{},"Sammanfoga alla segment ",[154,859,860],{},"summary"," i läsordning—undvik att missa nyckelkapitel enbart via chunk-relevans.",[54,863,865],{"id":864},"_63-system-prompt-bok-först-tools-först","6.3 System Prompt: Bok först, tools först",[11,867,868,869,535],{},"Med bunden bok gäller ",[25,870,871],{},[694,872,873],{},"Core Principles for Reading Assistant",[612,875,878],{"className":876,"code":877,"language":617},[615],"1. Book First, Tool First\n   - All fråga som kan gälla boken måste anropa tools först;\n   - Svar måste huvudsakligen bygga på retrieval—hitta aldrig på «bokinnehåll» utan retrieval.\n\n2. General Knowledge as Fallback Only\n   - Endast för: vardagschatt / användaren uttryckligen hoppar över boken / tools utan resultat;\n   - Saknas i boken, säg «nämns inte i den här boken» före allmän kunskap.\n\n3. Direct Style\n   - Gå till sak—undvik «baserat på tillhandahållna material…» och liknande utfyllnad.\n",[154,879,877],{"__ignoreMap":618},[11,881,882,883,886,887,890],{},"Generering kör tool-loopen: ",[154,884,885],{},"tool_calls"," → kör → lägg till ",[154,888,889],{},"role: tool"," → fortsätt tills sluttext. Med tools på stängs thinking-kanal av för att undvika protokollkonflikter.",[34,892],{},[37,894,896],{"id":895},"vii-frontend-spårbarhet-från-fotnot-till-markering","VII. Frontend-spårbarhet: Från fotnot till markering",[11,898,899,900,902],{},"Modellutdata ",[154,901,656],{}," visas inte rå; renderlager gör klickbara citeringar.",[54,904,906],{"id":905},"_71-fotnotrendering","7.1 Fotnotrendering",[11,908,909,910,913],{},"Normalisera taggar till Markdown-länkar som ",[154,911,912],{},"[1]([f5-123-165])",", rendera som numrerade fotnoter; deduplicera samma position för att undvika UI-klutter.",[54,915,917],{"id":916},"_72-klickinteraktion","7.2 Klickinteraktion",[251,919,920,929,935],{},[85,921,922,925,926,928],{},[25,923,924],{},"Första klick:"," Tolka ",[154,927,839],{}," → fileIndex + offsets → extrahera Spine-text → förhandsgranska (valfri TOC-titel);",[85,930,931,934],{},[25,932,933],{},"Samma fotnot igen:"," Stäng förhandsgranskning;",[85,936,937,940],{},[25,938,939],{},"Bekräfta hopp:"," Öppna läsvy, markera teckenintervall.",[11,942,943,944,947],{},"Från kopierad modelltagg till användarsynlig källa passerar kedjan ",[25,945,946],{},"aldrig genom ytterligare LLM-anrop","—deterministisk och reproducerbar.",[34,949],{},[37,951,953],{"id":952},"viii-kantfall-och-ärlig-degradering","VIII. Kantfall och ärlig degradering",[11,955,956,957,535],{},"Noll hallucination ≠ «alltid finns svar»—det betyder ",[25,958,959],{},"ingen evidens, ingen fabricering",[281,961,962,972],{},[284,963,964],{},[287,965,966,969],{},[290,967,968],{},"Scenario",[290,970,971],{},"Beteende",[303,973,974,982,994,1002,1010],{},[287,975,976,979],{},[308,977,978],{},"Segment-sammanfattningar inte klara",[308,980,981],{},"Extrahera full text och sammanfatta först",[287,983,984,987],{},[308,985,986],{},"Tool hittar inget",[308,988,989,990,993],{},"Returnera ",[154,991,992],{},"(No relevant segment excerpts found…)","; modellen ska säga att det inte finns i boken",[287,995,996,999],{},[308,997,998],{},"Ogiltiga tvådelade taggar från modell",[308,1000,1001],{},"Frontend filtrerar; inga trasiga fotnoter",[287,1003,1004,1007],{},[308,1005,1006],{},"Vardagschatt",[308,1008,1009],{},"System Prompt tillåter allmän kunskap utanför boken",[287,1011,1012,1015],{},[308,1013,1014],{},"Exportera chatt",[308,1016,1017],{},"Fotnoter kan bli läsar-deep links för delning/arkiv",[11,1019,1020],{},[14,1021],{"alt":1022,"src":1023},"Chattexport","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[34,1025],{},[37,1027,1029],{"id":1028},"ix-designavvägning-varför-inte-vector-rag","IX. Designavvägning: Varför inte «vector RAG»?",[11,1031,1032,1033,1036],{},"Kollegor som bygger dokument-Q&A frågar ofta: om ni gör retrieval-augmented generation, varför inte ",[25,1034,1035],{},"Embedding + vector DB Top-K","?",[11,1038,1039,1040,1043,1044,1047,1048,1051,1052,1055],{},"Vi ",[25,1041,1042],{},"gör RAG","—hämta före generera. Skillnaden: «RAG» i community-språk innebär ofta ",[25,1045,1046],{},"vektorsimilaritet","; vårt steg 3 är ",[25,1049,1050],{},"segmentindex + Tool med källhämtning på begäran","—",[25,1053,1054],{},"ingen vektorlager medvetet",". Nedan arkitekturskäl, inte förnekande av vector RAG:s värde.",[54,1057,1059],{"id":1058},"omfattning-inte-ingen-retrieval-utan-ingen-vektorretrieval","Omfattning: inte «ingen retrieval», utan «ingen vektorretrieval»",[82,1061,1062,1071],{},[85,1063,1064,1067,1068,206],{},[25,1065,1066],{},"Bred RAG:"," hämta → generera → ",[25,1069,1070],{},"vi gör detta",[85,1072,1073,1076,1077,232],{},[25,1074,1075],{},"Vector RAG:"," recall via embedding-similaritet → ",[25,1078,1079],{},"inte i denna version",[11,1081,1082,1083,1086,1087,1090],{},"Förbehandling bygger ",[25,1084,1085],{},"segment-sammanfattningsindex","; modellen väljer segment via Tools och får ",[25,1088,1089],{},"källtext",". Retrieval finns utan separat embedding-modell och vektorindex-underhåll.",[34,1092],{},[54,1094,1096],{"id":1095},"skäl-1-anpassade-llm-providershåll-integrationsytan-liten","Skäl 1: Anpassade LLM-providers—håll integrationsytan liten",[11,1098,1099,1100,1103,1104,1107],{},"Användare kan koppla ",[25,1101,1102],{},"egna API-nycklar",", anpassade base URLs eller ",[25,1105,1106],{},"lokal Ollama","—chattmodell är deras val; kostnad och datapath under kontroll.",[11,1109,1110],{},"Typisk vector RAG vidgar integration:",[82,1112,1113,1124,1127],{},[85,1114,1115,1116,1119,1120,1123],{},"Utöver ",[25,1117,1118],{},"chattmodell"," behövs oftast ",[25,1121,1122],{},"embedding-modell"," (annat namn, ibland annan endpoint);",[85,1125,1126],{},"Lokal Ollama behöver separat embedding-modell plus dimension/API-kompatibilitet;",[85,1128,1129,1130,1133],{},"Fler fel lägen: chatt OK men ",[25,1131,1132],{},"tom retrieval","—embedding, index eller dimensionsmismatch; svårare att felsöka än en provider end-to-end.",[11,1135,1136,1137,1140,1141,1144],{},"Här delar ",[25,1138,1139],{},"segmentval och svar samma provider-konfiguration","—inget «chatt på A, index på B». För ",[25,1142,1143],{},"utbytbar LLM","-appar slår det ofta några recall-poäng.",[11,1146,1147],{},[14,1148],{"alt":1149,"src":1150},"Anpassade AI-providers","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[34,1152],{},[54,1154,1156],{"id":1155},"skäl-2-embeddings-binder-till-indexproviderbyte-är-dyrt","Skäl 2: Embeddings binder till index—providerbyte är dyrt",[11,1158,1159,1160,1163,1164,1167,1168,1171],{},"I vector RAG är ",[25,1161,1162],{},"vektorer inte universellt mellanformat","—de är koordinater under en embedding-modell. Index med A, fråga med B: similaritet är vanligt ",[25,1165,1166],{},"inte jämförbar","—ofta ",[25,1169,1170],{},"full om-embedding",", och dimensioner (768 / 1024 / 1536 …) låser lagringsschema.",[11,1173,1174,1175,1178,1179,1182],{},"Steg 3 persisterar ",[25,1176,1177],{},"strukturerade sammanfattningar + tecken-spans",", inte vektorer; byte av chattmodell ",[25,1180,1181],{},"bygger inte om index","; evidenskedja (källpositioner) oförändrad—i linje med «prova olika LLM när som helst».",[34,1184],{},[54,1186,1188],{"id":1187},"skäl-3-strukturerad-routing-räcker-ofta-för-toc-tunga-långa-dokument","Skäl 3: Strukturerad routing räcker ofta för TOC-tunga långa dokument",[11,1190,1191,1192,1195,1196,1199,1200,1203,1204,1209],{},"E-böcker och PDF har vanligtvis ",[25,1193,1194],{},"kapitelstruktur","; förbehandling ger ",[25,1197,1198],{},"segmenttitlar + sammanfattningar",". För «vad säger kapitel X» eller «hur definierar boken Y» fungerar val från katalog och ",[25,1201,1202],{},"källhämtning"," bra i praktiken; Tool returnerar ",[25,1205,1206,1207],{},"källa med ",[154,1208,839],{},", noll hallucination förankras i tecken-spans.",[11,1211,1212,1213,1216,1217,1220],{},"Vektorer hjälper vid diffus semantik, flerspråk, långspann literal mismatch; för läsare med ",[25,1214,1215],{},"TOC + förbehandling + stark spårbarhet"," ger investering i ",[25,1218,1219],{},"Tool + källretur + citeringsregler"," ofta bättre ROI.",[34,1222],{},[54,1224,1226],{"id":1225},"framtid-hybrid-recall-inte-omskrivning","Framtid: Hybrid recall, inte omskrivning",[11,1228,1229,1230,1233,1234,1237,1238,1241,1242,1245],{},"Vi kan lägga till ",[25,1231,1232],{},"grov vektorrecall"," (embedding bara för Top-N kandidatkapitel), fortfarande slut i ",[25,1235,1236],{},"välj segment → källa → klickbart spår","—noll-hallucination-regler oförändrade. Om tillagt: embedding ",[25,1239,1240],{},"valfritt",", tydliga ",[25,1243,1244],{},"om-indexera","-meddelanden vid modellbyte—undvik tyst fel retrieval.",[11,1247,1248,1249],{},"Tills dess: ",[25,1250,1251],{},"vilken OpenAI-kompatibel chatt-API som helst fungerar; byte av chattmodell bygger inte om lokalt index.",[34,1253],{},[37,1255,1257],{"id":1256},"x-sammanfattning","X. Sammanfattning",[281,1259,1260,1273],{},[284,1261,1262],{},[287,1263,1264,1267,1270],{},[290,1265,1266],{},"Steg",[290,1268,1269],{},"Metod",[290,1271,1272],{},"Roll",[303,1274,1275,1286,1299,1313,1324,1335],{},[287,1276,1277,1280,1283],{},[308,1278,1279],{},"Förbehandla",[308,1281,1282],{},"Dela efter TOC/längd + segment-sammanfattningscache",[308,1284,1285],{},"Långa böcker sökbara och lokaliserbara",[287,1287,1288,1291,1296],{},[308,1289,1290],{},"Positionstaggar",[308,1292,1293,1295],{},[154,1294,156],{}," i källa",[308,1297,1298],{},"Maskintolkbar härkomst",[287,1300,1301,1304,1310],{},[308,1302,1303],{},"Tool retrieval",[308,1305,1306,1307],{},"Segment per fråga / helbokssammanfattningar, returnera ",[25,1308,1309],{},"källa",[308,1311,1312],{},"Tvinga evidens före svar",[287,1314,1315,1318,1321],{},[308,1316,1317],{},"System Prompt",[308,1319,1320],{},"Bok först, inga falska taggar, säg när saknas",[308,1322,1323],{},"Begränsa generering",[287,1325,1326,1329,1332],{},[308,1327,1328],{},"Frontend",[308,1330,1331],{},"Fotnot → förhandsgranska → hoppa och markera",[308,1333,1334],{},"Användare verifierar evidens",[287,1336,1337,1340,1343],{},[308,1338,1339],{},"Ingen vektorretrieval",[308,1341,1342],{},"En provider; byt chattmodell utan om-index",[308,1344,1345],{},"Lägre integrations- och migrationskostnad",[11,1347,1348,1349,1352],{},"«Noll hallucination» betyder inte att modellen aldrig felar—det betyder ",[25,1350,1351],{},"teknik som låser utdata till evidenskedja",": ingen retrieval → utge sig inte för bokinnehåll; med retrieval → ge verifierbara källpositioner.",[11,1354,1355,1356,1359,1360,1363],{},"Om du bygger AI-läsning eller dokument-Q&A hoppas vi att vägen ",[25,1357,1358],{},"hel dump → nyckelmeningar → Tool-first på begäran",", plus ",[25,1361,1362],{},"inline positionstaggar + källretur",", är en användbar referensimplementation.",[19,1365,1366],{},[11,1367,1368,1369,1374,1375,232],{},"Detta är lärdomar från att bygga ",[243,1370,1373],{"href":1371,"rel":1372},"https://reader.linghuxiong.com",[247],"Foxycape"," AI-läsare—endast som referens. Prova läsaren på ",[243,1376,1378],{"href":1377},"/sv-se#download","nedladdningssidan",{"title":618,"searchDepth":1380,"depth":1380,"links":1381},2,[1382,1388,1389,1390,1391,1395,1402,1406,1407,1414],{"id":39,"depth":1380,"text":40,"children":1383},[1384,1386,1387],{"id":56,"depth":1385,"text":57},3,{"id":138,"depth":1385,"text":139},{"id":235,"depth":1385,"text":236},{"id":425,"depth":1380,"text":426},{"id":486,"depth":1380,"text":487},{"id":501,"depth":1380,"text":502},{"id":632,"depth":1380,"text":633,"children":1392},[1393,1394],{"id":660,"depth":1385,"text":661},{"id":686,"depth":1385,"text":687},{"id":762,"depth":1380,"text":763,"children":1396},[1397,1399,1401],{"id":781,"depth":1385,"text":1398},"6.1 get_related_segment_summaries — Riktad segmentuppslagning",{"id":843,"depth":1385,"text":1400},"6.2 get_full_book_segment_summaries — Helboksöversikt",{"id":864,"depth":1385,"text":865},{"id":895,"depth":1380,"text":896,"children":1403},[1404,1405],{"id":905,"depth":1385,"text":906},{"id":916,"depth":1385,"text":917},{"id":952,"depth":1380,"text":953},{"id":1028,"depth":1380,"text":1029,"children":1408},[1409,1410,1411,1412,1413],{"id":1058,"depth":1385,"text":1059},{"id":1095,"depth":1385,"text":1096},{"id":1155,"depth":1385,"text":1156},{"id":1187,"depth":1385,"text":1188},{"id":1225,"depth":1385,"text":1226},{"id":1256,"depth":1380,"text":1257},null,"2026-06-03","Tekniska anteckningar om noll-hallucination Q&A i en AI-läsare—svar grundade i den öppna boken, med citeringar i ett klick till exakt stycke.",false,"md",{},true,"/sv-se/blog/zero-hallucination-qa",{"title":6,"description":1417},"sv-se/blog/zero-hallucination-qa",[1426,1427,1428],"läsare","AI","teknik","zero-hallucination-qa","QWThAlGalusgtBlO9SYseN04SRTs_uV4utvUD99iW2Y",1780489852864]