RAG 檢力增強生成:讓 AI 讀你自己的文件

上一篇學會用 API 呼叫模型,但你會發現一個致命問題:AI 只知道它訓練時學到的知識,不知道你的私人文件、最新資料或公司內部資訊,有時還會「一本正經地胡說八道」(幻覺)。

RAG(Retrieval-Augmented Generation,檢力增強生成) 就是為了解決這個問題而生的技術,也是目前企業應用 AI 最主流的做法。

問題:為什麼模型會不知道你的資料?

有三種方式讓 AI 知道特定內容,各有限制:

方式 原理 缺點
直接貼給它 把文件塞進 prompt 上下文窗口有限、太貴、太長讀不完
微調(Fine-tuning) 重新訓練模型 成本高、更新慢、無法頻繁加新資料
RAG 回答時先去檢索相關文件再結合 需要架構支援,但最彈性

RAG 的思路很聰明:不改模型本身,而是在它回答前,先幫它查到相關資料塞進去。

RAG 怎麼運作?兩個階段

階段一:建立索引(離線處理)

當文件進系統時:

  1. 切分(Chunking):把長文件切成一小塊一小塊(例如每段 500 字)。
  2. 轉成向量(Embedding):用 Embedding 模型把文字轉成一串數字(向量)。意思相近的句子,向量在空間裡也接近。
  3. 存進向量資料庫:保存這些向量,方便日後比對相似度。

階段二:回答時檢索(線上處理)

當使用者提問時:

  1. 把問題也轉成向量。
  2. 在資料庫中找出與問題最相似的幾個文件區塊。
  3. 把這些區塊 + 問題一起送給 LLM。
  4. LLM 就「開著參考資料」作答,答案會附上來源。

比喻:RAG 就像讓員工回答前,先去公司資料庫翻相關檔案,而不是憑記憶瞎猜。

關鍵詞:Embedding 與向量資料庫

  • Embedding(嵌入):把文字轉成能表達「語意」的數字向量。例如「今天很熱」和「天氣很炎熱」的向量會很接近。
  • 向量資料庫:專門儲存並快速搜尋相似向量的資料庫,常見的有 Chroma、Pinecone、Qdrant、Weaviate,Python 的 FAISS 也常用。
  • 相似度搜尋:找出與問題最相近的文件區塊,是 RAG 品質的關鍵。

最小實作流程(概念碼)

用 Python 大致長這樣(搭配 LangChain 這類框架會更簡單):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA

# 1. 讀文件
docs = TextLoader("公司手冊.txt").load()

# 2. 切分區塊
splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50)
chunks = splitter.split_documents(docs)

# 3. 建 embedding 並存進向量庫
vectorstore = Chroma.from_documents(chunks, OpenAIEmbeddings())

# 4. 建立檢索問答鏈
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4o-mini"),
chain_type="retrieve",
retriever=vectorstore.as_retriever()
)

print(qa.run("請說明公司的請假規定"))

為什麼企業都愛 RAG?

  • 資料私有且即時:用你自己的文件,而且更新文件就好,不用重訓模型。
  • 減少幻覺、可溯源:答案有根據,還能標註來源讓使用者查證。
  • 成本低:只傳相關的幾區塊,省 token。
  • 跨語言/多格式:PDF、Word、網頁都能處理。

要注意的風險

  • 檢索失準就答錯:如果沒查到正確文件,答案還是會偏。這稱為「垃圾進、垃圾出」。
  • RAG poisoning(投毒):惡意人在文件中放入誤導內容,可能操縱模型輸出。企業應用要留意資料來源可信度。
  • 切分方式影響效果:區塊切太好太壞,直接決定搜尋品質,需要反覆調整。

小結

  • RAG = 回答前先檢索相關文件,再結合給模型
  • 核心三步驟:切分 → Embedding → 向量資料庫
  • 優點是資料私有、即時、可溯源、成本低。
  • 要注意檢索失準、投毒攻擊、切分品質。

RAG 是我們「用自己的資料」的關鍵技術。下一篇更簡單有趣:Function Calling——讓 AI 學會使用外部工具與 API。


《AI 新時代》系列第 06 篇。上一篇:OpenAI API 入門 · 下一篇預告:Function Calling