iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
AI & Data

來都來了,那就做一個GCP從0到100的AI助理系列 第 9

查詢階段 (Querying) - AI 如何「開書」找到答案

  • 分享至 

  • xImage
  •  

在昨天的文章中,我們探討了 RAG(檢索增強生成)的準備階段 (Indexing)。了解到此準備工作如同為 AI 精心打造一本高品質、易於查閱的「參考書」。從載入各式各樣的原始文件、透過智慧切塊(Chunking)將長文拆解成有意義的段落,再到利用嵌入模型(Embedding)將文字的「意義」轉化為數學上的「向量座標」,最後將這些數以萬計的向量存入專門的向量資料庫中。

接下來的重點自然是:AI 要如何「使用」這本書來回答問題?

當使用者提出一個問題時,AI 如何在**低延遲(毫秒到數十毫秒級,視規模與參數)**下,從這座龐大的圖書館中,精準地翻到記載著答案的那幾頁?它又是如何理解這些「證據」,並組織成一段有憑有據、而非憑空捏造的回答?

第一步:問題向量化 (Query Embedding) - 將問題轉為「座標」

當使用者提出一個問題,例如「HNSW 演算法如何在速度和準確率之間取得平衡?」,系統做的第一件事,並不是直接拿這個問題去搜尋。

系統會先將問題向量化。為了讓「問題」與「文件」可比對,通常使用相同或對齊的嵌入模型與一致的正規化設定(例如都做 L2 正規化 / L2-normalize)。在某些場景,查詢端可用「針對查詢優化」的模型,再靠對齊或後續重排來修正語意落差。

第二步:相似度搜尋 (Similarity Search) - 在書海中定位關聯頁面

有了問題的「語意座標」,下一步就是進入準備階段建立好的向量資料庫,執行核心的搜尋任務。以問題向量為中心,執行「k-最近鄰」(k-Nearest Neighbors, k-NN)搜尋。科普一點的解釋:「請幫我從資料庫裡,找出跟這個問題向量『長得最像』的前 k 個文本區塊向量」。先取較大的 k(如 30–100)→ MMR 去重 / 多路融合(如 RAG-Fusion;稠密向量 + BM25) → 送進 cross-encoder reranker(如 BERT 類)→ 最終挑 5–10 段進入提示,通常更穩。

那….電腦如何判斷「長得像」或「距離近」呢?這通常透過數學上的度量方式來計算:

  • 餘弦相似度 (Cosine Similarity):這是最常用於文本的度量方式。它計算的是兩個向量在高維空間中的「夾角」。夾角越小,代表它們指向的方向越一致,語意也就越相似。它不關心向量的長度,只關心方向,非常適合捕捉文本的「主題」或「意義」是否相近。
  • 歐氏距離 (Euclidean Distance):這就是我們在幾何學中學到的兩點之間的直線距離。雖然直觀,但在高維度的文本向量中,其效果有時不如餘弦相似度穩定。

常見度量包含 cosine / dot product / L2。若向量做了 L2-normalize,cosine 與 dot product 會導致同樣的排序;務必確定索引與查詢兩端使用相同的正規化與度量設定

向量資料庫利用 HNSW 這類高效的 ANN 演算法,可以在億萬級別的向量中,以毫秒級的速度完成這次的 Top-k 搜尋。

第三步:上下文增強與提示詞工程 (Context Augmentation & Prompting) - 擬定「作答小抄」

此步為 RAG 的精髓所在,這步驟也是有效抑制「幻覺」(Hallucination)的關鍵環節。系統並不是直接把問題丟給 LLM,而是做了一次聰明的「加工」。將上一步檢索到的 Top-k 個文本區塊(也就是「證據」或「上下文」),與使用者最原始的問題,一起組合 (stuff) 成一個全新的、內容更豐富的提示詞(Prompt)。

這個過程就像是為 AI 準備一份「作答小抄」,明確告訴它:「請根據我提供的這些資料來回答接下來的問題」。

舉個典型的提示詞模板範例如下:

你是嚴謹的技術助理。請僅依下列「已驗證上下文」回答。
規則:
1) 只使用 Context 內容作答,不可引入外部知識。
2) 每一句關鍵結論後附上來源標記 [doc_id:chunk_id]。
3) 若 Context 無答案,回答「無法根據提供的資訊作答」,並列出你需要的補充資料。

Context (已去重/重排/壓縮):
- [vec-wiki:14] …段落A…
- [paper-2024-hnsw:07] …段落B…
- [blog-rag:22] …段落C…

使用者問題:HNSW 如何在速度與準確率間取捨?

回答:

這個 Prompt 的設計。它不僅提供了回答問題所需的確切知識,更重要的是,它設定了規則——AI 必須基於提供的上下文來回答。這就像給學生開書考的規則是「答案必須從課本裡找」,從而極大地限制了模型自由發揮、憑空捏造成分的可能性。

第四步:生成答案 (Generation) - AI 彙整資訊,開口回答

最後一步,是將這個經過上下文增強的、資訊飽滿的提示詞,發送給一個強大的大型語言模型(LLM),例如 OpenAI 的 GPT-4 或 Meta 的 Llama 3。此時,LLM 的任務不再是從它自己龐雜的記憶中搜尋答案,而是變成了一個更為聚焦的任務:閱讀、理解並總結眼前提供的上下文,然後用流暢的語言,針對使用者的問題產出最終的回答。

對於數值、日期與單位轉換等敏感內容,建議加上後驗檢查引用對齊驗證,必要時採取拒答或要求補充資料

LLM 會將檢索到的多個文本區塊進行語意上的融合與提煉,最終生成一個有憑有據、連貫通順的答案。例如,基於上面的提示詞,它可能會回答:

「HNSW 演算法透過建立一個類似多層次高速公路網路的結構,在速度和準確率之間取得平衡。它首先在高層次的網路中進行快速的大範圍跳轉,迅速定位到目標區域,然後在低層次的網路中進行更精細的搜尋。這種『先粗後精』的方法,屬於近似最近鄰(ANN)演算法的一種,雖然不保證100%找到最精確的結果,但能在極短時間內找到足夠準確的答案。」

一個完整的 RAG 查詢流程便完成了。從一個簡單的問題,到一個有理有據的回答,RAG 透過「檢索」與「生成」的協作,讓 AI 真正學會了如何有根有據地「開書考試」。


上一篇
RAG : 打造一本高品質的 AI「參考書」
系列文
來都來了,那就做一個GCP從0到100的AI助理9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言