小安忘記密碼的
那個早上
一位新人、一間資料室、兩位找資料方法完全不同的同事,還有一位很會審稿的林姐。跟著他們走一趟,你會知道 AI 助理開口回答之前,背後到底發生了什麼事。
出場人物
- 安小安到職第三天的新人,提問的人。
- 意阿意靠「意思」找資料,不怕你換句話說。
- 字阿字靠「字詞」找資料,型號代碼難不倒他。
- 林林姐逐張細讀再打分,很準,但是慢。
- 寫寫手AI 助理本人,只看桌上的資料寫回答。
AI 助理其實沒讀過你們公司的規定
先弄清楚:為什麼回答之前要「找資料」
星期一早上九點,到職第三天的小安坐在電腦前,發現自己想不起 ERP 的密碼。ERP 是公司用來管訂單、庫存和請款的系統,每天都得登入。她不好意思再去問隔壁同事,於是打開公司的 AI 助理,輸入:「我忘記 ERP 密碼了,要找誰重設?」
這個問題對 AI 助理來說有點尷尬。它背後的大型語言模型(LLM)可以想成一位讀過大量公開文章、文筆很好的寫手,但他從來沒看過你們公司的內部規定。硬要他回答,他只能照「一般公司大概都這樣做」來猜。
兩種回答方式,各按一次看看
所以實務上的做法是:先到公司的資料室把相關文件找出來,放在寫手的桌上,請他「看著這幾份資料回答」。這整套做法叫做 RAG(Retrieval-Augmented Generation,檢索增強生成),白話就是「先查資料,再寫回答」。
聽起來不難,麻煩藏在一個小細節裡:寫手的桌子不大。一次塞太多資料給他,費用和等待時間都會增加,而且不相干的內容混進來,他反而容易被帶偏。所以在這個故事裡,我們規定桌上只放得下 2 張資料。找對這 2 張,他就答得好;找錯了,他會照著錯的資料認真寫。
資料室的文件事先都被剪成一小段一小段的資料卡(技術上叫 chunk,片段),每張有自己的編號。下面是 8 張和密碼有關的卡片。在請出專業的同事之前,先請你自己當一次找資料的人。
讀一讀,挑出最能回答小安的 2 張,放到桌上
點卡片選取,再點一次取消。
只放得下 2 張
你剛剛做了一件很重要的事:你把 8 張卡片全部讀過,而且是帶著小安的問題去讀的,所以你看得出 F 講的是電子郵件、G 是給還記得舊密碼的人用的。請記住這個感覺,故事後半段會再回來。
問題在於,真正的資料室不是 8 張卡,而是好幾萬張。每來一個問題就全部細讀一遍,小安等到下班都等不到回答。我們需要的是能「很快抓出一小疊可能相關的卡片」的人。資料室剛好有兩位這樣的同事,只是兩個人找資料的方法完全不同。
兩位找資料的同事,各有各的本事
一個看意思,一個看字;兩個都會漏
意阿意:靠「意思」找資料
阿意的習慣是事先整理。每進來一張新卡片,她就讀一遍,然後把它釘到牆上的一張大地圖上:講的事情相近的卡片釘在附近,不相干的釘得遠遠的。「登入失敗」和「帳號鎖定」會靠在一起,「VPN 密碼」則在另一個角落。
問題來的時候,她把問題也當成一張卡片,找到它在地圖上該放的位置,然後以那一點為中心畫一個圈,把最靠近的幾張拿下來。她不需要重讀任何卡片,所以非常快。
阿意的地圖:黑點是小安的問題
她的盲點也看得出來。F 卡講的是電子郵件密碼,但「忘記密碼、想辦法重設」這個意思跟問題實在太像,被排到第 2 名。真正需要的 E 卡(辦理前要先驗證身分)主題稍微遠了一點,排第 6,剛好沒被拿到。對阿意來說,「主題很像」和「剛好回答這一題」在地圖上不太分得出來。
另一個常見的盲點是型號和代碼。NX-24P 和 NX-48P 在意思上都是「某一台交換器」,在地圖上幾乎疊在一起;可是對查規格的人來說,差一個字就是另一台機器。(最後的實驗室有一題型號題可以試。)
回到電腦裡
阿意就是向量搜尋(vector search,也叫語意搜尋)。她的地圖座標叫做 embedding(嵌入向量):由一個模型把一段文字轉成一長串數字,意思相近的文字,數字也會相近。真實的座標通常有幾百到上千個數字,這裡畫成平面只是方便看。
卡片旁的 0.86 是「相似度」的示意分數,代表意思有多接近,不代表「有 86% 的機率是答案」。她之所以快,是因為所有卡片的座標在資料進來時就算好了,提問時只需要算問題自己的座標。
字阿字:靠「字詞」找資料
阿字不看意思,他看字。他事先做了一本很厚的索引簿,就像書本最後面的索引頁:每個詞底下列著「哪幾張卡片出現過這個詞、出現幾次」。問題一來,他把問題拆成幾個詞,翻索引把卡片找出來,再幫每張卡算分數。
他算分數有三條很合常理的規則。第一,稀有的詞比較值錢:每張卡都有的詞沒有鑑別力,只有少數卡片才有的詞,命中了才有意義。第二,同一個詞出現越多次分數越高,但加分會越來越少,出現 3 次不會是 1 次的 3 倍,免得有人靠重複灌分。第三,卡片越長越吃虧一點,因為長文本來就容易碰巧出現各種詞。
阿字把問題拆成 5 個詞。點一個詞,看索引簿怎麼記
阿字的本事是精準:問題裡有明確的詞,他就抓得又快又準,型號、代碼、人名、法條編號都是他的強項。他的盲點則是只認字:同一件事換個說法,他就找不到;而字面上全中的 F 卡,雖然講的是電子郵件,卻被他排到第 1 名。
回到電腦裡
阿字就是關鍵字搜尋,最常用的計分方法叫 BM25,剛才那三條規則就是它的核心想法。他的索引簿叫做倒排索引(inverted index):一般目錄是「這張卡有哪些詞」,它反過來記「這個詞在哪些卡」,所以查起來很快。
這一頁的 BM25 分數是瀏覽器用真正的公式即時算出來的,只是把中文斷詞簡化成「直接比對這 5 個詞」。真實系統會先用斷詞工具把句子切開,切法不同,結果也會不同。
兩個人一起派出去:混合檢索
到這裡你應該發現了:回答小安需要 D 和 E 兩張卡,阿意只找到 D,阿字只找到 E。一個人漏掉的,另一個人剛好有。既然如此,乾脆兩個人都派出去,把兩疊卡片收在一起。這個做法叫混合檢索(hybrid search)。
兩疊卡片收進同一個籃子
收的時候有兩個細節。第一,規則是「任何一個人找到就收」,數學上叫聯集;不是「兩個人都找到才收」的交集。如果只收兩人都找到的,剩下的是 C、F、G,D 和 E 反而都被丟掉。第二,判斷是不是同一張卡,看的是卡片編號,不是文件名稱,因為同一份文件會被剪成好幾張卡,名稱一樣但內容不同。
混合檢索解決的是「找不找得到」的問題。可是故事還沒結束。
找到了,卻不知道該選哪兩張
籃子裡有 7 張,桌子只放得下 2 張
新的麻煩來了。而且有個讓人不安的現象:阿意和阿字「都有找到」的 C、F、G,照理說有兩個人背書,應該最可靠,偏偏都不是答案。到底該讓誰上桌?資料室試過三種辦法,請你一個一個按按看。
辦法一:直接比分數
最直覺的想法:兩個人都有給分數,把分數放在一起,高的上桌。一張卡如果兩個人都給了分,就取比較高的那個。
7 張候選,依「原始分數」排序
問題出在兩個人用的是兩把不同的尺。阿意的相似度最高就是 1;阿字的分數沒有上限,命中的詞越多越稀有,分數就越高。直接比大小,就像拿公分和公斤比,結果幾乎永遠是阿字那一邊贏,阿意找到的 D 連比的機會都沒有。
辦法二:不比分數,比名次
既然分數不能比,那就只看名次。每張卡在每份名單上,第 1 名得 1/(60+1) 分,第 2 名得 1/(60+2) 分,名次越後面得分越少;沒上榜就是 0 分。把兩份名單的得分加起來,重新排一次。這個方法叫 RRF(Reciprocal Rank Fusion,倒數排名融合)。
分母裡的 60 是一個緩衝用的常數,作用是讓第 1 名和第 2 名的差距不要太懸殊,60 是常見的預設值。RRF 公平、好算,完全不必管兩把尺的差異,所以很多系統用它來合併名單。
7 張候選,依「名次積分」排序
名次比得很公平,結果卻還是 C 和 F。原因不在公式,而在於到目前為止,沒有任何人真的帶著問題把卡片讀過一遍。阿意看的是大概的意思,阿字看的是字,RRF 只看名次,連卡片內容都不碰。兩個人都被 F 騙了,合併之後 F 只會排得更前面。
林辦法三:請林姐把每張卡真的讀一遍
資料室還有一位資深的林姐。她的工作方式和前兩位不同:她把小安的問題和一張卡片擺在一起,逐字對照著讀,然後用紅筆打一個分數,代表「這張卡有多能回答這個問題」。籃子裡有 7 張,她就讀 7 次。阿意和阿字原本給的分數,她完全不參考。
林姐的閱讀桌
D 和 E 終於上桌了,而 F 被她一眼看穿:「這張講的是電子郵件。」還記得第一章嗎?你自己挑卡片的時候,做的就是同一件事:帶著問題,把每一張讀過,再判斷它有沒有回答到。林姐就是那個步驟的專業版。
那麼,既然林姐最準,為什麼不一開始就請她把整間資料室讀完?因為她慢,而且沒辦法事先準備。阿意的座標、阿字的索引都可以在資料進來時先做好;林姐的分數卻取決於「這個問題」配上「這張卡」,問題還沒來,她什麼都算不了。
拉拉看:交給林姐的卡片越多,小安要等多久
假設林姐讀一張要 0.05 秒。這是方便心算的示意數字,實際速度依模型和硬體而定。
所以分工變成兩段:快的人先粗篩出一小疊,慢而準的人再從這一小疊裡精挑。這也帶來一條很重要的限制:林姐只能重排交到她手上的卡片。如果 D 一開始沒被任何人找到,她再厲害也變不出來。這就是為什麼前面要同時派出阿意和阿字。
辦法二的 RRF 也沒有白學。當兩位同事各拿回 50 張、合起來將近 100 張的時候,可以先用 RRF 依名次留下前 20 張,再交給林姐,省下她的時間。代價是 RRF 如果砍得太兇,答案可能在輪到林姐之前就被淘汰了,這一點可以到實驗室親手試。
回到電腦裡
林姐就是 reranker(重新排序模型),最常見的一種叫 Cross-Encoder(交叉編碼器)。「交叉」的意思是:問題和卡片的文字一起送進同一個模型,模型可以逐字對照兩邊,所以注意得到「問的是 ERP、這張講的是電子郵件」這種細節。阿意那種做法則是問題和卡片分開各自轉成座標再量距離,快,但看不到這麼細。
畫面上林姐一次讀一張,是為了看清楚。實際上系統會把多組「問題+卡片」一起批次計算,但每一組仍然各自得到一個分數,不是把所有卡片黏成一篇長文來打總分。
桌上放對了兩張卡
最後一步,才輪到寫手動筆
現在寫手的桌上有三樣東西:小安原本的問題、D 卡的全文、E 卡的全文,兩張卡都帶著編號。他的工作是看著這些資料,寫出一段人看得懂的回答,並且標明每句話是根據哪一張卡。
寫手的桌子
點回答裡的綠色編號,可以看到那句話是根據哪一張卡寫的。回答是寫手寫的,不是林姐寫的;林姐只負責挑卡片。
小安打電話給資訊服務台,報上帳號和員工編號,五分鐘後就登入了。而你已經看完 AI 助理背後的整條流程。把它攤開來看是這樣:
| 故事裡的 | 真正的名稱 | 它看的是什麼 | 它負責解決什麼 |
|---|---|---|---|
| 資料卡 | chunk(片段) | 把長文件剪成可以單獨被找到的小段 | |
| 阿意和她的地圖 | 向量搜尋、embedding | 意思接不接近 | 換句話說也找得到 |
| 阿字和他的索引簿 | BM25、倒排索引 | 字詞有沒有出現、稀不稀有 | 型號、代碼、專有名詞要精準 |
| 兩疊收進同一個籃子 | 混合檢索(聯集+去重) | 卡片編號 | 不讓任何一邊找到的好資料漏掉 |
| 名次積分 | RRF | 各份名單上的名次 | 公平合併兩份名單,必要時先縮小名單 |
| 林姐 | reranker(Cross-Encoder) | 問題和卡片全文,放在一起讀 | 把真正回答問題的卡片排到最前面 |
| 桌子只放 2 張 | 送進 LLM 的片段數量上限 | 控制費用、等待時間和雜訊 | |
| 寫手 | LLM(大型語言模型) | 問題+上桌的卡片 | 寫出回答並標明出處 |
故事沒有說完的部分
林姐給的高分,意思是「這張卡和問題很相關」,不是「這張卡的內容一定正確」。一份已經過期的舊規定,照樣可能拿到高分。0.96 也不是「96% 的機率正確」,不同的 reranker 模型,分數的刻度各不相同,不能跨模型比較。
多請一位林姐,就多一段等待時間和運算費用。資料量不大、問題單純的時候,只用混合檢索加 RRF 也可能已經夠用;到底需不需要 reranker,得拿自己的資料實際測過才知道,沒有標準答案。
真實的系統還有幾件這個故事沒演到的事:文件有新舊版本、不同的人有不同的閱讀權限、找不到答案時要老實說找不到。另外,這條流程也不是唯一的做法,有的系統用加權分數合併兩路結果,有的用別種方式重排。
換你當資料室主管
改一個設定,看答案在哪一關消失
| 卡片 | 阿意名次 | 阿字名次 | RRF 積分 | 林姐分數 | 最後去向 |
|---|
阿字的名次、合併、去重、RRF 積分和名單截取,都是瀏覽器即時計算的。阿意的相似度和林姐的分數是預先設定的示意值,不代表任何實際模型的表現。
四個問題,確認真的看懂
選了之後會告訴你原因
本頁所有文件、公司流程與 NX 系列產品皆為虛構的教學素材。寫手的回答是依上桌卡片組合的示範腳本,頁面不會連線呼叫任何模型,也不會上傳資料。
📝 iPAS 考點提醒
這頁對應的是「RAG 檢索增強生成」裡檢索品質這一段。要記的因果鏈:文件先切成 chunk → 向量搜尋(embedding,看意思,換句話說也找得到,但型號代碼容易混)與 關鍵字搜尋 BM25(倒排索引,看字詞,精準但只認字)各找一疊 → 混合檢索用聯集收進同一個籃子,依片段編號去重 → RRF 只比名次不比分數,公平合併兩份名單 → Reranker(Cross-Encoder)把問題和片段放在一起細讀、重新打分 → 只把最前面幾張交給 LLM 寫回答。易混點有三個:第一,向量相似度和 BM25 是兩把不同的尺,分數不能直接比大小,這正是 RRF 改比名次的原因;第二,reranker 只能重排「已經被找回來」的片段,第一階段沒找到的,它變不出來,所以找得到靠混合檢索、排得對才靠 reranker;第三,reranker 的高分代表「和問題很相關」,不代表內容正確或還沒過期,也不是機率。
想練情境題與詳解 → AI 學習與考證地圖
❓ 常見問題
混合檢索(hybrid search)是什麼?為什麼不只用向量搜尋?
混合檢索是同一個問題同時交給向量搜尋和關鍵字搜尋,再把兩邊找到的片段收在一起。向量搜尋看的是意思,換句話說也找得到,但「主題很像」和「剛好回答這一題」它不太分得出來,型號、代碼這類差一個字就不同的東西也容易混在一起;關鍵字搜尋(BM25)看的是字,型號代碼抓得準,可是同一件事換個說法就找不到。兩種方法漏掉的東西不一樣,一起用才不容易漏。合併時收的是聯集,也就是任何一邊找到就收,並且用片段編號去掉重複;如果改成兩邊都找到才收,真正需要的片段反而可能被丟掉。
RRF 是什麼?為什麼不直接比兩邊的分數?
因為兩邊用的是不同的尺。向量相似度最高就是 1,BM25 的分數沒有上限,直接比大小幾乎永遠是 BM25 那一邊贏。RRF(Reciprocal Rank Fusion,倒數排名融合)改成只看名次:一個片段在某份名單排第幾名,就得 1/(60+名次) 分,沒上榜是 0 分,把各份名單的得分加起來重新排序。60 是常見的緩衝常數,用來讓第 1 名和第 2 名的差距不要太懸殊,不是「取前 60 筆」的意思。
Reranker(Cross-Encoder)和向量搜尋差在哪?
向量搜尋是把問題和片段分開、各自轉成一串數字再量距離,片段的數字可以在資料進來時先算好,所以很快,但看不到細節。Cross-Encoder 這種 reranker 則是把問題和片段的文字一起送進同一個模型,逐字對照著讀,所以注意得到「問的是 ERP、這一段講的卻是電子郵件」這種差別。代價是每一組「問題+片段」都要實際算一次,比較慢,也比較花運算資源。
既然 reranker 最準,為什麼不一開始就讓它讀完所有資料?
因為它的分數取決於「這個問題」配上「這個片段」,問題還沒來之前什麼都不能預先算;資料有幾萬段,每來一個問題就要算幾萬次,使用者等不到回答。所以實務上分成兩段:先用快的方法粗篩出一小疊,再讓慢而準的 reranker 從這一小疊裡精挑。這也帶來一個限制——reranker 只能重排交到它手上的片段,第一階段沒找到的,它再準也變不出來。
reranker 給 0.96 分,代表答案有 96% 的機率正確嗎?
不是。高分的意思是「這個片段和問題很相關」,不是「內容一定正確」,一份已經過期的舊規定照樣可能拿高分。不同的 reranker 模型,分數的刻度也不一樣,不能跨模型比較。另外,多一道 reranker 就多一段等待時間和運算費用;資料量不大、問題單純時,只用混合檢索加 RRF 也可能就夠用,需不需要加,要拿自己的資料實際測過才知道。