Skip to main content

RAG 實戰手冊:如何讓 AI 讀懂你的私人文件?

· 3 min read

在 LLM(大型語言模型)的時代,我們常遇到一個難題:AI 不知道你公司的內規,也不知道你電腦裡的私密文件。 要解決這個問題,我們不需要重新訓練模型,而是使用 RAG(Retrieval-Augmented Generation,檢索增強生成)。簡單來說,就是「先幫 AI 翻書(檢索),再讓它回答(生成)」。

一、 RAG 的核心工作流

一個典型的 RAG 流程可以拆解為兩個階段:資料處理(離線)問答檢索(在線)

1. 資料處理階段 (Indexing)

這是將你的知識庫轉換為「機器可讀」格式的過程:

  • Loading: 讀取 PDF、Markdown 或資料庫內容。
  • Chunking (切片): 將長文章切碎成小塊。
  • Embedding (嵌入): 將文字轉化為向量(數字)。
  • Storage: 存入向量資料庫(Vector Database)。

2. 問答檢索階段 (Retrieval)

當使用者提問時:

  • 系統將問題轉化為向量。
  • 在資料庫中比對相似度,找出最相關的幾個 Chunks
  • 將這些片段與使用者的問題一起塞給 LLM,讓它「看圖說故事」。

二、 深度拆解:什麼是 Chunking (切片)?

如果把 Embedding 比作「翻譯」,那 Chunking 就是「排版」。AI 的上下文視窗有限,我們不能把整本書塞進去。

為什麼 Chunking 很重要?

  • 顆粒度控制: 切得太細,會遺失上下文;切得太粗,會混入太多雜訊,稀釋掉關鍵答案。
  • 重疊策略 (Overlap): 這是實作中的關鍵技巧。我們通常會在 Chunk A 的末尾保留一部分內容到 Chunk B 的開頭。

    小技巧: 加入 10%~20% 的 Overlap,能確保跨切片的語意不會被硬生生切斷。

三、 核心技術:Embedding (嵌入)

Embedding 是將「人類語言」轉換為「數學座標」的過程。

想像一個巨大的 3D 空間,語意相近的詞會靠在一起:

  • 「排球」和「羽球」在空間中的距離會很近。
  • 「排球」和「程式碼」的距離就會非常遠。

Embedding 的運作邏輯

  1. 輸入: 一個文字 Chunk。
  2. 轉換: 通過 Embedding 模型(如 OpenAI 的 text-embedding-3-small)。
  3. 輸出: 一串長長的數字陣列(例如 1536 維的向量)。
  4. 比對: 當使用者提問時,我們計算「問題向量」與「Chunk 向量」之間的餘弦相似度 (Cosine Similarity),數字越大,代表兩者語意越接近。

四、 總結:Chunk 與 Embedding 的合作關係

這兩者是相輔相成的:

  • Chunking 決定了「資料的質量」: 確保每一塊資訊都是完整且獨立的。
  • Embedding 決定了「搜尋的精度」: 確保電腦能精確地在幾萬個片段中抓到正確的那一塊。

對於開發者來說,RAG 的優化通常不在於更換最強的模型,而是在於如何切分出更高品質的 Chunk,以及選擇適合領域的 Embedding 模型

五、 延伸思考

如果你正在使用 Clean Architecture 來設計 RAG 系統,建議將「切片策略」與「向量存取」抽象化,這樣未來在更換 Embedding 模型或調整 Chunk 大小時,才不會動到核心業務邏輯。