[{"data":1,"prerenderedAt":1864},["ShallowReactive",2],{"blog-article-/zh-hk/blog/foxycape-pdf-obsidian":3,"blog-list-zh-hk":262},{"id":4,"title":5,"body":6,"config":246,"date":247,"description":248,"draft":249,"extension":250,"image":246,"meta":251,"navigation":252,"path":253,"seo":254,"stem":255,"tags":256,"toolbar":246,"translationKey":260,"updated":247,"__hash__":261},"blog/zh-hk/blog/foxycape-pdf-obsidian.md","Foxycape PDF — 面向 Obsidian、與筆記連在一起的 PDF 閱讀器",{"type":7,"value":8,"toc":229},"minimark",[9,17,23,26,30,33,52,55,58,62,65,71,74,77,82,86,89,117,122,126,129,134,139,142,154,159,162,165,170,174,177,182,185,192,197,200,203,208,213,217,224],[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],{},"面向 Obsidian 的 PDF 閱讀器：劃線、引用與深度連結都能回到原文，和筆記工作流連在一起。",[24,25],"hr",{},[27,28,29],"h2",{"id":29},"為什麼需要它",[10,31,32],{},"在 Obsidian 裡讀 PDF，筆記鏈路經常斷掉：",[34,35,36,40,43,46,49],"ul",{},[37,38,39],"li",{},"劃線留在 PDF 裡，vault 筆記在另一邊。",[37,41,42],{},"要圖時只能截圖，糊且難管理。",[37,44,45],{},"貼上的摘錄和圖片很少能指回具體頁或區域。",[37,47,48],{},"深色主題下，淺色 PDF 頁很刺眼。",[37,50,51],{},"換閱讀器後，已有的頁碼/選區連結可能失效。",[10,53,54],{},"Foxycape PDF 在 Obsidian 內補上這些缺口。",[27,56,57],{"id":57},"功能特點",[59,60,61],"h3",{"id":61},"劃線同步筆記",[10,63,64],{},"不必讓劃線只留在 PDF 裡。新建劃線時，可自動建立或更新與 PDF 同名的 Markdown 筆記，追加帶回鏈的摘錄，並可選分割畫面開啟；不需要時可在設定中關閉。",[10,66,67],{},[13,68],{"alt":69,"src":70},"","https://cdn.linghuxiong.com/resources/obsidian/introduce/highlight-notes.gif",[59,72,73],{"id":73},"提取內嵌高清圖",[10,75,76],{},"不用靠模糊截圖湊合。游標懸停內嵌圖片（流動裝置用觸控控制項）即可預覽、複製或下載原圖。",[10,78,79],{},[13,80],{"alt":69,"src":81},"https://cdn.linghuxiong.com/resources/obsidian/introduce/embed-images.gif",[59,83,85],{"id":84},"文字與圖片引用一鍵回源","文字與圖片引用，一鍵回源",[10,87,88],{},"引用帶著出處，之後還能從筆記跳回 PDF：",[34,90,91,106,109],{},[37,92,93,94,98,99,98,102,105],{},"複製文字引用為帶深度連結的 Markdown（",[95,96,97],"code",{},"#page="," / ",[95,100,101],{},"#selection=",[95,103,104],{},"#markId=","）。",[37,107,108],{},"複製圖片引用；貼到 Markdown 時自動儲存 PNG 到 PDF 旁，並插入可點擊連結。",[37,110,111,112,116],{},"右鍵筆記中的圖片 → ",[113,114,115],"strong",{},"在 Foxycape 中開啟","，回到對應頁並高亮原始區域。",[10,118,119],{},[13,120],{"alt":69,"src":121},"https://cdn.linghuxiong.com/resources/obsidian/introduce/cite-and-back.gif",[59,123,125],{"id":124},"適配-obsidian-主題","適配 Obsidian 主題",[10,127,128],{},"深色 vault 裡淺色 PDF 頁往往刺眼。可選將灰階向量色對應到主題前景/背景（BETA），範圍可選全部 / 僅深色 / 僅淺色；彩色圖與彩色向量保持原色。",[10,130,131],{},[13,132],{"alt":69,"src":133},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt.gif",[10,135,136],{},[13,137],{"alt":69,"src":138},"https://cdn.linghuxiong.com/resources/obsidian/introduce/theme-adapt-dark.gif",[59,140,141],{"id":141},"相容內建閱讀器的位置與連結",[10,143,144,145,147,148,150,151,153],{},"換閱讀器不該弄壞已有連結。相容 Obsidian 的 ",[95,146,97],{},"、",[95,149,101],{},"，可設為預設 PDF 閱讀器，已開啟時複用分頁，並支援 ",[95,152,104],{}," 精確定位劃線。",[10,155,156],{},[13,157],{"alt":69,"src":158},"https://cdn.linghuxiong.com/resources/obsidian/introduce/compat-links.gif",[59,160,161],{"id":161},"劃線樣式與劃線列表",[10,163,164],{},"支援螢光筆、波浪線、直線底線及自訂顏色。劃線列表可篩選、排序、跳轉與刪除。",[10,166,167],{},[13,168],{"alt":69,"src":169},"https://cdn.linghuxiong.com/resources/obsidian/introduce/annotations.gif",[59,171,173],{"id":172},"智能複製-自動去掉軟換行","智能複製 — 自動去掉軟換行",[10,175,176],{},"PDF 排版常把句子攔腰截斷，複製後滿是多餘換行。照常選取並複製即可：Foxycape 會去掉這些軟換行，貼上成連貫段落，真正的段落分隔仍會保留。",[10,178,179],{},[13,180],{"alt":69,"src":181},"https://cdn.linghuxiong.com/resources/obsidian/introduce/smart-copy.gif",[59,183,184],{"id":184},"導航與搜尋",[10,186,187,188,191],{},"目錄、縮圖、頁碼跳轉，以及文件內搜尋（",[95,189,190],{},"Mod+F","），支援區分大小寫 / 變音符號 / 全字匹配。搜尋基於 PDF 文字層（無 OCR）。",[10,193,194],{},[13,195],{"alt":69,"src":196},"https://cdn.linghuxiong.com/resources/obsidian/introduce/navigate-search.gif",[59,198,199],{"id":199},"閱讀版面",[10,201,202],{},"縮放（自動 / 符合頁寬 / 百分比）、縱向或橫向捲動、單頁 / 雙頁 / 書籍版面、頁面旋轉、密碼 PDF。支援桌面與流動裝置。",[10,204,205],{},[13,206],{"alt":69,"src":207},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout.gif",[10,209,210],{},[13,211],{"alt":69,"src":212},"https://cdn.linghuxiong.com/resources/obsidian/introduce/layout-1.gif",[59,214,216],{"id":215},"設為預設-pdf-閱讀器","設為預設 PDF 閱讀器",[10,218,219,220,223],{},"建議在設定中開啟 ",[113,221,222],{},"用作預設 PDF 檢視器","，讓 Obsidian 預設用 Foxycape 開啟 PDF，深度連結、劃線與主題適配等能力體驗更完整。",[10,225,226],{},[13,227],{"alt":69,"src":228},"https://cdn.linghuxiong.com/resources/obsidian/introduce/set-default.gif",{"title":69,"searchDepth":230,"depth":230,"links":231},2,[232,233],{"id":29,"depth":230,"text":29},{"id":57,"depth":230,"text":57,"children":234},[235,237,238,239,240,241,242,243,244,245],{"id":61,"depth":236,"text":61},3,{"id":73,"depth":236,"text":73},{"id":84,"depth":236,"text":85},{"id":124,"depth":236,"text":125},{"id":141,"depth":236,"text":141},{"id":161,"depth":236,"text":161},{"id":172,"depth":236,"text":173},{"id":184,"depth":236,"text":184},{"id":199,"depth":236,"text":199},{"id":215,"depth":236,"text":216},null,"2026-08-11","劃線、引用與深度連結都能回到原文——Foxycape PDF 讓 Obsidian 裡的閱讀與筆記工作流連成一體。",false,"md",{},true,"/zh-hk/blog/foxycape-pdf-obsidian",{"title":5,"description":248},"zh-hk/blog/foxycape-pdf-obsidian",[257,258,259],"Obsidian","PDF","Foxycape","foxycape-pdf-obsidian","YULZuCmUD4rr8ah6eGeBFyhOjODSwXCIWTpI-p20hDo",[263,428],{"id":4,"title":5,"body":264,"config":246,"date":247,"description":248,"draft":249,"extension":250,"image":246,"meta":425,"navigation":252,"path":253,"seo":426,"stem":255,"tags":427,"toolbar":246,"translationKey":260,"updated":247,"__hash__":261},{"type":7,"value":265,"toc":410},[266,270,274,276,278,280,292,294,296,298,300,304,306,308,312,314,316,332,336,338,340,344,348,350,358,362,364,366,370,372,374,378,380,384,388,390,392,396,400,402,406],[10,267,268],{},[13,269],{"alt":15,"src":16},[18,271,272],{},[10,273,22],{},[24,275],{},[27,277,29],{"id":29},[10,279,32],{},[34,281,282,284,286,288,290],{},[37,283,39],{},[37,285,42],{},[37,287,45],{},[37,289,48],{},[37,291,51],{},[10,293,54],{},[27,295,57],{"id":57},[59,297,61],{"id":61},[10,299,64],{},[10,301,302],{},[13,303],{"alt":69,"src":70},[59,305,73],{"id":73},[10,307,76],{},[10,309,310],{},[13,311],{"alt":69,"src":81},[59,313,85],{"id":84},[10,315,88],{},[34,317,318,326,328],{},[37,319,93,320,98,322,98,324,105],{},[95,321,97],{},[95,323,101],{},[95,325,104],{},[37,327,108],{},[37,329,111,330,116],{},[113,331,115],{},[10,333,334],{},[13,335],{"alt":69,"src":121},[59,337,125],{"id":124},[10,339,128],{},[10,341,342],{},[13,343],{"alt":69,"src":133},[10,345,346],{},[13,347],{"alt":69,"src":138},[59,349,141],{"id":141},[10,351,144,352,147,354,150,356,153],{},[95,353,97],{},[95,355,101],{},[95,357,104],{},[10,359,360],{},[13,361],{"alt":69,"src":158},[59,363,161],{"id":161},[10,365,164],{},[10,367,368],{},[13,369],{"alt":69,"src":169},[59,371,173],{"id":172},[10,373,176],{},[10,375,376],{},[13,377],{"alt":69,"src":181},[59,379,184],{"id":184},[10,381,187,382,191],{},[95,383,190],{},[10,385,386],{},[13,387],{"alt":69,"src":196},[59,389,199],{"id":199},[10,391,202],{},[10,393,394],{},[13,395],{"alt":69,"src":207},[10,397,398],{},[13,399],{"alt":69,"src":212},[59,401,216],{"id":215},[10,403,219,404,223],{},[113,405,222],{},[10,407,408],{},[13,409],{"alt":69,"src":228},{"title":69,"searchDepth":230,"depth":230,"links":411},[412,413],{"id":29,"depth":230,"text":29},{"id":57,"depth":230,"text":57,"children":414},[415,416,417,418,419,420,421,422,423,424],{"id":61,"depth":236,"text":61},{"id":73,"depth":236,"text":73},{"id":84,"depth":236,"text":85},{"id":124,"depth":236,"text":125},{"id":141,"depth":236,"text":141},{"id":161,"depth":236,"text":161},{"id":172,"depth":236,"text":173},{"id":184,"depth":236,"text":184},{"id":199,"depth":236,"text":199},{"id":215,"depth":236,"text":216},{},{"title":5,"description":248},[257,258,259],{"id":429,"title":430,"body":431,"config":246,"date":246,"description":437,"draft":249,"extension":250,"image":246,"meta":1859,"navigation":252,"path":1860,"seo":1861,"stem":1862,"tags":246,"toolbar":246,"translationKey":246,"updated":246,"__hash__":1863},"blog/zh-hk/blog/zero-hallucination-qa.md","Zero Hallucination Qa",{"type":7,"value":432,"toc":1825},[433,435,438,449,451,457,470,472,476,483,488,492,510,515,526,531,565,568,572,589,596,600,615,620,657,664,668,681,706,711,828,846,853,855,859,866,881,888,908,914,916,920,923,929,931,935,958,968,1028,1031,1042,1051,1058,1060,1064,1071,1077,1084,1088,1095,1103,1110,1114,1124,1167,1178,1184,1186,1190,1204,1212,1219,1222,1264,1274,1282,1288,1295,1299,1308,1314,1325,1327,1331,1337,1341,1348,1352,1375,1385,1387,1391,1397,1455,1461,1463,1467,1474,1497,1501,1521,1532,1534,1538,1549,1552,1575,1586,1592,1594,1598,1617,1628,1630,1634,1656,1667,1669,1673,1692,1698,1700,1704,1791,1798,1809],[24,434],{},[10,436,437],{},"title: 我是如何實現閱讀器「零幻覺」問答的\ndescription: 分享 AI 閱讀器零幻覺問答的工程實作：回答嚴格基於當前書籍原文，關鍵論述可一鍵溯源到具體段落。\ndate: 2026-06-03\nupdated: 2026-06-03\ntranslationKey: zero-hallucination-qa\ntags:",[34,439,440,443,446],{},[37,441,442],{},"閱讀器",[37,444,445],{},"AI",[37,447,448],{},"技術\ndraft: false",[24,450],{},[10,452,453],{},[13,454],{"alt":455,"src":456},"封面：零幻覺問答","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-cover.png",[18,458,459],{},[10,460,461,462,465,466,469],{},"本文分享 AI 閱讀器 ",[113,463,464],{},"零幻覺問答"," 的工程實作：回答嚴格基於當前書籍原文，關鍵論述可 ",[113,467,468],{},"一鍵溯源"," 到具體段落。若你也在做 AI 閱讀、文件 QA 或 RAG 類應用，希望三次迭代的經驗與最終架構能有所參考。",[24,471],{},[27,473,475],{"id":474},"一實踐歷程三個階段的演進","一、實踐歷程：三個階段的演進",[10,477,478,479,482],{},"零幻覺問答並非一開始就設計完備，而是在 ",[113,480,481],{},"成本、延遲和準確率"," 的拉扯中逐步演進。以下依時間順序回顧三個階段，便於理解當前架構為何長成這樣。",[484,485],"mermaid",{":config":486,"code":487},"config","flowchart%20LR%0A%20%20%20%20P1%5B%E9%9A%8E%E6%AE%B5%E4%B8%80%EF%BC%9A%E5%85%A8%E6%96%87%E7%9B%B4%E5%A1%9E%5D%20--%3E%20P2%5B%E9%9A%8E%E6%AE%B5%E4%BA%8C%EF%BC%9ALLM%20%E6%8F%90%E5%8F%96%E9%97%9C%E9%8D%B5%E5%8F%A5%5D%0A%20%20%20%20P2%20--%3E%20P3%5B%E9%9A%8E%E6%AE%B5%E4%B8%89%EF%BC%9A%E7%89%87%E6%AE%B5%E7%B4%A2%E5%BC%95%20%2B%20Tool%20%E6%AA%A2%E7%B4%A2%5D%0A%20%20%20%20P1%20-.-%3E%7C%E6%85%A2%E3%80%81%E8%B2%B4%E3%80%81%E9%95%B7%E6%9B%B8%E4%B8%8D%E6%BA%96%7C%20X1%5B%E6%B7%98%E6%B1%B0%5D%0A%20%20%20%20P2%20-.-%3E%7C%E4%B8%9F%E7%B4%B0%E7%AF%80%E3%80%81%E4%BB%8D%E5%81%8F%E6%85%A2%7C%20X2%5B%E6%B7%98%E6%B1%B0%5D%0A%20%20%20%20P3%20--%3E%7C%E7%95%B6%E5%89%8D%E6%96%B9%E6%A1%88%7C%20OK%5B%E9%9B%B6%E5%B9%BB%E8%A6%BA%20%2B%20%E5%8F%AF%E6%BA%AF%E6%BA%90%5D",[59,489,491],{"id":490},"階段一全文直塞-context最簡單也最先暴露問題","階段一：全文直塞 Context（最簡單，也最先暴露問題）",[10,493,494,497,498,501,502,505,506,509],{},[113,495,496],{},"做法："," 用戶開啟一本書提問時，將提取出的 ",[113,499,500],{},"全部正文"," 放進 System Prompt 或 User 訊息，交給對話模型作答。若全書超過約 ",[113,503,504],{},"40 萬字元","，則 ",[113,507,508],{},"硬截斷","——只保留前面一段，後續章節對模型不可見。",[10,511,512],{},[113,513,514],{},"優點：",[34,516,517,520,523],{},[37,518,519],{},"實作成本極低，幾乎不需要預處理；",[37,521,522],{},"短書、結構簡單的文件效果尚可——模型確實「看到了整本書」；",[37,524,525],{},"互動簡單：問就能答，沒有「請先等待分析」的等待狀態。",[10,527,528],{},[113,529,530],{},"缺點（很快變得不可接受）：",[34,532,533,539,545,555],{},[37,534,535,538],{},[113,536,537],{},"回應慢","：每次提問都要把海量文字送進模型，首 Token 延遲和總耗時隨書長線性惡化；",[37,540,541,544],{},[113,542,543],{},"Token 成本高","：同一本書每問一次就重複付一遍全文的輸入費用；",[37,546,547,550,551,554],{},[113,548,549],{},"長書嚴重失真","：超過 40 萬字元後被截斷，後半本、附錄、結論章節等於不存在，且 UI 往往 ",[113,552,553],{},"沒有明確告知"," 已截斷；",[37,556,557,560,561,564],{},[113,558,559],{},"檢索粒度為零","：模型要在幾十萬字裡「大海撈針」，容易漏細節，也更容易產生 ",[113,562,563],{},"看似合理、實則無據"," 的概括——閱讀場景最忌諱這類幻覺。",[10,566,567],{},"階段一適合驗證 MVP，不適合作為產品級方案。",[59,569,571],{"id":570},"階段二用輕量-llm-提取關鍵句壓縮-context但壓得太狠","階段二：用輕量 LLM 提取關鍵句（壓縮 Context，但壓得太狠）",[10,573,574,576,577,580,581,584,585,588],{},[113,575,496],{}," 在提問前（或首次開啟書時），用 ",[113,578,579],{},"成本更低的模型"," 對正文做一輪預處理：依 Spine 分章（或整書分段），抽取 ",[113,582,583],{},"關鍵句","，輸出時保留 ",[95,586,587],{},"[f檔案-起始-結束]"," 形式的位置標記，再將摘錄拼成較短文字，作為後續問答的 Context。",[10,590,591,592,595],{},"典型鏈路是 ",[113,593,594],{},"Extract → Cache → Chat","：先離線或按需跑一遍提取並落庫，之後每次提問複用同一份「關鍵句合集」。這與許多文件 QA 原型裡「先壓縮文件、再拿壓縮結果做 QA」的思路相同，也是我們在階段二實際採用過的路線。",[10,597,598],{},[113,599,514],{},[34,601,602,609,612],{},[37,603,604,605,608],{},"每次提問送入模型的文字 ",[113,606,607],{},"明顯縮短","，單次 Token 消耗較階段一顯著下降；",[37,610,611],{},"預處理結果可快取，同一本書不必每次提問都重新提取；",[37,613,614],{},"已引入位置標記，為後續溯源打下基礎。",[10,616,617],{},[113,618,619],{},"缺點（長書場景下依然扛不住）：",[34,621,622,628,638,647],{},[37,623,624,627],{},[113,625,626],{},"細節大量丟失","：「關鍵句」由模型主觀篩選，論證鏈上的限定條件、反例等容易被丟掉，答案容易「正確但片面」；",[37,629,630,633,634,637],{},[113,631,632],{},"長書 Context 仍然偏大","：大部頭作品即便只留關鍵句，拼接後的輸入依然可觀，",[113,635,636],{},"延遲和成本只是緩解，沒有根治","；",[37,639,640,643,644,637],{},[113,641,642],{},"雙重 LLM 誤差","：提取階段可能漏選，問答階段又可能誤讀摘錄，錯誤會 ",[113,645,646],{},"疊加",[37,648,649,652,653,656],{},[113,650,651],{},"靜態 Context","：無論用戶問的是某一章細節還是全書結構，送進模型的都是 ",[113,654,655],{},"同一份預提取文字","，無法依問題動態收窄範圍。",[10,658,659,660,663],{},"這一階段的教訓很明確：",[113,661,662],{},"問題不在「有沒有壓縮」，而在「壓縮是否按需、以及能否回到原文」","。",[59,665,667],{"id":666},"階段三片段索引-tool-按需檢索-原文回傳當前方案","階段三：片段索引 + Tool 按需檢索 + 原文回傳（當前方案）",[10,669,670,672,673,680],{},[113,671,496],{}," 基本思路參考了 ",[674,675,679],"a",{"href":676,"rel":677},"https://github.com/VectifyAI/PageIndex",[678],"nofollow","PageIndex","，相對階段二，核心變化有三點：",[682,683,684,690,700],"ol",{},[37,685,686,689],{},[113,687,688],{},"預處理產物是結構化索引","（目錄級摘要 + 精確字元 span），而不是把摘錄直接當作問答 Context；",[37,691,692,695,696,699],{},[113,693,694],{},"每次提問由模型透過 Tool Calling 按需檢索","，再 ",[113,697,698],{},"拉取帶位置標記的原文"," 作答；",[37,701,702,705],{},[113,703,704],{},"System Prompt 與前端聯動","，約束引用格式，並支援點擊角標跳轉、高亮原文。",[10,707,708],{},[113,709,710],{},"三階段對比：",[712,713,714,733],"table",{},[715,716,717],"thead",{},[718,719,720,724,727,730],"tr",{},[721,722,723],"th",{},"維度",[721,725,726],{},"階段一（全文直塞）",[721,728,729],{},"階段二（關鍵句提取）",[721,731,732],{},"階段三（當前）",[734,735,736,755,769,783,797,814],"tbody",{},[718,737,738,742,745,748],{},[739,740,741],"td",{},"單次提問 Context",[739,743,744],{},"全書（或截斷後的前半本）",[739,746,747],{},"預提取關鍵句合集",[739,749,750,751,754],{},"僅與問題相關的少量 ",[113,752,753],{},"原文"," 片段",[718,756,757,760,763,766],{},[739,758,759],{},"長書準確性",[739,761,762],{},"超 40 萬字元後嚴重下降",[739,764,765],{},"依賴提取品質，易丟細節",[739,767,768],{},"依目錄/span 檢索，不受全書長度硬截斷",[718,770,771,774,777,780],{},[739,772,773],{},"回應速度",[739,775,776],{},"慢",[739,778,779],{},"略好，長書仍慢",[739,781,782],{},"檢索 + 短 Context，明顯更快",[718,784,785,788,791,794],{},[739,786,787],{},"Token 成本",[739,789,790],{},"極高",[739,792,793],{},"中等偏高",[739,795,796],{},"預處理攤銷 + 按需付費",[718,798,799,802,805,808],{},[739,800,801],{},"溯源能力",[739,803,804],{},"弱（難標註出處）",[739,806,807],{},"有位置標記，但內容已是二次篩選",[739,809,810,811],{},"角標對應 ",[113,812,813],{},"真實原文 span",[718,815,816,819,822,825],{},[739,817,818],{},"工程複雜度",[739,820,821],{},"低",[739,823,824],{},"中",[739,826,827],{},"高",[10,829,830,833,834,837,838,841,842,845],{},[113,831,832],{},"為何停在階段三："," 閱讀場景的零幻覺，關鍵不是「讓模型看過盡量多的字」，而是 ",[113,835,836],{},"「作答前必須拿到與問題相關的原文證據」","。階段一、二都在 Context ",[113,839,840],{},"體積"," 上做文章；階段三把鏈路拆成 ",[113,843,844],{},"「索引（預處理）→ 檢索（Tool）→ 取證（原文）→ 作答（約束生成）」","，才同時兼顧準確率、成本與可溯源性。",[10,847,848,849,852],{},"下文展開 ",[113,850,851],{},"階段三"," 的實作細節。",[24,854],{},[27,856,858],{"id":857},"二問題定義閱讀場景下幻覺比普通-chat-更致命","二、問題定義：閱讀場景下，幻覺比普通 Chat 更致命",[10,860,861,862,865],{},"普通 ChatBot 偶發錯誤，用戶往往可以容忍。但在 ",[113,863,864],{},"書籍 QA"," 裡，幻覺的代價更高：",[34,867,868,875,878],{},[37,869,870,871,874],{},"用戶問的是 ",[113,872,873],{},"這本書"," 說了什麼，不是問模型的 parametric memory；",[37,876,877],{},"一句似是而非的「書中觀點」，可能誤導筆記、引用甚至二次傳播；",[37,879,880],{},"沒有出處，用戶無法核實，產品信任很難建立。",[10,882,883,884,887],{},"因此，「零幻覺」在工程上落地為三條 ",[113,885,886],{},"可執行"," 的規則：",[682,889,890,896,902],{},[37,891,892,895],{},[113,893,894],{},"書內問題必須先查書","：凡可能與當前書籍相關的問題，模型必須先走檢索（Tool），再組織答案；",[37,897,898,901],{},[113,899,900],{},"答案必須可溯源","：關鍵結論附帶原文位置標記，前端可解析並跳轉高亮；",[37,903,904,907],{},[113,905,906],{},"查不到就說查不到","：書中沒有的內容應明確告知，而不是用通用知識冒充「書中觀點」。",[10,909,910,911,913],{},"下文依 ",[113,912,851],{}," 的數據流，說明上述規則如何落地。",[24,915],{},[27,917,919],{"id":918},"三整體架構預處理-工具檢索-約束生成-可點擊溯源","三、整體架構：預處理 → 工具檢索 → 約束生成 → 可點擊溯源",[484,921],{":config":486,"code":922},"flowchart%20TB%0A%20%20%20%20subgraph%20prep%20%5B%E9%9B%A2%E7%B7%9A%2F%E9%A6%96%E6%AC%A1%E9%A0%90%E8%99%95%E7%90%86%5D%0A%20%20%20%20%20%20%20%20A%5B%E4%BE%9D%E7%9B%AE%E9%8C%84%E6%88%96%E9%95%B7%E5%BA%A6%E5%88%87%E5%88%86%E5%85%A8%E6%9B%B8%5D%20--%3E%20B%5BLLM%20%E7%94%A2%E7%94%9F%E7%89%87%E6%AE%B5%E6%91%98%E8%A6%81%5D%0A%20%20%20%20%20%20%20%20B%20--%3E%20C%5B%E6%9C%AC%E6%A9%9F%E6%8C%81%E4%B9%85%E5%8C%96%20Segment%20%E5%BF%AB%E5%8F%96%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20ask%20%5B%E7%94%A8%E6%88%B6%E6%8F%90%E5%95%8F%5D%0A%20%20%20%20%20%20%20%20D%5B%E7%94%A8%E6%88%B6%E8%BC%B8%E5%85%A5%E5%95%8F%E9%A1%8C%5D%20--%3E%20E%7B%E5%B7%B2%E6%9C%89%20Segment%20%E5%BF%AB%E5%8F%96%3F%7D%0A%20%20%20%20%20%20%20%20E%20--%3E%7C%E5%90%A6%7C%20F%5B%E6%8F%90%E5%8F%96%E5%85%A8%E6%96%87%20%2F%20%E8%A9%A2%E5%95%8F%E6%98%AF%E5%90%A6%E9%A0%90%E8%99%95%E7%90%86%5D%0A%20%20%20%20%20%20%20%20F%20--%3E%20prep%0A%20%20%20%20%20%20%20%20E%20--%3E%7C%E6%98%AF%7C%20G%5B%E8%A8%BB%E5%86%8A%20Tool%20Calling%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20retrieve%20%5B%E5%B7%A5%E5%85%B7%E6%AA%A2%E7%B4%A2%5D%0A%20%20%20%20%20%20%20%20G%20--%3E%20H%7B%E5%95%8F%E9%A1%8C%E9%A1%9E%E5%9E%8B%7D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%E5%85%A8%E6%9B%B8%E6%A6%82%E8%A6%BD%2F%E6%9B%B8%E8%A9%95%7C%20I%5Bget_full_book_segment_summaries%5D%0A%20%20%20%20%20%20%20%20H%20--%3E%7C%E5%85%B7%E9%AB%94%E4%BA%8B%E5%AF%A6%2F%E4%BA%BA%E7%89%A9%2F%E7%AB%A0%E7%AF%80%7C%20J%5Bget_related_segment_summaries%5D%0A%20%20%20%20%20%20%20%20J%20--%3E%20K%5BLLM%20%E5%BE%9E%E6%91%98%E8%A6%81%E7%9B%AE%E9%8C%84%E4%B8%AD%E9%81%B8%E7%9B%B8%E9%97%9C%E7%89%87%E6%AE%B5%20ID%5D%0A%20%20%20%20%20%20%20%20K%20--%3E%20L%5B%E4%BE%9D%20span%20%E6%8B%89%E5%8F%96%E5%8E%9F%E6%96%87%20%2B%20%E4%BD%8D%E7%BD%AE%E6%A8%99%E8%A8%98%5D%0A%20%20%20%20%20%20%20%20I%20--%3E%20M%5B%E6%8B%BC%E6%8E%A5%E5%85%A8%E6%9B%B8%E7%89%87%E6%AE%B5%E6%91%98%E8%A6%81%5D%0A%20%20%20%20end%0A%0A%20%20%20%20subgraph%20answer%20%5B%E7%94%9F%E6%88%90%E8%88%87%E5%B1%95%E7%A4%BA%5D%0A%20%20%20%20%20%20%20%20L%20--%3E%20N%5BTool%20%E7%B5%90%E6%9E%9C%E5%9B%9E%E5%82%B3%E6%A8%A1%E5%9E%8B%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%20%E7%B4%84%E6%9D%9F%E5%BC%95%E7%94%A8%E6%A0%BC%E5%BC%8F%5D%0A%20%20%20%20%20%20%20%20O%20--%3E%20P%5B%E4%B8%B2%E6%B5%81%E8%BC%B8%E5%87%BA%E7%AD%94%E6%A1%88%20%2B%20%E4%BD%8D%E7%BD%AE%E8%A7%92%E6%A8%99%5D%0A%20%20%20%20%20%20%20%20P%20--%3E%20Q%5B%E6%B8%B2%E6%9F%93%E5%8F%AF%E9%BB%9E%E6%93%8A%E5%BC%95%E7%94%A8%E8%A7%92%E6%A8%99%5D%0A%20%20%20%20%20%20%20%20Q%20--%3E%20R%5B%E9%BB%9E%E6%93%8A%20%E2%86%92%20%E9%A0%90%E8%A6%BD%E5%8E%9F%E6%96%87%20%E2%86%92%20%E8%B7%B3%E8%BD%89%E9%AB%98%E4%BA%AE%5D%0A%20%20%20%20end",[10,924,925,926,663],{},"核心思路可概括為：",[113,927,928],{},"不讓模型「憑記憶答題」，而是讓它「先取證、再作答、並標註出處」",[24,930],{},[27,932,934],{"id":933},"四預處理把整本書變成可檢索的片段索引","四、預處理：把整本書變成可檢索的「片段索引」",[10,936,937,938,941,942,945,946,949,950,953,954,957],{},"若每次提問仍採用 ",[113,939,940],{},"階段一"," 的全文 Context，長書必然爆 Token，檢索粒度也過粗。階段三的解法是：用戶首次對某本書發起 AI 對話時，背景非同步跑 ",[113,943,944],{},"片段摘要任務","，依 ",[113,947,948],{},"目錄結構"," 或 ",[113,951,952],{},"文字長度"," 將全書切成若干 ",[95,955,956],{},"Segment","，為每個片段產生摘要，並持久化到本機 IndexedDB。",[10,959,960,961,963,964,967],{},"每個 ",[95,962,956],{}," 在數據結構上包含摘要與 ",[113,965,966],{},"正文物理位置","：",[712,969,970,980],{},[715,971,972],{},[718,973,974,977],{},[721,975,976],{},"欄位",[721,978,979],{},"含義",[734,981,982,995,1008,1018],{},[718,983,984,992],{},[739,985,986,98,989],{},[95,987,988],{},"startFileIndex",[95,990,991],{},"endFileIndex",[739,993,994],{},"Spine 檔案索引（PDF 則每頁一個檔案）",[718,996,997,1005],{},[739,998,999,98,1002],{},[95,1000,1001],{},"startOffset",[95,1003,1004],{},"endOffset",[739,1006,1007],{},"字元級起迄偏移",[718,1009,1010,1015],{},[739,1011,1012],{},[95,1013,1014],{},"sequence",[739,1016,1017],{},"線性閱讀順序",[718,1019,1020,1025],{},[739,1021,1022],{},[95,1023,1024],{},"title",[739,1026,1027],{},"對應目錄標題",[10,1029,1030],{},"切分策略兼顧精度與成本：單一目錄正文不超過約 20KB 時只摘要該節點；同級目錄會合併成批（15KB～20KB）再呼叫 LLM；無目錄的大塊正文則依 3～4 萬字元區間切段。",[10,1032,1033,1034,1037,1038,1041],{},"摘要生成時的 System Prompt 會要求 ",[113,1035,1036],{},"保留原文位置標記","（格式 ",[95,1039,1040],{},"[f數字-數字-數字]","），以便後續 Tool 回傳原文時，位置資訊與 spine 字元偏移一致。核心約束如下：",[1043,1044,1049],"pre",{"className":1045,"code":1047,"language":1048,"meta":69},[1046],"language-text","若摘要內容與原文某段相關，須保留段末位置資訊，格式 [f數字-數字-數字]（如 [f1-90-109]）。\n位置標記是整體，禁止修改、合併或省略其中的任何字元或數值。\n","text",[95,1050,1047],{"__ignoreMap":69},[10,1052,1053,1054,1057],{},"預處理完成後，問答不再依賴「整書 Context」，而是依賴 ",[113,1055,1056],{},"結構化片段索引","——這是長書場景下零幻覺的工程前提。",[24,1059],{},[27,1061,1063],{"id":1062},"五位置標記體系把出處編碼進文字","五、位置標記體系：把「出處」編碼進文字",[10,1065,1066,1067,1070],{},"零幻覺不僅要求內容來自原文，還要求 ",[113,1068,1069],{},"出處可機器解析、可在 UI 中跳轉","。我們採用內嵌位置標記：",[1043,1072,1075],{"className":1073,"code":1074,"language":1048},[1046],"[f{fileIndex}-{startChar}-{endChar}]\n",[95,1076,1074],{"__ignoreMap":69},[10,1078,1079,1080,1083],{},"例如 ",[95,1081,1082],{},"[f5-123-165]"," 表示：第 5 個 Spine 檔案（從 0 起算）中，字元偏移 123～165 的文字區間。",[59,1085,1087],{"id":1086},"_51-標記如何寫入正文","5.1 標記如何寫入正文",[10,1089,1090,1091,1094],{},"正文提取層在輸出片段時，為每個小段在段末寫入 ",[95,1092,1093],{},"[f{fileIndex}-{start}-{end}]","。示意：",[1043,1096,1101],{"className":1097,"code":1099,"language":1100,"meta":69},[1098],"language-typescript","const position = `[f${fileIndex}-${absOffset}-${absOffset + segment.length}]`;\nfileLines.push(segment.text.trim() + position);\n","typescript",[95,1102,1099],{"__ignoreMap":69},[10,1104,1105,1106,1109],{},"無論是預處理摘要還是 Tool 回傳的原文摘錄，位置資訊都與 ",[113,1107,1108],{},"Spine 字元偏移"," 對齊，而不是讓模型「估算頁碼」。",[59,1111,1113],{"id":1112},"_52-對模型輸出的約束","5.2 對模型輸出的約束",[10,1115,1116,1117,1123],{},"組裝 System Prompt 時，我們單獨約定了 ",[113,1118,1119],{},[1120,1121,1122],"span",{},"Position Citation Rules","，核心五條：",[682,1125,1126,1136,1146,1152,1161],{},[37,1127,1128,1131,1132,1135],{},[113,1129,1130],{},"標準格式","：必須使用 ",[95,1133,1134],{},"[f_fileIndex-startChar-endChar]","，三段數字缺一不可；",[37,1137,1138,1141,1142,1145],{},[113,1139,1140],{},"只引用當前來源","：角標須 ",[113,1143,1144],{},"原樣複製"," 自本輪 System/User 訊息或 Tool 回傳文字中的標記；",[37,1147,1148,1151],{},[113,1149,1150],{},"禁止偽造","：不得自行計算、修改或編造位置；",[37,1153,1154,1157,1158,637],{},[113,1155,1156],{},"寧缺毋濫","：當前上下文沒有合法標記時，正常作答即可，",[113,1159,1160],{},"不要輸出任何位置標記",[37,1162,1163,1166],{},[113,1164,1165],{},"緊跟論述","：標記須緊跟相關句段，禁止在文末堆砌引用清單。",[10,1168,1169,1170,1173,1174,1177],{},"前端展示前還會過濾模型偶發輸出的 ",[113,1171,1172],{},"兩段位"," 非法標記（如 ",[95,1175,1176],{},"[f1-293]","），避免無效角標進入 UI。",[10,1179,1180],{},[13,1181],{"alt":1182,"src":1183},"引用溯源彈窗","https://cdn.linghuxiong.com/resources/snapshots/ai-chat.png",[24,1185],{},[27,1187,1189],{"id":1188},"六tool-calling先檢索再回答","六、Tool Calling：先檢索，再回答",[10,1191,1192,1193,1196,1197,1200,1201,663],{},"當對話綁定某本書（存在 ",[95,1194,1195],{},"resourceId","，且 ",[95,1198,1199],{},"chatType === 'chat'","）時，每次生成前會向模型註冊兩個 Tool，並掛載對應的 executor。整體遵循 OpenAI 相容的 ",[113,1202,1203],{},"function calling 迴圈",[59,1205,1207,1208,1211],{"id":1206},"_61-get_related_segment_summaries-針對具體問題查片段","6.1 ",[95,1209,1210],{},"get_related_segment_summaries"," —— 針對具體問題查片段",[10,1213,1214,1215,1218],{},"適用於：概念、人物、情節、章節細節等 ",[113,1216,1217],{},"有明確檢索意圖"," 的問題。",[10,1220,1221],{},"流程簡述：",[682,1223,1224,1231,1237,1244,1258],{},[37,1225,1226,1227,1230],{},"模型將用戶口語 ",[113,1228,1229],{},"改寫為書中可能出現的術語","（System Prompt 中的「Optimize Search Queries」）；",[37,1232,1233,1234,637],{},"呼叫 Tool，傳入 ",[95,1235,1236],{},"question",[37,1238,1239,1240,1243],{},"將所有片段摘要依 Token 預算 ",[113,1241,1242],{},"分批","（單批約 3 萬 Token，最多 5 批）；",[37,1245,1246,1247,1250,1251,1254,1255,637],{},"每批發起一次 ",[113,1248,1249],{},"獨立的 LLM 請求","，從 ",[95,1252,1253],{},"{ id, title, summary }"," 清單中選出相關片段 ID（最多 5 個），回傳 JSON，形如 ",[95,1256,1257],{},"{\"Thinking\":\"...\",\"answer\":[\"1\",\"3\"]}",[37,1259,1260,1261,1263],{},"依選中 Segment 的 span，從 Spine ",[113,1262,698],{},"（不是摘要），作為 Tool 結果回傳。",[10,1265,1266,1269,1270,1273],{},[113,1267,1268],{},"關鍵設計：Tool 回傳原文，而非摘要。"," 模型作答時看到的是真實段落 + 內嵌 ",[95,1271,1272],{},"[f…]","，避免「摘要 → 再概括」帶來的漂移。",[59,1275,1277,1278,1281],{"id":1276},"_62-get_full_book_segment_summaries-全書概覽類問題","6.2 ",[95,1279,1280],{},"get_full_book_segment_summaries"," —— 全書概覽類問題",[10,1283,1284,1285,1218],{},"適用於：「總結全書」「點評這本書」「整體結構/主題」等 ",[113,1286,1287],{},"需要全局視野",[10,1289,1290,1291,1294],{},"依閱讀順序拼接所有片段的 ",[95,1292,1293],{},"summary"," 回傳，避免逐段相關度篩選遺漏關鍵章節。",[59,1296,1298],{"id":1297},"_63-system-prompt書優先工具優先","6.3 System Prompt：書優先、工具優先",[10,1300,1301,1302,1307],{},"綁定書籍時，System Prompt 注入 ",[113,1303,1304],{},[1120,1305,1306],{},"Core Principles for Reading Assistant","，核心三條：",[1043,1309,1312],{"className":1310,"code":1311,"language":1048},[1046],"1. Book First, Tool First\n   - 任何可能與書籍相關的問題，必須先呼叫工具檢索；\n   - 答案必須主要依據檢索結果，禁止不檢索就編造「書中內容」。\n\n2. General Knowledge as Fallback Only\n   - 僅當：純閒聊 / 用戶明確要求不用書 / 工具無結果時，才可使用通用知識；\n   - 若書中沒有，必須先聲明「書中未提及此內容」，再補充通用知識。\n\n3. Direct Style\n   - 直入主題，禁止「根據提供的材料…」「綜上所述…」等套話。\n",[95,1313,1311],{"__ignoreMap":69},[10,1315,1316,1317,1320,1321,1324],{},"生成層實作標準 Tool 迴圈：",[95,1318,1319],{},"tool_calls"," → 執行 executor → 追加 ",[95,1322,1323],{},"role: tool"," → 繼續請求，直到輸出最終文字。啟用 tools 時關閉 thinking 通道，避免與 function call 協定衝突。",[24,1326],{},[27,1328,1330],{"id":1329},"七前端溯源從角標到原文高亮","七、前端溯源：從角標到原文高亮",[10,1332,1333,1334,1336],{},"模型輸出的 ",[95,1335,1082],{}," 不會直接展示，在渲染層轉為可點擊引用。",[59,1338,1340],{"id":1339},"_71-角標渲染","7.1 角標渲染",[10,1342,1343,1344,1347],{},"展示前將位置標記規範化為 Markdown 連結，例如 ",[95,1345,1346],{},"[1]([f5-123-165])","，再渲染為序號角標；同一位置多次出現時可去重，避免 UI 堆疊。",[59,1349,1351],{"id":1350},"_72-點擊互動","7.2 點擊互動",[682,1353,1354,1363,1369],{},[37,1355,1356,1359,1360,1362],{},[113,1357,1358],{},"首次點擊","：解析 ",[95,1361,1272],{}," → 取 fileIndex 與字元偏移 → 從 Spine 原文提取文字 → 彈出預覽（可帶目錄標題）；",[37,1364,1365,1368],{},[113,1366,1367],{},"再次點擊同一角標","：關閉彈窗；",[37,1370,1371,1374],{},[113,1372,1373],{},"確認跳轉","：開啟閱讀視圖，依字元區間高亮。",[10,1376,1377,1378,1381,1382,663],{},"從模型複製的標記到用戶看到的原文，中間 ",[113,1379,1380],{},"不經 LLM 二次加工","，溯源鏈路全程 ",[113,1383,1384],{},"確定、可重現",[24,1386],{},[27,1388,1390],{"id":1389},"八邊界情況與誠實降級","八、邊界情況與誠實降級",[10,1392,1393,1394,967],{},"零幻覺不等於「永遠有答案」，而是 ",[113,1395,1396],{},"沒有證據時不瞎編",[712,1398,1399,1409],{},[715,1400,1401],{},[718,1402,1403,1406],{},[721,1404,1405],{},"場景",[721,1407,1408],{},"行為",[734,1410,1411,1419,1431,1439,1447],{},[718,1412,1413,1416],{},[739,1414,1415],{},"片段摘要尚未產生",[739,1417,1418],{},"先提取全文做摘要",[718,1420,1421,1424],{},[739,1422,1423],{},"Tool 檢索無結果",[739,1425,1426,1427,1430],{},"回傳 ",[95,1428,1429],{},"(No relevant segment excerpts found…)","，模型應聲明書中未提及",[718,1432,1433,1436],{},[739,1434,1435],{},"模型輸出了非法兩段位標記",[739,1437,1438],{},"前端過濾，不展示無效角標",[718,1440,1441,1444],{},[739,1442,1443],{},"用戶純閒聊",[739,1445,1446],{},"System Prompt 允許脫離書籍，用通用知識回答",[718,1448,1449,1452],{},[739,1450,1451],{},"導出對話",[739,1453,1454],{},"可將角標轉為閱讀器深連結，便於分享或歸檔",[10,1456,1457],{},[13,1458],{"alt":1459,"src":1460},"對話導出","https://cdn.linghuxiong.com/resources/snapshots/ai-chat-export.png",[24,1462],{},[27,1464,1466],{"id":1465},"九設計取捨為什麼不用向量-rag","九、設計取捨：為什麼不用「向量 RAG」？",[10,1468,1469,1470,1473],{},"做文件 QA 的同行常會問：既然要做檢索增強，為什麼不走 ",[113,1471,1472],{},"Embedding + 向量庫 Top-K"," 這條標準路線？",[10,1475,1476,1477,1480,1481,1484,1485,1488,1489,1492,1493,1496],{},"實際上 ",[113,1478,1479],{},"我們也在做 RAG","——每次回答前都會先查書、再生成。差別在於：社群語境裡的 RAG 往往預設包含 ",[113,1482,1483],{},"向量化與相似度檢索","；當前方案是 ",[113,1486,1487],{},"「片段索引 + Tool 按需拉原文」","（階段三），",[113,1490,1491],{},"刻意不引入向量層","。以下從 ",[113,1494,1495],{},"架構約束"," 說明取捨，並非否定向量 RAG 的價值。",[59,1498,1500],{"id":1499},"界定範圍不是不用檢索而是不用向量檢索","界定範圍：不是不用檢索，而是不用「向量檢索」",[34,1502,1503,1512],{},[37,1504,1505,1508,1509,663],{},[113,1506,1507],{},"廣義 RAG","：檢索相關材料 → 再生成 → ",[113,1510,1511],{},"我們在做",[37,1513,1514,1517,1518,663],{},[113,1515,1516],{},"向量 RAG","：召回依賴 Embedding 相似度 → ",[113,1519,1520],{},"當前版本不做",[10,1522,1523,1524,1527,1528,1531],{},"全書預處理為 ",[113,1525,1526],{},"片段摘要索引","；提問時模型透過 Tool 選段，再 ",[113,1529,1530],{},"回傳原文","。檢索增強存在，但不依賴單獨的 embedding 模型與向量索引維護。",[24,1533],{},[59,1535,1537],{"id":1536},"原因一支援自訂-llm-provider設定鏈路要盡量短","原因一：支援自訂 LLM Provider，設定鏈路要盡量短",[10,1539,1540,1541,1544,1545,1548],{},"產品允許用戶自由接入 ",[113,1542,1543],{},"自有 API Key","、自訂 Base URL，或使用 ",[113,1546,1547],{},"本機 Ollama","——對話模型由用戶自選，成本和數據路徑可控。這對許多自託管、多模型對比的場景是硬需求。",[10,1550,1551],{},"疊加典型向量 RAG 後，整合面會明顯變寬：",[34,1553,1554,1565,1568],{},[37,1555,1556,1557,1560,1561,1564],{},"除 ",[113,1558,1559],{},"Chat 模型"," 外，通常還需 ",[113,1562,1563],{},"Embedding 模型","（另一個 model name，有時還是另一個 endpoint）；",[37,1566,1567],{},"Ollama 等本機部署還要單獨拉 embedding 模型，並處理維度、介面相容；",[37,1569,1570,1571,1574],{},"故障域變複雜：Chat 正常但 ",[113,1572,1573],{},"檢索為空"," 時，可能是 embedding、索引或維度不一致，排查成本高於「單 Provider 全鏈路」。",[10,1576,1577,1578,1581,1582,1585],{},"當前方案裡，",[113,1579,1580],{},"選段與作答共用同一套 Provider 設定","，避免「Chat 用 A、建索引用 B」。若你在做 ",[113,1583,1584],{},"可插拔 LLM"," 的應用，這往往比多幾個點的召回率更重要。",[10,1587,1588],{},[13,1589],{"alt":1590,"src":1591},"自訂 AI 服務商","https://cdn.linghuxiong.com/resources/snapshots/ai-customize-providers.png",[24,1593],{},[59,1595,1597],{"id":1596},"原因二embedding-與索引強綁定切換-provider-成本高","原因二：Embedding 與索引強綁定，切換 Provider 成本高",[10,1599,1600,1601,1604,1605,1608,1609,1612,1613,1616],{},"向量 RAG 裡常被低估的一點：",[113,1602,1603],{},"向量不是通用中間格式，而是某個 embedding 模型下的座標。"," 建庫用模型 A、查詢用模型 B 時，相似度通常 ",[113,1606,1607],{},"不可比","——換模型往往意味著 ",[113,1610,1611],{},"全書重新向量化","，且不同模型的 ",[113,1614,1615],{},"向量維度","（768 / 1024 / 1536 …）會綁死儲存 schema。",[10,1618,1619,1620,1623,1624,1627],{},"階段三持久化的是 ",[113,1621,1622],{},"結構化摘要 + 字元 span","，不存向量；切換 Chat 模型時 ",[113,1625,1626],{},"無需重建索引","，證據鏈（原文位置）不變。這與「用戶隨時對比不同 LLM」的目標更一致。",[24,1629],{},[59,1631,1633],{"id":1632},"原因三有目錄的長文件結構化路由往往已夠用","原因三：有目錄的長文件，結構化路由往往已夠用",[10,1635,1636,1637,1640,1641,1644,1645,1648,1649,1655],{},"電子書、PDF 通常有 ",[113,1638,1639],{},"章節結構","；預處理已產出 ",[113,1642,1643],{},"段標題 + 摘要","。對「某一章講了什麼」「書中如何定義某概念」類問題，在摘要目錄上選段再 ",[113,1646,1647],{},"拉回原文","，實務中效果穩定；且 Tool 回傳的是 ",[113,1650,1651,1652,1654],{},"帶 ",[95,1653,1272],{}," 的原文","，零幻覺仍錨定在字元 span 上。",[10,1657,1658,1659,1662,1663,1666],{},"向量檢索在語意模糊、跨語言、長段落字面匹配等場景仍有優勢；在 ",[113,1660,1661],{},"有 TOC、可預處理、要強溯源"," 的閱讀器裡，優先把複雜度放在 ",[113,1664,1665],{},"Tool + 原文回傳 + 引用約束"," 上，ROI 通常更高。",[24,1668],{},[59,1670,1672],{"id":1671},"後續方向混合召回而非推倒重來","後續方向：混合召回，而非推倒重來",[10,1674,1675,1676,1679,1680,1683,1684,1687,1688,1691],{},"不排除將來增加 ",[113,1677,1678],{},"向量粗召回","（例如 embedding 只篩 Top-N 候選章節），最終仍走 ",[113,1681,1682],{},"選段 → 原文回傳 → 可點擊溯源","，零幻覺規則不變。若引入，會盡量滿足：Embedding ",[113,1685,1686],{},"可選","、換模型時 ",[113,1689,1690],{},"顯式提示重建索引","，避免 silent wrong retrieval。",[10,1693,1694,1695,663],{},"在此之前，優先保證：",[113,1696,1697],{},"任意 OpenAI 相容 Chat API 即可工作，換 Chat 模型不必重建本機索引",[24,1699],{},[27,1701,1703],{"id":1702},"十小結","十、小結",[712,1705,1706,1719],{},[715,1707,1708],{},[718,1709,1710,1713,1716],{},[721,1711,1712],{},"環節",[721,1714,1715],{},"手段",[721,1717,1718],{},"作用",[734,1720,1721,1732,1745,1758,1769,1780],{},[718,1722,1723,1726,1729],{},[739,1724,1725],{},"預處理",[739,1727,1728],{},"依目錄/長度切分 + 片段摘要快取",[739,1730,1731],{},"長書可檢索、可定位",[718,1733,1734,1737,1742],{},[739,1735,1736],{},"位置標記",[739,1738,1739,1741],{},[95,1740,587],{}," 寫入原文",[739,1743,1744],{},"出處可機器解析",[718,1746,1747,1750,1755],{},[739,1748,1749],{},"Tool 檢索",[739,1751,1752,1753],{},"依問題查片段/全書摘要，回傳 ",[113,1754,753],{},[739,1756,1757],{},"作答前強制取證",[718,1759,1760,1763,1766],{},[739,1761,1762],{},"System Prompt",[739,1764,1765],{},"書優先、禁止偽造角標、查不到要說",[739,1767,1768],{},"約束生成行為",[718,1770,1771,1774,1777],{},[739,1772,1773],{},"前端溯源",[739,1775,1776],{},"角標 → 預覽 → 跳轉高亮",[739,1778,1779],{},"用戶可核驗證據",[718,1781,1782,1785,1788],{},[739,1783,1784],{},"不用向量檢索",[739,1786,1787],{},"單 Provider、換 Chat 模型無需重建索引",[739,1789,1790],{},"降低整合與遷移成本",[10,1792,1793,1794,1797],{},"「零幻覺」不是指望模型從不犯錯，而是 ",[113,1795,1796],{},"用工程結構把輸出鎖在證據鏈上","：沒有檢索結果就不應冒充書中內容；有檢索結果則應給出可核驗的原文位置。",[10,1799,1800,1801,1804,1805,1808],{},"若你也在做 AI 閱讀或文件 QA，希望 ",[113,1802,1803],{},"全文直塞 → 關鍵句提取 → Tool-First 按需檢索"," 這條演進路徑，以及 ",[113,1806,1807],{},"內嵌位置標記 + 原文回傳"," 的做法，能作為可參考的一種實作。",[18,1810,1811],{},[10,1812,1813,1814,1819,1820,1824],{},"以上是我們在開發 ",[674,1815,1818],{"href":1816,"rel":1817},"https://reader.linghuxiong.com",[678],"令狐兄","（Foxycape）AI 閱讀器實踐心得，僅供參考。文末可前往 ",[674,1821,1823],{"href":1822},"/zh-hk#download","下載頁面"," 體驗閱讀器。",{"title":69,"searchDepth":230,"depth":230,"links":1826},[1827,1832,1833,1834,1835,1839,1846,1850,1851,1858],{"id":474,"depth":230,"text":475,"children":1828},[1829,1830,1831],{"id":490,"depth":236,"text":491},{"id":570,"depth":236,"text":571},{"id":666,"depth":236,"text":667},{"id":857,"depth":230,"text":858},{"id":918,"depth":230,"text":919},{"id":933,"depth":230,"text":934},{"id":1062,"depth":230,"text":1063,"children":1836},[1837,1838],{"id":1086,"depth":236,"text":1087},{"id":1112,"depth":236,"text":1113},{"id":1188,"depth":230,"text":1189,"children":1840},[1841,1843,1845],{"id":1206,"depth":236,"text":1842},"6.1 get_related_segment_summaries —— 針對具體問題查片段",{"id":1276,"depth":236,"text":1844},"6.2 get_full_book_segment_summaries —— 全書概覽類問題",{"id":1297,"depth":236,"text":1298},{"id":1329,"depth":230,"text":1330,"children":1847},[1848,1849],{"id":1339,"depth":236,"text":1340},{"id":1350,"depth":236,"text":1351},{"id":1389,"depth":230,"text":1390},{"id":1465,"depth":230,"text":1466,"children":1852},[1853,1854,1855,1856,1857],{"id":1499,"depth":236,"text":1500},{"id":1536,"depth":236,"text":1537},{"id":1596,"depth":236,"text":1597},{"id":1632,"depth":236,"text":1633},{"id":1671,"depth":236,"text":1672},{"id":1702,"depth":230,"text":1703},{},"/zh-hk/blog/zero-hallucination-qa",{"description":437},"zh-hk/blog/zero-hallucination-qa","6H7EH1nM6S2Wu-58l9NXgc86P-HMs8RfuXQoz6O63C8",1786513819749]