Day 25 把學習報告做出來之後,我回頭認真看了一次報告裡「實用片語」那一欄,心裡冒出一個疑問:這些片語是 AI 憑「印象」生出來的,我怎麼知道它推薦的說法真的是母語者常用的?LLM 本質是機率預測(Day 1 學的),它有時候會生出聽起來很合理、但其實不太道地的表達。
今天要認識的 RAG 和 FAISS,就是針對這個問題的一種解法:不要讓 AI 只靠記憶回答,而是讓它先去「查資料」,再根據查到的內容回答。
RAG 是什麼
RAG 全名是 Retrieval-Augmented Generation,中文常翻成「檢索增強生成」。名字很長,拆開來看其實很好懂:
Retrieval(檢索):先從一份資料庫裡,找出跟問題最相關的內容
Augmented(增強):把找到的內容,附加到給 AI 的指令裡
Generation(生成):AI 參考這些附加內容之後,再生成回答
用考試比喻最直覺:一般的 LLM 回答問題,像是「閉卷考試」,只能靠腦袋裡記得的東西;RAG 則像「開書考」,AI 在回答前先翻一下參考資料,再根據資料寫答案。
為什麼這個專題需要 RAG
對照專題的需求,今天整理出三個 RAG 能幫上忙的地方:
推薦更可靠:片語和表達是從一份經過整理的資料庫裡找的,不是 AI 憑空生成,降低「聽起來合理但不道地」的風險
內容可以自己控制:想讓 AI 推薦哪些類型的片語,只要調整資料庫內容就好,不用一直改 Prompt
可以針對情境推薦:資料庫裡可以標註每個片語適合用在什麼場合(點餐、面試、機場),AI 才能根據使用者練習的情境,找出真正相關的表達
這也呼應了專題最初定位的核心特色:「母語者自然表達」。RAG 剛好是把這個特色做得更穩的方法。
FAISS 又是什麼
RAG 的第一步是「檢索」,問題在於:電腦怎麼判斷哪些資料「跟問題最相關」?
傳統的關鍵字搜尋只能比對字面——使用者說「想要少糖」,資料庫裡寫的是「less sweet」,兩邊字面完全不同,就搜不到。今天理解到,RAG 解決這個問題的方式是:把文字轉換成一串數字(向量),意思相近的文字,轉出來的數字也會相近。 這樣就能比對「意思」而不是「字面」。
FAISS 是 Meta 開發的一個工具,專門用來存放這些向量,並且快速找出「跟某個向量最接近」的那幾筆。簡單說,它就是這個專題裡「向量資料庫」的角色,負責回答:「資料庫裡哪幾句片語,意思最接近使用者現在遇到的情境?」
整體流程,今天畫出來的版本
把今天學的概念兜成一條流程,大致是這樣:
準備階段(只需要做一次)
整理一份英文片語與情境資料
把每筆資料轉換成向量
存進 FAISS
每次使用時
拿到使用者的對話或情境
把它也轉換成向量
用 FAISS 找出最相近的幾筆片語
把找到的內容附進給 LLM 的 Prompt
LLM 根據這些資料,產出更有依據的推薦
對照 Day 25 的報告流程,RAG 其實是插在「歸納整理」那一步前面——在 AI 整理「實用片語」之前,先替它準備好一份參考資料。
今天的取捨:先搞懂概念,不急著追求完整
專題計畫書原本就寫了:「若時間充足,再加入 RAG / FAISS」。今天接觸之後也深刻體會到,這塊是整個專題裡概念最抽象的部分,如果一開始就想做到完美,很容易卡住。所以今天先定下一個原則:目標是做出「能運作的最小版本」,資料量小沒關係,只要能證明「檢索 → 附加 → 生成」這條流程跑得通。