你有冇試過問 ChatGPT 一條公司內部嘅問題,佢答得好自信但完全錯晒?呢個就係所謂嘅「幻覺」(Hallucination)— AI 模型會好似真咁「創作」出唔存在嘅事實。RAG(Retrieval-Augmented Generation,檢索增強生成)就係解決呢個問題嘅核心技術。
呢篇指南會帶你全面了解 RAG 嘅原理、架構、工具選擇,同埋點樣喺你自己部 Mac 上面建立一個完全本地、零私隱風險嘅 RAG 系統。
什麼是 RAG?點解佢咁重要?
RAG 嘅全名係 Retrieval-Augmented Generation(檢索增強生成)。簡單嚟講,就係喺 AI 生成回應之前,先去你指定嘅知識庫度搵相關資料,然後將搵到嘅內容連同你嘅問題一齊交畀 LLM 處理。
傳統 LLM 嘅問題係:
- 知識截止日期 — 模型訓練完之後嘅新資訊佢唔知道
- 幻覺問題 — 遇到唔識嘅嘢會「靠估」,仲要答得好自信
- 無法存取私有資料 — 公司文件、內部知識佢完全唔知
- 缺乏來源引用 — 你無法驗證佢講嘅嘢係咪真
RAG 逐個擊破呢啲問題:佢將 LLM 嘅推理能力同你自己嘅資料結合,令 AI 嘅回應有事實根據、可以追溯來源、而且永遠係最新嘅。
一句話理解 RAG:如果 LLM 係一個好聰明但乜都唔記得嘅顧問,RAG 就係畀佢一個隨時可以查閱嘅圖書館。佢唔使記住所有嘢,只要識得喺啱嘅時候搵到啱嘅資料就得。
RAG 點樣運作?三步流程
RAG 嘅核心流程可以拆解為三個步驟:檢索(Retrieve)→ 增強(Augment)→ 生成(Generate)。
第一步:檢索(Retrieve)
當用戶提出問題,系統會先將問題轉換為向量(embedding),然後喺向量資料庫入面搵出最相關嘅文件片段。呢個過程叫做「語義搜索」— 佢唔係靠關鍵字匹配,而係理解問題嘅含義去搵答案。
第二步:增強(Augment)
搵到相關文件片段之後,系統會將呢啲片段同用戶嘅原始問題組合成一個增強過嘅 prompt。例如:「根據以下資料 [文件片段],請回答以下問題 [用戶問題]」。
第三步:生成(Generate)
增強過嘅 prompt 交畀 LLM 處理。因為 LLM 而家有咗具體嘅參考資料,佢就可以生成有事實根據嘅回應,而唔使靠自己「估」。
向量資料庫:RAG 嘅記憶核心
向量資料庫(Vector Database)係 RAG 系統嘅核心組件。佢嘅作用係將文件轉換為數學向量,然後高效率咁做語義搜索。以下係幾個主流選擇:
| 向量資料庫 | 類型 | 特點 | 適合場景 | 授權 |
|---|---|---|---|---|
| ChromaDB | 嵌入式 | 輕量、Python 原生、零配置 | 個人項目、快速原型 | Apache 2.0 |
| Qdrant | 獨立服務 | 高效能、Rust 編寫、REST API | 生產環境、中大型系統 | Apache 2.0 |
| FAISS | 庫 | Meta 開發、極快搜索速度 | 大量資料、效能優先 | MIT |
| Weaviate | 獨立服務 | GraphQL API、內建向量化 | 企業級應用 | BSD-3 |
| Milvus | 分散式 | 可擴展、支援十億級向量 | 超大規模部署 | Apache 2.0 |
入門建議:如果你剛開始接觸 RAG,用 ChromaDB 就夠。佢可以直接嵌入你嘅 Python 應用,唔使額外運行資料庫服務。等到資料量或需求增加,先再考慮 Qdrant 或 FAISS。
Embedding 模型:文字變向量嘅關鍵
Embedding 模型嘅作用係將文字轉換為高維度嘅數字向量。呢啲向量捕捉咗文字嘅語義含義 — 意思相近嘅文字會有相似嘅向量。
舉個例子:「蘋果手機」同「iPhone」嘅向量會好接近,但「蘋果手機」同「蘋果水果」嘅向量就會比較遠。呢個就係語義搜索嘅基礎。
常用 Embedding 模型
| 模型 | 維度 | 特點 | 本地運行 |
|---|---|---|---|
| nomic-embed-text | 768 | 輕量高效,Ollama 直接支援 | 可以 |
| mxbai-embed-large | 1024 | 效能優秀,多語言支援好 | 可以 |
| all-MiniLM-L6 | 384 | 極輕量,適合資源有限嘅裝置 | 可以 |
| BGE-M3 | 1024 | 多語言能力極強,中文表現好 | 可以 |
喺 Ollama 度拉取 embedding 模型好簡單:
# 下載 embedding 模型
ollama pull nomic-embed-text
# 測試 embedding
curl http://localhost:11434/api/embeddings -d '{
"model": "nomic-embed-text",
"prompt": "什麼是 RAG?"
}'
RAG 實際應用場景
1. 公司知識庫
將公司嘅 SOP、政策文件、產品手冊全部餵入 RAG 系統。員工可以用自然語言查詢:「新員工入職需要填邊啲表格?」「退貨政策嘅期限係幾耐?」系統會從實際文件度搵到答案,唔會自己「作」。
2. 法律文件分析
律師事務所可以將幾千份合約、判例、法規文件入去 RAG 系統。律師問:「關於租約提前終止嘅相關條款有邊啲?」系統會從所有文件度搵出相關段落,仲會標明出處。
3. 客戶支援
將產品文件同過往嘅支援紀錄建立成知識庫。客服人員或者 AI chatbot 可以即時搵到準確嘅解決方案,唔使逐份文件翻查。
4. 學術研究
研究員可以將大量論文、報告餵入 RAG 系統,用自然語言做文獻回顧:「有邊啲研究探討咗 transformer 架構喺醫療影像嘅應用?」
5. 個人知識管理
將你嘅筆記、書籍摘錄、文章收藏建立成個人 AI 助手。隨時問:「上個月我睇嘅嗰篇關於時間管理嘅文章講咗啲咩重點?」
本地 RAG 工具推薦
PrivateGPT — 最簡單嘅本地 RAG
PrivateGPT 係一個完全本地運行嘅 RAG 應用,支援上傳各種文件格式,開箱即用:
# 安裝 PrivateGPT
git clone https://github.com/zylon-ai/private-gpt
cd private-gpt
# 使用 Ollama 作為 LLM 後端
poetry install --extras "ui llms-ollama embeddings-ollama vector-stores-qdrant"
PGPT_PROFILES=ollama make run
PrivateGPT 提供 Web 界面,你可以直接拖放 PDF、Word、TXT 等文件,然後開始對話。所有處理完全喺本地進行。
AnythingLLM — 功能最全面
AnythingLLM 係一個多合一嘅 RAG 平台,有漂亮嘅桌面應用程式:
- 支援多種 LLM 後端(Ollama、LM Studio、本地或雲端)
- 內建向量資料庫(LanceDB),零配置
- 支援工作區(Workspace)分隔唔同知識庫
- 文件管理界面直觀好用
- 可以設定唔同嘅 embedding 模型
對於唔想搞太多配置嘅用家,AnythingLLM 係最推薦嘅選擇。
LangChain — 開發者嘅瑞士軍刀
如果你係開發者,想建立自訂嘅 RAG 流程,LangChain 提供完整嘅工具鏈:
from langchain_community.llms import Ollama
from langchain_community.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA
# 設定本地 LLM 同 Embedding
llm = Ollama(model="llama3")
embeddings = OllamaEmbeddings(model="nomic-embed-text")
# 文件分割
splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
docs = splitter.split_documents(your_documents)
# 建立向量資料庫
vectorstore = Chroma.from_documents(docs, embeddings)
# 建立 RAG 鏈
qa = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever()
)
# 開始查詢
result = qa.invoke("公司嘅年假政策係點?")
print(result)
RAG 工具比較
| 工具 | 難度 | 界面 | 自訂程度 | 適合對象 |
|---|---|---|---|---|
| PrivateGPT | 中等 | Web UI | 中 | 技術用家、注重私隱 |
| AnythingLLM | 簡單 | 桌面 App | 中高 | 所有用家 |
| LangChain | 較高 | 程式碼 | 極高 | 開發者 |
| LlamaIndex | 中高 | 程式碼 | 高 | 開發者 |
| Open WebUI | 簡單 | Web UI | 中 | Ollama 用家 |
本地 RAG 嘅私隱優勢:香港 PDPO 合規
對香港企業嚟講,本地 RAG 有一個雲端方案無法比擬嘅優勢:資料私隱合規。
香港《個人資料(私隱)條例》(PDPO)對個人資料嘅處理有嚴格規定。如果你用雲端 AI 服務(例如 ChatGPT API)處理公司文件,你需要考慮:
- 資料傳輸 — 文件內容會傳送到海外伺服器,可能涉及跨境資料轉移嘅合規問題
- 第三方存取 — 雲端供應商可能有權存取你嘅資料作訓練或改進服務
- 資料外洩風險 — 任何雲端服務都有被入侵嘅可能
- 客戶信任 — 客戶未必願意佢哋嘅資料經過第三方 AI 處理
本地 RAG 完美解決呢啲問題:
- 所有資料留喺你自己嘅硬件上,零跨境傳輸
- 無第三方可以存取你嘅資料
- 唔使擔心雲端服務嘅資料政策變更
- 可以向客戶保證佢哋嘅資料從未離開過你嘅辦公室
合規提示:對於律師事務所、醫療機構、金融公司等處理高度敏感資料嘅行業,本地 RAG 幾乎係唯一可以滿足監管要求嘅 AI 方案。喺 Apple Silicon Mac 上運行本地 RAG,你可以享受 AI 嘅效率提升,同時完全符合 PDPO 嘅要求。
開始建立你嘅本地 RAG 系統
以下係喺 Mac 上從零開始建立本地 RAG 嘅步驟:
第一步:安裝 Ollama
# 安裝 Ollama
brew install ollama
# 啟動 Ollama 服務
ollama serve
第二步:下載所需模型
# 下載 LLM(用嚟生成回應)
ollama pull llama3
# 下載 Embedding 模型(用嚟文件向量化)
ollama pull nomic-embed-text
第三步:選擇 RAG 前端
最簡單嘅入門方法係安裝 AnythingLLM 桌面版。下載安裝後:
- 選擇 Ollama 作為 LLM 提供者
- 選擇 Ollama 作為 Embedding 提供者
- 建立一個新嘅工作區(Workspace)
- 上傳你嘅文件(PDF、Word、TXT 等)
- 等文件處理完成,開始對話
第四步:優化表現
- Chunk size — 建議 500–1000 字元,太大會令搜索精確度降低
- Chunk overlap — 建議 50–100 字元,確保重要資訊唔會因為分割而斷開
- Top-K — 每次檢索返回嘅文件片段數量,建議 3–5 個
- Embedding 模型 — 中文內容建議用 BGE-M3 或 mxbai-embed-large
常見問題
RAG 同 Fine-tuning 有咩分別?
Fine-tuning 係將新知識「燒入」模型本身,需要大量計算資源同時間。RAG 係喺推理時動態檢索資料,唔使改動模型。對於大多數場景,RAG 更加實際 — 資料更新快、成本低、唔使重新訓練模型。
需要幾多記憶體?
RAG 系統需要同時運行 LLM + Embedding 模型 + 向量資料庫。建議最少 16GB 記憶體。如果用 8B LLM + nomic-embed-text,大約需要 10–12GB。
支援邊啲文件格式?
主流 RAG 工具一般支援 PDF、Word(.docx)、TXT、Markdown、HTML、CSV、Excel 等。部分工具仲支援圖片 OCR 同音訊轉文字。