[{"data":1,"prerenderedAt":1434},["ShallowReactive",2],{"blog-list-de-de":3},[4],{"id":5,"title":6,"body":7,"config":1418,"date":1419,"description":1420,"draft":1421,"extension":1422,"image":1418,"meta":1423,"navigation":1424,"path":1425,"seo":1426,"stem":1427,"tags":1428,"toolbar":1418,"translationKey":1432,"updated":1419,"__hash__":1433},"blog/de-de/blog/zero-hallucination-qa.md","Wie ich Zero-Hallucination-Q&A in unserem Reader umgesetzt habe",{"type":8,"value":9,"toc":1382},"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,742,753,759,761,765,779,787,793,796,835,845,853,859,866,870,878,884,895,897,901,907,911,918,922,945,952,954,958,964,1021,1027,1029,1033,1040,1059,1063,1083,1093,1095,1099,1110,1113,1136,1147,1153,1155,1159,1174,1185,1187,1191,1212,1223,1225,1229,1248,1254,1256,1260,1349,1356,1367],[11,12,13],"p",{},[14,15],"img",{"alt":16,"src":17},"Cover: Zero-Hallucination-Q&A","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[19,20,21],"blockquote",{},[11,22,23,24,28,29,32],{},"Dieser Beitrag beschreibt die technische Umsetzung von ",[25,26,27],"strong",{},"Zero-Hallucination-Q&A"," in unserem AI-Reader: Antworten basieren strikt auf dem Text des geöffneten Buches, zentrale Aussagen lassen sich per ",[25,30,31],{},"Ein-Klick"," zur exakten Passage zurückverfolgen. Wenn Sie AI-Reading, Dokumenten-Q&A oder RAG-ähnliche Apps bauen, hoffen wir, dass drei Iterationen und die finale Architektur als Referenz dienen.",[34,35],"hr",{},[37,38,40],"h2",{"id":39},"i-entwicklung-in-drei-phasen","I. Entwicklung in drei Phasen",[11,42,43,44,47],{},"Zero-Hallucination-Q&A war von Anfang an nicht perfekt geplant, sondern entstand im Spannungsfeld von ",[25,45,46],{},"Kosten, Latenz und Genauigkeit",". Im Folgenden die drei Phasen in zeitlicher Reihenfolge—als Kontext, warum die aktuelle Architektur so aussieht.",[49,50],"mermaid",{":config":51,"code":52},"config","flowchart%20LR%0A%20%20%20%20P1%5BPhase%201%3A%20Volltext%20einf%C3%BCgen%5D%20--%3E%20P2%5BPhase%202%3A%20LLM%20Schl%C3%BCssels%C3%A4tze%5D%0A%20%20%20%20P2%20--%3E%20P3%5BPhase%203%3A%20Segment-Index%20%2B%20Tool-Abruf%5D%0A%20%20%20%20P1%20-.-%3E%7CLangsam%2C%20teuer%2C%20ungenau%20bei%20langen%20B%C3%BCchern%7C%20X1%5BVerworfen%5D%0A%20%20%20%20P2%20-.-%3E%7CDetailverlust%2C%20weiterhin%20langsam%7C%20X2%5BVerworfen%5D%0A%20%20%20%20P3%20--%3E%7CAktuell%7C%20OK%5BZero%20Hallucination%20%2B%20nachvollziehbar%5D",[54,55,57],"h3",{"id":56},"phase-1-gesamten-buchtext-in-den-context-legen-einfachste-varianteund-die-erste-die-bricht","Phase 1: Gesamten Buchtext in den Context legen (einfachste Variante—und die erste, die bricht)",[11,59,60,63,64,67,68,71,72,75],{},[25,61,62],{},"Vorgehen:"," Beim Öffnen eines Buches und einer Nutzerfrage den ",[25,65,66],{},"gesamten extrahierten Fließtext"," in System Prompt oder User-Nachricht packen und vom Chat-Modell beantworten lassen. Überschreitet das Buch etwa ",[25,69,70],{},"400.000 Zeichen",", erfolgt eine ",[25,73,74],{},"harte Kürzung","—nur der Anfang bleibt; spätere Kapitel sind für das Modell unsichtbar.",[11,77,78],{},[25,79,80],{},"Vorteile:",[82,83,84,88,91],"ul",{},[85,86,87],"li",{},"Sehr geringer Implementierungsaufwand, kaum Vorverarbeitung;",[85,89,90],{},"Bei kurzen Büchern und einfachen Dokumenten oft brauchbar—das Modell hat das Buch tatsächlich „gesehen“;",[85,92,93],{},"Einfache UX: Fragen stellen, Antwort erhalten—kein „Bitte warten Sie auf die Analyse“.",[11,95,96],{},[25,97,98],{},"Nachteile (schnell inakzeptabel):",[82,100,101,107,113,123],{},[85,102,103,106],{},[25,104,105],{},"Langsame Antworten:"," Jede Frage sendet erneut eine riesige Payload; Time-to-First-Token und Gesamtlatenz wachsen mit der Buchlänge;",[85,108,109,112],{},[25,110,111],{},"Hohe Token-Kosten:"," Der volle Buch-Input wird bei jeder Frage erneut bezahlt;",[85,114,115,118,119,122],{},[25,116,117],{},"Lange Bücher verzerren stark:"," Nach 400k Zeichen existieren zweite Hälfte, Anhänge und Schlusskapitel faktisch nicht—und die UI ",[25,120,121],{},"weist selten klar darauf hin",", dass gekürzt wurde;",[85,124,125,128,129,132],{},[25,126,127],{},"Keine Abrufgranularität:"," Das Modell muss in Hunderttausenden Zeichen „die Nadel im Heuhaufen“ finden—Details gehen leicht verloren, ",[25,130,131],{},"plausibel klingende, aber unbelegte"," Zusammenfassungen entstehen leichter—genau das, was Lese-Apps vermeiden müssen.",[11,134,135],{},"Phase 1 eignet sich für ein MVP, nicht für eine produktionsreife Lösung.",[54,137,139],{"id":138},"phase-2-leichteres-llm-extrahiert-schlüsselsätze-context-komprimierenaber-zu-aggressiv","Phase 2: Leichteres LLM extrahiert Schlüsselsätze (Context komprimieren—aber zu aggressiv)",[11,141,142,144,145,148,149,152,153,157],{},[25,143,62],{}," Vor dem Q&A (oder beim ersten Öffnen) ein ",[25,146,147],{},"günstigeres Modell"," über den Fließtext: Aufteilung nach Spine-Kapitel (oder Buch in Blöcke), Extraktion von ",[25,150,151],{},"Schlüsselsätzen",", Beibehaltung von Positions-Tags wie ",[154,155,156],"code",{},"[fDatei-Start-Ende]",", dann Zusammenfügen der Auszüge zu kürzerem Context für späteres Q&A.",[11,159,160,161,164],{},"Typische Pipeline: ",[25,162,163],{},"Extract → Cache → Chat",". Einmal extrahieren (offline oder on demand), „Schlüsselsatz-Bündel“ speichern, bei jeder Frage wiederverwenden—wie viele Dokumenten-Q&A-Prototypen: erst komprimieren, dann antworten.",[11,166,167],{},[25,168,80],{},[82,170,171,178,181],{},[85,172,173,174,177],{},"Pro Frage ",[25,175,176],{},"deutlich weniger Text","; Token-Verbrauch pro Request sinkt gegenüber Phase 1;",[85,179,180],{},"Vorverarbeitung cachebar; kein Re-Extract pro Frage beim gleichen Buch;",[85,182,183],{},"Positions-Tags legen die Basis für Zitate.",[11,185,186],{},[25,187,188],{},"Nachteile (bei langen Büchern weiterhin unzureichend):",[82,190,191,197,207,216],{},[85,192,193,196],{},[25,194,195],{},"Starker Detailverlust:"," „Schlüsselsätze“ werden vom Modell gewählt; Einschränkungen, Gegenbeispiele und Argumentketten gehen oft verloren—Antworten werden „richtig, aber einseitig“;",[85,198,199,202,203,206],{},[25,200,201],{},"Context bei Langwerken weiter groß:"," Selbst Schlüsselsatz-Bündel sind umfangreich—Latenz und Kosten werden ",[25,204,205],{},"gelindert, nicht gelöst",";",[85,208,209,212,213,206],{},[25,210,211],{},"Doppelter LLM-Fehler:"," Extraktion kann übersehen; Q&A kann Auszüge falsch lesen—Fehler ",[25,214,215],{},"stapeln sich",[85,217,218,221,222,225],{},[25,219,220],{},"Statischer Context:"," Ob die Frage ein Kapitel oder die Gesamtstruktur betrifft—das Modell erhält immer ",[25,223,224],{},"dieselbe vorab extrahierte Masse",", keine dynamische Eingrenzung nach Frage.",[11,227,228,229,232],{},"Die Lehre: Das Problem ist nicht „ob wir komprimieren“, sondern ",[25,230,231],{},"„ob die Kompression bedarfsgesteuert ist und ob wir zum Quelltext zurückkehren können“",".",[54,234,236],{"id":235},"phase-3-segment-index-tool-abruf-on-demand-quelltext-rückgabe-aktuell","Phase 3: Segment-Index + Tool-Abruf on demand + Quelltext-Rückgabe (aktuell)",[11,238,239,241,242,249],{},[25,240,62],{}," Angelehnt an ",[243,244,248],"a",{"href":245,"rel":246},"https://github.com/VectifyAI/PageIndex",[247],"nofollow","PageIndex",". Gegenüber Phase 2 drei Kernverschiebungen:",[251,252,253,259,269],"ol",{},[85,254,255,258],{},[25,256,257],{},"Vorverarbeitung erzeugt einen strukturierten Index"," (Inhaltsverzeichnis-Zusammenfassungen + exakte Zeichen-Spannen), keine Auszüge als direkter Q&A-Context;",[85,260,261,264,265,268],{},[25,262,263],{},"Jede Frage nutzt Tool Calling zur bedarfsgesteuerten Suche",", dann ",[25,266,267],{},"Abruf von Quelltext mit Positions-Tags"," zur Antwort;",[85,270,271,274],{},[25,272,273],{},"System Prompt + Frontend"," erzwingen Zitierformat und unterstützen Klick → Sprung → Hervorhebung im Reader.",[11,276,277],{},[25,278,279],{},"Vergleich der drei Phasen:",[281,282,283,302],"table",{},[284,285,286],"thead",{},[287,288,289,293,296,299],"tr",{},[290,291,292],"th",{},"Dimension",[290,294,295],{},"Phase 1 (Volltext)",[290,297,298],{},"Phase 2 (Schlüsselsätze)",[290,300,301],{},"Phase 3 (aktuell)",[303,304,305,324,338,352,366,383],"tbody",{},[287,306,307,311,314,317],{},[308,309,310],"td",{},"Context pro Frage",[308,312,313],{},"Ganzes Buch (oder gekürzte erste Hälfte)",[308,315,316],{},"Vorab extrahierte Schlüsselsätze",[308,318,319,320,323],{},"Nur ",[25,321,322],{},"Quelltext","-Ausschnitte zur Frage",[287,325,326,329,332,335],{},[308,327,328],{},"Genauigkeit bei langen Büchern",[308,330,331],{},"Ab ~400k Zeichen stark eingebrochen",[308,333,334],{},"Abhängig von Extraktion; Detailverlust",[308,336,337],{},"Abruf per TOC/Span; kein hartes Vollbuch-Truncate",[287,339,340,343,346,349],{},[308,341,342],{},"Antwortgeschwindigkeit",[308,344,345],{},"Langsam",[308,347,348],{},"Etwas besser; lange Bücher weiter langsam",[308,350,351],{},"Abruf + kurzer Context—deutlich schneller",[287,353,354,357,360,363],{},[308,355,356],{},"Token-Kosten",[308,358,359],{},"Sehr hoch",[308,361,362],{},"Mittelhoch",[308,364,365],{},"Vorverarbeitung amortisiert + zahlen nach Bedarf",[287,367,368,371,374,377],{},[308,369,370],{},"Nachvollziehbarkeit",[308,372,373],{},"Schwach (Zitate schwer)",[308,375,376],{},"Tags vorhanden, Inhalt aber gefiltert",[308,378,379,380],{},"Fußnoten → ",[25,381,382],{},"echte Quell-Spannen",[287,384,385,388,391,394],{},[308,386,387],{},"Engineering-Aufwand",[308,389,390],{},"Niedrig",[308,392,393],{},"Mittel",[308,395,396],{},"Hoch",[11,398,399,402,403,406,407,410,411,414],{},[25,400,401],{},"Warum wir bei Phase 3 bleiben:"," Beim Lesen geht es bei Zero Hallucination nicht darum, „dem Modell möglichst viel Text zu zeigen“, sondern ",[25,404,405],{},"„vor der Antwort Belege aus dem Buch zur Frage zu holen“",". Phase 1–2 kämpften mit der ",[25,408,409],{},"Context-Größe","; Phase 3 teilt die Pipeline in ",[25,412,413],{},"Index (Vorverarbeitung) → Abruf (Tool) → Beleg (Quelle) → Antwort (kontrollierte Generierung)","—Genauigkeit, Kosten und Nachvollziehbarkeit zusammen.",[11,416,417,418,232],{},"Im Folgenden die Details von ",[25,419,420],{},"Phase 3",[34,422],{},[37,424,426],{"id":425},"ii-problemstellung-bei-buch-qa-ist-halluzination-schlimmer-als-im-allgemeinen-chat","II. Problemstellung: Bei Buch-Q&A ist Halluzination schlimmer als im allgemeinen Chat",[11,428,429,430,433],{},"Gelegentliche Fehler in einem allgemeinen Chatbot verzeihen Nutzer oft. Bei ",[25,431,432],{},"Buch-Q&A"," ist der Preis höher:",[82,435,436,443,446],{},[85,437,438,439,442],{},"Nutzer fragen, was ",[25,440,441],{},"dieses Buch"," sagt—not was im parametrischen Gedächtnis des Modells liegt;",[85,444,445],{},"Eine plausibel klingende „Ansicht aus dem Buch“ kann Notizen, Zitate und Weitergabe irreführen;",[85,447,448],{},"Ohne Quellen keine Verifikation—Vertrauen ist schwer aufzubauen.",[11,450,451,452,455],{},"„Zero Hallucination“ wird daher zu drei ",[25,453,454],{},"durchsetzbaren"," Regeln:",[251,457,458,464,470],{},[85,459,460,463],{},[25,461,462],{},"Buchfragen müssen zuerst das Buch befragen:"," Alles, was plausibel zum geöffneten Buch gehört, muss zuerst Retrieval (Tool) durchlaufen;",[85,465,466,469],{},[25,467,468],{},"Antworten müssen nachvollziehbar sein:"," Zentrale Aussagen tragen Positions-Tags, die die UI parsen und anspringen kann;",[85,471,472,475],{},[25,473,474],{},"Sagen, wenn nichts gefunden wird:"," Fehlt es im Buch, klar sagen—kein Allgemeinwissen als „Buchaussage“ verkaufen.",[11,477,478,479,481],{},"Der Rest folgt dem Datenfluss von ",[25,480,420],{}," und der Umsetzung dieser Regeln.",[34,483],{},[37,485,487],{"id":486},"iii-architektur-vorverarbeitung-tool-abruf-kontrollierte-generierung-klickbare-zitate","III. Architektur: Vorverarbeitung → Tool-Abruf → Kontrollierte Generierung → Klickbare Zitate",[49,489],{":config":51,"code":490},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5BOffline%20%2F%20erste%20Vorverarbeitung%5D%0A%20%20%20%20%20%20%20%20A%5BBuch%20nach%20TOC%20oder%20L%C3%A4nge%20teilen%5D%20--%3E%20B%5BLLM%20Segment-Zusammenfassungen%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5BSegment-Cache%20lokal%20persistieren%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5BNutzerfrage%5D%0A%20%20%20%20%20%20%20%20D%5BNutzereingabe%5D%20--%3E%20E%7BSegment-Cache%20vorhanden%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7CNein%7C%20F%5BVolltext%20extrahieren%20%2F%20Vorverarbeitung%20anbieten%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%20registrieren%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5BTool-Abruf%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7BFragetyp%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%C3%9Cberblick%20%2F%20Rezension%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7CFakten%20%2F%20Personen%20%2F%20Kapitel%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20w%C3%A4hlt%20Segment-IDs%20aus%20Zusammenfassungskatalog%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5BQuelltext%20per%20Span%20%2B%20Positions-Tags%20laden%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5BAlle%20Segment-Zusammenfassungen%20verketten%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5BGenerieren%20%26%20Anzeige%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BTool-Ergebnisse%20ans%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-Prompt%20Zitierregeln%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5BStreaming-Antwort%20%2B%20Positions-Fu%C3%9Fnoten%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5BKlickbare%20Fu%C3%9Fnoten%20rendern%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5BKlick%20%E2%86%92%20Vorschau%20%E2%86%92%20Sprung%20%26%20Hervorhebung%5D%0A%20%20%20%20end",[11,492,493,494],{},"Kernidee: ",[25,495,496],{},"Das Modell soll nicht „aus dem Gedächtnis antworten“—sondern „Belege sammeln, dann antworten und Quellen markieren“.",[34,498],{},[37,500,502],{"id":501},"iv-vorverarbeitung-das-ganze-buch-in-einen-durchsuchbaren-segment-index-verwandeln","IV. Vorverarbeitung: Das ganze Buch in einen durchsuchbaren Segment-Index verwandeln",[11,504,505,506,509,510,513,514,517,518,521,522,525],{},"Wenn jede Frage weiter ",[25,507,508],{},"Phase-1","-Vollbuch-Context nutzte, sprengen lange Bücher das Token-Budget und der Abruf ist zu grob. Phase 3: Beim ersten AI-Chat zu einem Buch läuft im Hintergrund ein ",[25,511,512],{},"Segment-Zusammenfassungs-Job","—Aufteilung nach ",[25,515,516],{},"TOC"," oder ",[25,519,520],{},"Textlänge"," in ",[154,523,524],{},"Segment","s, Zusammenfassung je Segment, Persistenz in lokaler IndexedDB.",[11,527,528,529,531,532,535],{},"Jedes ",[154,530,524],{}," enthält Zusammenfassung plus ",[25,533,534],{},"physische Position im Fließtext",":",[281,537,538,548],{},[284,539,540],{},[287,541,542,545],{},[290,543,544],{},"Feld",[290,546,547],{},"Bedeutung",[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-Datei-Index (PDF: eine Datei pro Seite)",[287,565,566,574],{},[308,567,568,557,571],{},[154,569,570],{},"startOffset",[154,572,573],{},"endOffset",[308,575,576],{},"Zeichen-Start/Ende",[287,578,579,584],{},[308,580,581],{},[154,582,583],{},"sequence",[308,585,586],{},"Lineare Lesereihenfolge",[287,588,589,594],{},[308,590,591],{},[154,592,593],{},"title",[308,595,596],{},"TOC-Titel",[11,598,599],{},"Die Aufteilung balanciert Präzision und Kosten: TOC-Knoten unter ~20 KB nur dieser Knoten; Geschwister-Knoten können zu Batches (15–20 KB) vor dem LLM-Aufruf zusammengeführt werden; unstrukturierte lange Blöcke in ~30–40k-Zeichen-Bereichen.",[11,601,602,603,606,607,610],{},"Der Zusammenfassungs-System-Prompt verlangt ",[25,604,605],{},"inline Positions-Tags"," (",[154,608,609],{},"[fZahl-Zahl-Zahl]","), damit per Tool geladener Quelltext mit Spine-Offsets übereinstimmt. Kernvorgabe:",[612,613,619],"pre",{"className":614,"code":616,"language":617,"meta":618},[615],"language-text","If summary content relates to a passage, keep the trailing position tag [fNumber-Number-Number] (e.g. [f1-90-109]).\nTags are atomic—do not alter, merge, or omit any character or digit.\n","text","",[154,620,616],{"__ignoreMap":618},[11,622,623,624,627],{},"Nach der Vorverarbeitung hängt Q&A vom ",[25,625,626],{},"strukturierten Segment-Index"," ab, nicht vom Vollbuch-Context—Voraussetzung für Zero Hallucination bei langen Büchern.",[34,629],{},[37,631,633],{"id":632},"v-positions-tag-system-woher-in-den-text-kodieren","V. Positions-Tag-System: „Woher“ in den Text kodieren",[11,635,636,637,640,641,644],{},"Zero Hallucination verlangt Inhalt aus der Quelle ",[25,638,639],{},"und"," maschinenlesbare, in der UI springbare ",[25,642,643],{},"Herkunft",". Wir nutzen inline Tags:",[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],{},"Beispiel: ",[154,655,656],{},"[f5-123-165]"," = Spine-Datei 5 (0-basiert), Zeichen 123–165.",[54,659,661],{"id":660},"_51-wie-tags-in-den-fließtext-geschrieben-werden","5.1 Wie Tags in den Fließtext geschrieben werden",[11,663,664,665,668],{},"Die Extraktionsschicht hängt ",[154,666,667],{},"[f{fileIndex}-{start}-{end}]"," an Segmentenden an:",[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],{},"Ob Vorverarbeitungs-Zusammenfassungen oder Tool-Auszüge—Positionen alignen mit ",[25,681,682],{},"Spine-Zeichen-Offsets",", nicht mit vom Modell geschätzten Seitenzahlen.",[54,685,687],{"id":686},"_52-vorgaben-für-modellausgabe","5.2 Vorgaben für Modellausgabe",[11,689,690,691,697],{},"Der System Prompt enthält ",[25,692,693],{},[694,695,696],"span",{},"Position Citation Rules","—fünf Kernpunkte:",[251,699,700,710,720,726,736],{},[85,701,702,705,706,709],{},[25,703,704],{},"Standardformat:"," Muss ",[154,707,708],{},"[f_fileIndex-startChar-endChar]"," nutzen; alle drei numerischen Teile erforderlich;",[85,711,712,715,716,719],{},[25,713,714],{},"Nur aus aktuellen Quellen kopieren:"," Fußnoten ",[25,717,718],{},"wörtlich"," aus System/User-Nachrichten oder Tool-Rückgaben dieser Runde;",[85,721,722,725],{},[25,723,724],{},"Keine Erfindung:"," Positionen nicht berechnen, ändern oder erfinden;",[85,727,728,731,732,735],{},[25,729,730],{},"Lieber weglassen:"," Kein gültiger Tag im Context → normal antworten—",[25,733,734],{},"keine Positions-Tags"," ausgeben;",[85,737,738,741],{},[25,739,740],{},"Inline bei Aussagen:"," Tags folgen dem relevanten Satz; keine Zitatlisten am Ende.",[11,743,744,745,748,749,752],{},"Die UI filtert gelegentliche ",[25,746,747],{},"zweiteilige"," ungültige Tags (z. B. ",[154,750,751],{},"[f1-293]",") vor dem Rendern.",[11,754,755],{},[14,756],{"alt":757,"src":758},"Zitat-Nachverfolgungs-Popup","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[34,760],{},[37,762,764],{"id":763},"vi-tool-calling-erst-suchen-dann-antworten","VI. Tool Calling: Erst suchen, dann antworten",[11,766,767,768,771,772,775,776,232],{},"Ist der Chat an ein Buch gebunden (",[154,769,770],{},"resourceId"," vorhanden, ",[154,773,774],{},"chatType === 'chat'","), registrieren wir vor jeder Generierung zwei Tools mit Executors—Standard-OpenAI-",[25,777,778],{},"Function-Calling-Schleife",[54,780,782,783,786],{"id":781},"_61-get_related_segment_summaries-gezielter-segment-abruf","6.1 ",[154,784,785],{},"get_related_segment_summaries"," — Gezielter Segment-Abruf",[11,788,789,790,232],{},"Für: Konzepte, Figuren, Handlung, Kapiteldetails—",[25,791,792],{},"klare Suchabsicht",[11,794,795],{},"Ablauf:",[251,797,798,805,811,818,828],{},[85,799,800,801,804],{},"Modell formuliert Nutzerwortlaut in ",[25,802,803],{},"im Buch wahrscheinliche Begriffe"," um („Optimize Search Queries“ im System Prompt);",[85,806,807,808,206],{},"Tool-Aufruf mit ",[154,809,810],{},"question",[85,812,813,814,817],{},"Alle Segment-Zusammenfassungen nach Token-Budget ",[25,815,816],{},"batchen"," (~30k Token pro Batch, max. 5 Batches);",[85,819,820,821,824,825,206],{},"Pro Batch: separater LLM-Request wählt relevante Segment-IDs (max. 5) aus ",[154,822,823],{},"{ id, title, summary }",", JSON wie ",[154,826,827],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[85,829,830,831,834],{},"Für gewählte Segmente ",[25,832,833],{},"getaggten Quelltext"," aus dem Spine laden—not Zusammenfassungen—als Tool-Ergebnis.",[11,836,837,840,841,844],{},[25,838,839],{},"Schlüsseldesign: Tool liefert Quelle, keine Zusammenfassungen."," Das Modell antwortet aus echten Absätzen mit inline ",[154,842,843],{},"[f…]",", ohne „Zusammenfassung → erneute Zusammenfassung“-Drift.",[54,846,848,849,852],{"id":847},"_62-get_full_book_segment_summaries-gesamtbuch-überblick","6.2 ",[154,850,851],{},"get_full_book_segment_summaries"," — Gesamtbuch-Überblick",[11,854,855,856,232],{},"Für: „Buch zusammenfassen“, „Rezension“, „Gesamtstruktur/Themen“—",[25,857,858],{},"globaler Blick",[11,860,861,862,865],{},"Alle Segment-",[154,863,864],{},"summary","-Felder in Lesereihenfolge verketten—wichtige Kapitel nicht nur über Chunk-Relevanz verpassen.",[54,867,869],{"id":868},"_63-system-prompt-buch-zuerst-tools-zuerst","6.3 System Prompt: Buch zuerst, Tools zuerst",[11,871,872,873,535],{},"Mit gebundenem Buch gilt ",[25,874,875],{},[694,876,877],{},"Core Principles for Reading Assistant",[612,879,882],{"className":880,"code":881,"language":617},[615],"1. Book First, Tool First\n   - Any question possibly about the book must call tools first;\n   - Answers must rely mainly on retrieval—never invent “book content” without retrieval.\n\n2. General Knowledge as Fallback Only\n   - Only for: casual chat / user explicitly skips the book / tools return nothing;\n   - If the book lacks it, say “not mentioned in this book” before general knowledge.\n\n3. Direct Style\n   - Get to the point—avoid “based on the provided materials…” and similar filler.\n",[154,883,881],{"__ignoreMap":618},[11,885,886,887,890,891,894],{},"Die Generierung führt die Tool-Schleife aus: ",[154,888,889],{},"tool_calls"," → ausführen → ",[154,892,893],{},"role: tool"," anhängen → bis zum finalen Text. Mit aktivierten Tools ist der Thinking-Kanal aus, um Protokollkonflikte zu vermeiden.",[34,896],{},[37,898,900],{"id":899},"vii-frontend-nachverfolgung-von-der-fußnote-zur-hervorhebung","VII. Frontend-Nachverfolgung: Von der Fußnote zur Hervorhebung",[11,902,903,904,906],{},"Modellausgabe ",[154,905,656],{}," wird nicht roh angezeigt; die Render-Schicht macht daraus klickbare Zitate.",[54,908,910],{"id":909},"_71-fußnoten-rendering","7.1 Fußnoten-Rendering",[11,912,913,914,917],{},"Tags zu Markdown-Links wie ",[154,915,916],{},"[1]([f5-123-165])"," normalisieren, als nummerierte Fußnoten rendern; gleiche Position deduplizieren.",[54,919,921],{"id":920},"_72-klick-interaktion","7.2 Klick-Interaktion",[251,923,924,933,939],{},[85,925,926,929,930,932],{},[25,927,928],{},"Erster Klick:"," ",[154,931,843],{}," parsen → fileIndex + Offsets → Spine-Text extrahieren → Vorschau (optional TOC-Titel);",[85,934,935,938],{},[25,936,937],{},"Gleiche Fußnote erneut:"," Vorschau schließen;",[85,940,941,944],{},[25,942,943],{},"Sprung bestätigen:"," Lesesicht öffnen, Zeichenbereich hervorheben.",[11,946,947,948,951],{},"Vom kopierten Modell-Tag bis zum sichtbaren Quelltext für den Nutzer ",[25,949,950],{},"kein weiterer LLM-Schritt","—deterministisch und reproduzierbar.",[34,953],{},[37,955,957],{"id":956},"viii-grenzfälle-und-ehrliche-degradation","VIII. Grenzfälle und ehrliche Degradation",[11,959,960,961,535],{},"Zero Hallucination ≠ „immer eine Antwort“—sondern ",[25,962,963],{},"kein Beleg, keine Erfindung",[281,965,966,976],{},[284,967,968],{},[287,969,970,973],{},[290,971,972],{},"Szenario",[290,974,975],{},"Verhalten",[303,977,978,986,997,1005,1013],{},[287,979,980,983],{},[308,981,982],{},"Segment-Zusammenfassungen noch nicht fertig",[308,984,985],{},"Zuerst Volltext extrahieren und zusammenfassen",[287,987,988,991],{},[308,989,990],{},"Tool findet nichts",[308,992,993,996],{},[154,994,995],{},"(No relevant segment excerpts found…)"," zurück; Modell soll „nicht im Buch“ sagen",[287,998,999,1002],{},[308,1000,1001],{},"Ungültige zweiteilige Tags vom Modell",[308,1003,1004],{},"Frontend filtert; keine kaputten Fußnoten",[287,1006,1007,1010],{},[308,1008,1009],{},"Smalltalk",[308,1011,1012],{},"System Prompt erlaubt Allgemeinwissen ohne Buch",[287,1014,1015,1018],{},[308,1016,1017],{},"Chat exportieren",[308,1019,1020],{},"Fußnoten können Reader-Deep-Links für Teilen/Archiv werden",[11,1022,1023],{},[14,1024],{"alt":1025,"src":1026},"Chat-Export","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[34,1028],{},[37,1030,1032],{"id":1031},"ix-design-abwägung-warum-kein-vektor-rag","IX. Design-Abwägung: Warum kein „Vektor-RAG“?",[11,1034,1035,1036,1039],{},"Kollegen im Dokumenten-Q&A fragen oft: Wenn Retrieval-Augmented Generation—warum nicht ",[25,1037,1038],{},"Embedding + Vektor-DB Top-K","?",[11,1041,1042,1043,1046,1047,1050,1051,1054,1055,1058],{},"Wir ",[25,1044,1045],{},"machen RAG","—erst suchen, dann generieren. Der Unterschied: „RAG“ impliziert in der Community oft ",[25,1048,1049],{},"Vektor-Ähnlichkeit","; unsere Phase 3 ist ",[25,1052,1053],{},"Segment-Index + Tool mit Quelltext on demand","—",[25,1056,1057],{},"bewusst ohne Vektorschicht",". Unten: architektonische Gründe, kein Abwertung von Vektor-RAG.",[54,1060,1062],{"id":1061},"abgrenzung-nicht-kein-retrieval-sondern-kein-vektor-retrieval","Abgrenzung: nicht „kein Retrieval“, sondern „kein Vektor-Retrieval“",[82,1064,1065,1074],{},[85,1066,1067,1070,1071,206],{},[25,1068,1069],{},"Breites RAG:"," suchen → generieren → ",[25,1072,1073],{},"machen wir",[85,1075,1076,1079,1080,232],{},[25,1077,1078],{},"Vektor-RAG:"," Recall per Embedding-Ähnlichkeit → ",[25,1081,1082],{},"in dieser Version nicht",[11,1084,1085,1086,1089,1090,1092],{},"Die Vorverarbeitung baut einen ",[25,1087,1088],{},"Segment-Zusammenfassungs-Index","; das Modell wählt Segmente per Tools und erhält ",[25,1091,322],{},". Retrieval ohne separates Embedding-Modell und Vektor-Index-Pflege.",[34,1094],{},[54,1096,1098],{"id":1097},"grund-1-eigene-llm-providerkleine-integrationsfläche","Grund 1: Eigene LLM-Provider—kleine Integrationsfläche",[11,1100,1101,1102,1105,1106,1109],{},"Nutzer können ",[25,1103,1104],{},"eigene API-Keys",", eigene Base-URLs oder ",[25,1107,1108],{},"lokales Ollama"," nutzen—Chat-Modell ist ihre Wahl; Kosten und Datenpfad bleiben kontrollierbar.",[11,1111,1112],{},"Typisches Vektor-RAG erweitert die Integration:",[82,1114,1115,1126,1129],{},[85,1116,1117,1118,1121,1122,1125],{},"Neben ",[25,1119,1120],{},"Chat-Modell"," meist ein ",[25,1123,1124],{},"Embedding-Modell"," (anderer Name, oft anderer Endpoint);",[85,1127,1128],{},"Lokales Ollama braucht separates Embedding-Modell plus Dimension/API-Kompatibilität;",[85,1130,1131,1132,1135],{},"Mehr Fehlerdomänen: Chat ok, aber ",[25,1133,1134],{},"leerer Abruf","—Embedding, Index oder Dimension; schwerer zu debuggen als ein Provider end-to-end.",[11,1137,1138,1139,1142,1143,1146],{},"Hier teilen ",[25,1140,1141],{},"Segmentwahl und Antwort eine Provider-Konfiguration","—kein „Chat auf A, Index auf B“. Für ",[25,1144,1145],{},"austauschbare LLM","-Apps oft wichtiger als wenige Recall-Punkte.",[11,1148,1149],{},[14,1150],{"alt":1151,"src":1152},"Eigene KI-Provider","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[34,1154],{},[54,1156,1158],{"id":1157},"grund-2-embeddings-binden-an-den-indexprovider-wechsel-ist-teuer","Grund 2: Embeddings binden an den Index—Provider-Wechsel ist teuer",[11,1160,1161,1162,1165,1166,1169,1170,1173],{},"Bei Vektor-RAG sind ",[25,1163,1164],{},"Vektoren kein universelles Zwischenformat","—sie sind Koordinaten unter einem Embedding-Modell. Index mit A, Abfrage mit B: Ähnlichkeit meist ",[25,1167,1168],{},"nicht vergleichbar","—oft ",[25,1171,1172],{},"vollständiges Re-Embedding",", Dimensionen (768 / 1024 / 1536 …) binden das Speicher-Schema.",[11,1175,1176,1177,1180,1181,1184],{},"Phase 3 persistiert ",[25,1178,1179],{},"strukturierte Zusammenfassungen + Zeichen-Spannen",", keine Vektoren; Chat-Modell wechseln ",[25,1182,1183],{},"ohne Index-Rebuild","; Belegkette (Quellpositionen) bleibt—passt zu „jederzeit andere LLMs testen“.",[34,1186],{},[54,1188,1190],{"id":1189},"grund-3-strukturiertes-routing-reicht-oft-für-toc-lastige-langdokumente","Grund 3: Strukturiertes Routing reicht oft für TOC-lastige Langdokumente",[11,1192,1193,1194,1197,1198,1201,1202,1205,1206,1211],{},"E-Books und PDFs haben meist ",[25,1195,1196],{},"Kapitelstruktur","; die Vorverarbeitung liefert ",[25,1199,1200],{},"Segmenttitel + Zusammenfassungen",". Für „was sagt Kapitel X“ oder „wie definiert das Buch Y“: Segmente aus dem Katalog wählen, dann ",[25,1203,1204],{},"Quelle ziehen","—in der Praxis stabil; Tool liefert ",[25,1207,1208,1209],{},"Quelle mit ",[154,1210,843],{},", Zero Hallucination bleibt an Zeichen-Spannen verankert.",[11,1213,1214,1215,1218,1219,1222],{},"Vektoren helfen bei semantischer Unschärfe, Mehrsprachigkeit, langen wörtlichen Treffern; für ",[25,1216,1217],{},"TOC + Vorverarbeitung + starke Nachverfolgbarkeit"," lohnt sich die Investition in ",[25,1220,1221],{},"Tool + Quellrückgabe + Zitierregeln"," oft mehr.",[34,1224],{},[54,1226,1228],{"id":1227},"ausblick-hybrider-recall-kein-neuanfang","Ausblick: Hybrider Recall, kein Neuanfang",[11,1230,1231,1232,1235,1236,1239,1240,1243,1244,1247],{},"Möglich ist später ",[25,1233,1234],{},"Vektor-Grobrecall"," (Embedding nur für Top-N-Kapitel-Kandidaten), Ende bleibt ",[25,1237,1238],{},"Segment wählen → Quelle → klickbare Spur","—Zero-Hallucination-Regeln unverändert. Falls eingeführt: Embedding ",[25,1241,1242],{},"optional",", explizite ",[25,1245,1246],{},"Re-Index","-Hinweise bei Modellwechsel—kein silent wrong retrieval.",[11,1249,1250,1251],{},"Bis dahin: ",[25,1252,1253],{},"jede OpenAI-kompatible Chat-API funktioniert; Chat-Modell wechseln ohne lokalen Index-Rebuild.",[34,1255],{},[37,1257,1259],{"id":1258},"x-zusammenfassung","X. Zusammenfassung",[281,1261,1262,1275],{},[284,1263,1264],{},[287,1265,1266,1269,1272],{},[290,1267,1268],{},"Schritt",[290,1270,1271],{},"Methode",[290,1273,1274],{},"Rolle",[303,1276,1277,1288,1301,1316,1327,1338],{},[287,1278,1279,1282,1285],{},[308,1280,1281],{},"Vorverarbeitung",[308,1283,1284],{},"Aufteilung nach TOC/Länge + Segment-Cache",[308,1286,1287],{},"Lange Bücher durchsuchbar & lokalisierbar",[287,1289,1290,1293,1298],{},[308,1291,1292],{},"Positions-Tags",[308,1294,1295,1297],{},[154,1296,156],{}," in der Quelle",[308,1299,1300],{},"Maschinenlesbare Herkunft",[287,1302,1303,1306,1313],{},[308,1304,1305],{},"Tool-Abruf",[308,1307,1308,1309,1312],{},"Segmente / Vollbuch-Zusammenfassungen pro Frage, ",[25,1310,1311],{},"Quelle"," zurück",[308,1314,1315],{},"Beleg vor Antwort erzwingen",[287,1317,1318,1321,1324],{},[308,1319,1320],{},"System Prompt",[308,1322,1323],{},"Buch zuerst, keine gefälschten Tags, fehlendes benennen",[308,1325,1326],{},"Generierung einschränken",[287,1328,1329,1332,1335],{},[308,1330,1331],{},"Frontend",[308,1333,1334],{},"Fußnote → Vorschau → Sprung & Hervorhebung",[308,1336,1337],{},"Nutzer prüft Belege",[287,1339,1340,1343,1346],{},[308,1341,1342],{},"Kein Vektor-Retrieval",[308,1344,1345],{},"Ein Provider; Chat-Modell tauschen ohne Re-Index",[308,1347,1348],{},"Geringere Integrations- & Migrationskosten",[11,1350,1351,1352,1355],{},"„Zero Hallucination“ heißt nicht, dass das Modell nie irrt—sondern dass ",[25,1353,1354],{},"Engineering die Ausgabe an eine Belegkette bindet",": kein Abruf → nicht als Buchinhalt ausgeben; mit Abruf → verifizierbare Quellpositionen.",[11,1357,1358,1359,1362,1363,1366],{},"Wenn Sie AI-Reading oder Dokumenten-Q&A bauen, hoffen wir, der Weg ",[25,1360,1361],{},"Volltext → Schlüsselsätze → Tool-first on demand"," plus ",[25,1364,1365],{},"inline Positions-Tags + Quellrückgabe"," sei eine nützliche Referenz.",[19,1368,1369],{},[11,1370,1371,1372,1377,1378,232],{},"Das sind Erfahrungen aus dem ",[243,1373,1376],{"href":1374,"rel":1375},"https://reader.linghuxiong.com",[247],"Foxycape"," AI-Reader—nur zur Orientierung. Den Reader finden Sie auf der ",[243,1379,1381],{"href":1380},"/de-de#download","Download-Seite",{"title":618,"searchDepth":1383,"depth":1383,"links":1384},2,[1385,1391,1392,1393,1394,1398,1405,1409,1410,1417],{"id":39,"depth":1383,"text":40,"children":1386},[1387,1389,1390],{"id":56,"depth":1388,"text":57},3,{"id":138,"depth":1388,"text":139},{"id":235,"depth":1388,"text":236},{"id":425,"depth":1383,"text":426},{"id":486,"depth":1383,"text":487},{"id":501,"depth":1383,"text":502},{"id":632,"depth":1383,"text":633,"children":1395},[1396,1397],{"id":660,"depth":1388,"text":661},{"id":686,"depth":1388,"text":687},{"id":763,"depth":1383,"text":764,"children":1399},[1400,1402,1404],{"id":781,"depth":1388,"text":1401},"6.1 get_related_segment_summaries — Gezielter Segment-Abruf",{"id":847,"depth":1388,"text":1403},"6.2 get_full_book_segment_summaries — Gesamtbuch-Überblick",{"id":868,"depth":1388,"text":869},{"id":899,"depth":1383,"text":900,"children":1406},[1407,1408],{"id":909,"depth":1388,"text":910},{"id":920,"depth":1388,"text":921},{"id":956,"depth":1383,"text":957},{"id":1031,"depth":1383,"text":1032,"children":1411},[1412,1413,1414,1415,1416],{"id":1061,"depth":1388,"text":1062},{"id":1097,"depth":1388,"text":1098},{"id":1157,"depth":1388,"text":1158},{"id":1189,"depth":1388,"text":1190},{"id":1227,"depth":1388,"text":1228},{"id":1258,"depth":1383,"text":1259},null,"2026-06-03","Technische Einblicke in Zero-Hallucination-Q&A im AI-Reader—Antworten strikt am Buchtext, mit Ein-Klick-Zitaten zu exakten Passagen.",false,"md",{},true,"/de-de/blog/zero-hallucination-qa",{"title":6,"description":1420},"de-de/blog/zero-hallucination-qa",[1429,1430,1431],"Leser","KI","Technik","zero-hallucination-qa","g9uECFFgKYnaY-yPn0UEDOE7zh85obCBo3y-QSaUYvo",1780489852812]