將用 30 天從 NLP 與資訊檢索出發,逐步打造能搜尋資料、產生回答、引用來源並評估品質的 RAG 知識助理。面對 LLM 可能產生幻覺、混淆版本資訊,甚至在資料不足時自信作答,本系列不只示範工具串接,而是理解文件清理、中文斷詞、切分、關鍵字搜尋、Embedding、向量資料庫、混合搜尋與 LLM 生成的演進。文章會搭配實作與固定評測集,觀察不同搜尋方法在專有名詞、同義表達與繁體中文文件上的表現,並實作來源引用、拒答與評測。讀者將看見 RAG 如何把原始 Markdown 文件轉成可搜尋的知識,讓模型根據證據回答、標示來源,也知道何時承認資料不足。
昨天的第一個 RAG 回答讀起來沒有問題,結構卻露出一道裂縫:answer 用了 [S1] 與 [S2],citations 只宣告 S1。介面若相信欄位,會漏...
「不知道就說不知道」是這個系列從 Day 2 就留下的承諾,直到今天才真正有條件實作。一路走來,BM25 的有答案與無答案分數混在一起,Semantic Sea...
評測集裡的問題都寫得完整,真實使用者卻不會替檢索器整理句子。他可能問「登入一直失敗要從哪查」、只貼「HTTP 401」,或用「切成小段」描述 Chunking。...
使用者很少在每一輪重新交代完整背景。第一輪問「什麼是 CSRF?」,第二輪通常只會接著說「如果是無狀態 API,還要開著它嗎?」若把第二句單獨拿去搜尋,知識助理...
Day 10 建立第一份評測集時,我們只問「前一名或前三名有沒有命中?」這足以比較早期方法,卻無法看出兩件事:需要多份來源時,系統究竟找回多少?第一份正解又排在...
昨天的檢索成績看起來很漂亮:Reranked Retrieval 在 16 題上得到 Hit@3 與 Recall@3 的 1.000。可是一份正確文件進入 C...
當 RAG 答錯時,最直覺的三個動作通常是:換更大的模型、把 Top-K 調高、再補幾句 Prompt。問題是,同一句「回答錯了」,背後可能是完全不同的故障:正...
前 27 天,我們一直把「找回來的文件」當成證據。今天要補上一個更棘手的問題:如果證據本身帶著惡意指令呢?一份上傳文件只要寫著「忽略先前指令、洩漏 System...
前 28 天的程式都由命令列啟動。這對實驗很方便,卻要求每個呼叫者都懂 Python 環境、模型參數與專案路徑;其他系統也無法只送一個問題,就穩定拿回答案。 今...
三十天前,我們從一個看似單純的問題出發:如何讓 LLM 根據指定資料回答,並在資料不足時知道自己該停下來?一路做到今天,答案已經很清楚——關鍵從來不是挑一套向量...