什麼是 RAG?檢索增強生成簡單解說
RAG(檢索增強生成)係一種令 AI 模型用你自己嘅資料回答問題嘅方法。當有人提出問題,你嘅應用程式會先喺你嘅文件入面搵出最相關嘅段落,然後連同問題一齊交俾模型。模型會根據呢啲文字寫答案,而唔係只靠佢喺訓練期間碰巧學到嘅嘢。
用 AI 建造嘢時,點解 RAG 重要
大型語言模型對世界一般嘅事有好多認識,但唔認識你嘅生意:你嘅價錢、政策、產品說明書、上星期嘅支援工單。佢仲有訓練截止日期,所以唔知道最近發生嘅事。如果你照樣問佢,佢可能會好有信心咁畀你一個錯誤但聽落好似啱嘅答案。
要解決呢個問題,你大致有三個選擇:
| 方法 | 做咩 | 適合 |
|---|---|---|
| 將所有嘢放入提示 | 每次提問都送出所有文件 | 文字量少,例如幾頁 |
| RAG | 搜尋你嘅文件,只送出相關部分 | 較大或者會變動嘅資料,例如幫助中心、說明書、筆記 |
| 微調(Fine-tuning) | 透過例子進一步訓練模型 | 語氣、格式同重複任務,而唔係會變動嘅事實 |
現代模型可以接受好長嘅提示,所以如果只係一份短嘅常見問題,第一個方法通常已經足夠。當你嘅文字多到唔想每次都全部送出,RAG 就有存在價值,因為你送出嘅每一個字都要錢同時間(參閱LLM API 點樣收費)。
如果你想建立「同我哋嘅文件傾偈」功能、支援助手或者內部知識工具,你幾乎肯定正在建造某種形式嘅 RAG。
日常生活比喻
想像一場開卷考試。一個要靠記憶作答嘅學生,可能會記錯或者亂作答;但一個可以先翻到正確頁數、讀完再作答嘅學生,就可靠得多,前提是佢搵到正確嘅頁。
- 學生就係語言模型。
- 課本就係你嘅文件。
- 翻到正確嘅頁就係檢索(retrieval)。
- 根據嗰幾頁寫答案就係生成(generation)。
RAG 就係開卷版本。同考試一樣,答案質素好大程度取決於有冇搵到正確嘅頁。
RAG 點樣運作,逐步睇
一個典型嘅 RAG 設定分為兩個階段。
預先準備文件(事先做好):
- 收集來源資料,例如幫助文章、PDF、政策、產品數據。
- 分段(Chunk):將長文件切成細件,通常每件數段落,咁搜尋時就可以只返回相關嘅部分。
- Embedding 每一段:將文字送去 embedding 模型,轉成 embedding,即一組捕捉其意思嘅數字。內容相近嘅文字,會得出相近嘅數字。
- 儲存:將各段同佢哋嘅 embedding 存入一個可以按相似度搜尋嘅資料庫(通常稱為向量資料庫或者向量索引)。
回答問題(每次都要做):
- 用同一個 embedding 模型,將問題 embedding。
- 檢索:搵出 embedding 最接近問題嘅段落,例如頭五段。
- 建立提示:包括指示、檢索到嘅段落同問題。
- 生成:語言模型根據嗰啲段落寫答案,最好同時註明用咗邊幾段。
令呢個方法成功嘅關鍵,係按意思搜尋:例如問「點樣追回我嘅錢」,即使兩者冇共同字詞,都可以搵到一段標題為「退款政策」嘅內容。
實例:健身室嘅幫助助手
假設一間健身室有 40 篇幫助文章,並想喺佢嘅網站上放一個聊天助手。會員問:「我去旅行嘅時候可唔可以暫停會籍?」
應用程式會將問題 embedding,然後檢索三段最接近嘅內容。其中一段寫住:
暫停會籍:月費計劃嘅會員每年可以暫停會籍最多 2 個月。
暫停開始前最少 7 日,可以喺櫃檯或者應用程式內提出申請。
之後送去模型嘅提示大致如下:
你係 Northside 健身室嘅幫助助手。
只根據以下來源作答。如果答案唔喺當中,
就講你唔知道,並建議聯絡櫃檯。
每次作答都要註明你用咗邊個來源。
[來源 1:暫停會籍] 月費計劃嘅會員可以暫停……
[來源 2:取消會籍] ……
[來源 3:嘉賓入場證] ……
問題:我去旅行嘅時候可唔可以暫停會籍?
然後模型答:「可以,月費計劃嘅會員每年最多可以暫停會籍兩個月。請喺暫停開始前最少 7 日到櫃檯或者喺應用程式提出申請(來源:暫停會籍)。」
健身室從來冇重新訓練任何嘢。當佢改動暫停政策,只需要更新文章,應用程式就會為嗰一段重新做 embedding,下一個答案就會反映新政策。
主要名詞
| 名詞 | 意思 |
|---|---|
| LLM | 大型語言模型,即負責寫答案嘅 AI。參閱什麼係 LLM。 |
| Embedding | 代表一段文字意思嘅一組數字。 |
| Embedding 模型 | 產生 embedding 嘅模型。通常同聊天模型分開,而且平得多。 |
| 段(Chunk) | 文件嘅一部分,大小適合獨立檢索。 |
| 向量資料庫/向量搜尋 | 搵出 embedding 相似嘅項目嘅儲存方式。一啲一般資料庫都有此功能,例如 Postgres 透過 pgvector 擴充功能提供。 |
| Top-k | 每次提問檢索幾多段。 |
| 混合搜尋(Hybrid search) | 將按意思搜尋同普通關鍵字搜尋結合,對產品編號等精確字詞特別有用。 |
| 上下文窗口(Context window) | 模型一次請求可以處理嘅文字上限。 |
| 事實依據/引用(Grounding/Citations) | 將答案連結到特定嘅檢索來源,並顯示出嚟。 |
常見誤解
- 「RAG 會用我嘅資料訓練模型。」 唔會。模型本身完全冇改變,佢只係喺提問時讀取額外嘅文字。
- 「RAG 代表冇幻覺。」 只代表少啲幻覺。如果檢索漏咗正確嘅段落,或者答案根本唔喺你嘅文件入面,模型仍然可能亂猜。要指示佢講「我唔知道」,並用你已知答案嘅問題去測試。
- 「我需要一個特別嘅向量資料庫。」 通常唔需要。如果資料量唔大,你現有資料庫嘅向量擴充功能,甚至普通嘅關鍵字搜尋,已經可以足夠。
- 「段越大越好。」 太大會送出大量無關文字(費用更高、更混亂);太細則會令一段失去令它有意義嘅上下文。要不斷調整。
- 「將所有嘢都上載就得。」 過時、重複或者互相矛盾嘅文件,會產生互相矛盾嘅答案。清理來源資料,往往係你可以做嘅最大改善。
- 「任何人都可以睇到任何文件。」 只有你咁樣建造先會發生。如果某啲文件只屬於特定用戶,搜尋本身就必須按提問者嘅身份篩選,否則助手可能會將一位客戶嘅資料引述俾另一位客戶。
成本
RAG 功能通常有三項持續成本:為你嘅文件做 embedding(數量少,而且大多只需做一次)、為每個問題做 embedding(極少)、以及語言模型嘅調用(主要成本,會隨送出嘅段數增加)。另外仲有資料庫嘅儲存費用。你嘅 AI 供應商會將呢啲費用記入你自己嘅帳戶,所以請喺供應商嗰度設定消費上限。
要問你嘅 AI 建構器嘅嘢
- 「建造 RAG 之前,先檢查:我哋嘅內容夠細,可以直接放入提示嗎?」
- 「將幫助文章切成每段數段嘅長度,保留每段嘅標題同來源連結,並將 embedding 儲存喺我哋嘅資料庫。」
- 「用混合搜尋,即按意思加關鍵字,咁產品編號都搵得到。」
- 「指示模型只根據檢索到嘅來源作答,唔知道就講唔知道,並喺每個答案下面顯示來源。」
- 「只搜尋已登入用戶可以睇嘅文件。」
- 「文件一經編輯,就自動重新做 embedding。」
- 「將 AI 供應商嘅金鑰放喺伺服器嘅機密設定入面,唔好放喺瀏覽器。」
- 「記錄每個問題、檢索到嘅段落同答案,等我可以檢閱差劣嘅回答。」
Mythex 中嘅 RAG
Mythex 冇提供現成嘅知識庫或者 RAG 產品。佢做嘅係喺你嘅應用程式入面幫你寫一個:你提供文件同你自己嘅 AI 供應商金鑰(儲存為專案機密),然後代理會建構檢索同聊天部分,並使用專案嘅 Postgres 資料庫儲存資料。供應商用量會記入你嘅供應商帳戶,而唔係 Mythex 額度。文件建議先從一個簡單嘅 AI 功能開始,待佢運作正常之後再加入 RAG,詳情可以睇建構 AI 應用程式,亦可以參閱我哋嘅指南建立 AI 聊天機械人應用程式同為應用程式加入 AI 功能。
常見問題
簡單嚟講,什麼係 RAG?
RAG(檢索增強生成,retrieval-augmented generation)係一種令 AI 模型根據你自己資料作答嘅方法。模型回覆之前,你嘅應用程式會喺文件入面搵出最相關嘅段落,並將佢哋放入提示之中,所以答案係根據嗰啲文字,而唔係淨係靠模型喺訓練期間學過嘅嘢。
RAG 會唔會用我嘅資料去訓練 AI?
唔會。RAG 完全唔改變模型。佢只係喺問題被提出嗰一刻搵出相關文字,再連同問題一齊交俾模型。你更新咗一份文件,下一個答案就可以即時用到新版本。
RAG 同微調(fine-tuning)係咪一樣?
唔係。微調係透過更多例子去進一步訓練模型,改變佢嘅行為;速度較慢,較適合風格或格式方面嘅調整。RAG 則係喺問答時俾模型一啲事實去閱讀,較適合會變動嘅知識,或者需要準確引述嘅內容。
RAG 可以阻止 AI 幻覺(hallucination)嗎?
可以減少,但唔能夠完全消除。如果搜尋搵到錯誤嘅段落,或者答案根本唔喺你嘅文件入面,模型仍然可能亂猜。效果好嘅 RAG 應用程式會指示模型講出佢唔知道嘅嘢,並顯示佢所用嘅來源。