RAG 檢力增強生成:讓 AI 讀你自己的文件
上一篇學會用 API 呼叫模型,但你會發現一個致命問題:AI 只知道它訓練時學到的知識,不知道你的私人文件、最新資料或公司內部資訊,有時還會「一本正經地胡說八道」(幻覺)。
RAG(Retrieval-Augmented Generation,檢力增強生成) 就是為了解決這個問題而生的技術,也是目前企業應用 AI 最主流的做法。
問題:為什麼模型會不知道你的資料?
有三種方式讓 AI 知道特定內容,各有限制:
| 方式 | 原理 | 缺點 |
|---|---|---|
| 直接貼給它 | 把文件塞進 prompt | 上下文窗口有限、太貴、太長讀不完 |
| 微調(Fine-tuning) | 重新訓練模型 | 成本高、更新慢、無法頻繁加新資料 |
| RAG | 回答時先去檢索相關文件再結合 | 需要架構支援,但最彈性 |
RAG 的思路很聰明:不改模型本身,而是在它回答前,先幫它查到相關資料塞進去。
RAG 怎麼運作?兩個階段
階段一:建立索引(離線處理)
當文件進系統時:
- 切分(Chunking):把長文件切成一小塊一小塊(例如每段 500 字)。
- 轉成向量(Embedding):用 Embedding 模型把文字轉成一串數字(向量)。意思相近的句子,向量在空間裡也接近。
- 存進向量資料庫:保存這些向量,方便日後比對相似度。
階段二:回答時檢索(線上處理)
當使用者提問時:
- 把問題也轉成向量。
- 在資料庫中找出與問題最相似的幾個文件區塊。
- 把這些區塊 + 問題一起送給 LLM。
- LLM 就「開著參考資料」作答,答案會附上來源。
比喻:RAG 就像讓員工回答前,先去公司資料庫翻相關檔案,而不是憑記憶瞎猜。
關鍵詞:Embedding 與向量資料庫
- Embedding(嵌入):把文字轉成能表達「語意」的數字向量。例如「今天很熱」和「天氣很炎熱」的向量會很接近。
- 向量資料庫:專門儲存並快速搜尋相似向量的資料庫,常見的有 Chroma、Pinecone、Qdrant、Weaviate,Python 的 FAISS 也常用。
- 相似度搜尋:找出與問題最相近的文件區塊,是 RAG 品質的關鍵。
最小實作流程(概念碼)
用 Python 大致長這樣(搭配 LangChain 這類框架會更簡單):
1 | from langchain.document_loaders import TextLoader |
為什麼企業都愛 RAG?
- 資料私有且即時:用你自己的文件,而且更新文件就好,不用重訓模型。
- 減少幻覺、可溯源:答案有根據,還能標註來源讓使用者查證。
- 成本低:只傳相關的幾區塊,省 token。
- 跨語言/多格式:PDF、Word、網頁都能處理。
要注意的風險
- 檢索失準就答錯:如果沒查到正確文件,答案還是會偏。這稱為「垃圾進、垃圾出」。
- RAG poisoning(投毒):惡意人在文件中放入誤導內容,可能操縱模型輸出。企業應用要留意資料來源可信度。
- 切分方式影響效果:區塊切太好太壞,直接決定搜尋品質,需要反覆調整。
小結
- RAG = 回答前先檢索相關文件,再結合給模型。
- 核心三步驟:切分 → Embedding → 向量資料庫。
- 優點是資料私有、即時、可溯源、成本低。
- 要注意檢索失準、投毒攻擊、切分品質。
RAG 是我們「用自己的資料」的關鍵技術。下一篇更簡單有趣:Function Calling——讓 AI 學會使用外部工具與 API。
《AI 新時代》系列第 06 篇。上一篇:OpenAI API 入門 · 下一篇預告:Function Calling