什麼是 RAG?
RAG = Retrieval-Augmented Generation(檢索增強生成),是目前最主流的 LLM 應用架構之一。
LLM 有兩個先天限制:知識有截止日期(訓練完就定格了),而且不知道你的私有資料(公司文件、課堂筆記、研究數據)。直接問它最新的或你自己的東西,它只能猜或拒答。
RAG 的解法很直覺:先幫 LLM 查到相關資料,再讓它根據查到的內容回答。不改模型、不重新訓練,只是在問問題之前多一個「搜尋」步驟。
使用者提問
「交大有哪些 AI 課程?」
搜尋知識庫
查資料庫、搜網頁、讀文件
組合 Prompt
問題 + 搜尋結果 → 送給 LLM
LLM 回答
根據真實資料生成答案
沒有 RAG vs 有 RAG
直接問 LLM
Q:「交大資工所今年有幾個名額?」
A:「我無法提供最新的招生資訊,建議你到交大官網查詢...」
- ❌ 沒有最新資料
- ❌ 只能給模糊建議
- ❌ 可能幻覺(編造數字)
用 RAG 問 LLM
使用者附上招生簡章 PDF,然後提問:
Q:「交大資工所今年有幾個名額?」
A:「根據 115 學年度招生簡章,資工所碩士班招收 XX 名,包含...(引用簡章第 X 頁)」
- ✅ 根據使用者提供的文件回答
- ✅ 回答具體精確
- ✅ 可對照原始 PDF 驗證
RAG 的應用場景
企業知識庫
- 客服系統 — 根據產品文件回答客戶問題
- 內部搜尋 — 搜尋公司的 Wiki、SOP、會議紀錄
- 新人 onboarding — AI 幫新人查找相關文件
學術研究
- 文獻探索 — 搜尋論文資料庫,回答研究問題
- 數據分析 — 根據實驗數據回答分析問題
- 寫作輔助 — 基於參考文獻協助撰寫論文段落
即時資訊
- 新聞摘要 — 搜尋最新新聞再整理回答
- 課表查詢 — 即時查學校課表系統
- 價格比較 — 搜尋多個來源比較價格
RAG 怎麼做?
RAG 的核心其實就是在送 prompt 給 LLM 之前,先把相關資料塞進去。以讀論文為例:
# RAG 的最簡單實現:讀論文
# Step 1: 讀取論文內容
paper_text = read_pdf("research_paper.pdf")
# Step 2: 把論文內容塞進 prompt
prompt = f"""根據以下論文內容回答問題。
論文內容:
{paper_text}
問題:這篇論文的研究方法是什麼?主要發現有哪些?"""
# Step 3: 送給 LLM
response = client.models.generate_content(
model="gemini-3.5-flash",
contents=prompt
)
print(response.text)
就這麼簡單。RAG 不是什麼神秘的技術,就是「先拿到資料、塞進 prompt、再問 LLM」。資料來源可以是 PDF、資料庫、網頁——任何能拿到內容的方式都行。差別只在你怎麼取得和整理資料。
傳統 RAG vs Agentic RAG
傳統 RAG
- 固定流程 — 每次都搜一次、回答一次
- 被動搜尋 — 程式決定搜哪裡、搜什麼
- 單一來源 — 通常只查一個知識庫
- 不會反思 — 搜到什麼就用什麼,不判斷品質
Agentic RAG
- 動態決策 — AI 自己決定要不要搜、搜幾次
- 主動搜尋 — AI 根據問題判斷該搜哪裡
- 多源整合 — 可以同時查多個來源再整合
- 品質把關 — 搜到的結果不夠好就換個方式再搜
Claude Code + command line 形式的「搜尋程式」天生就是 Agentic RAG。你寫一個能搜尋資料的 CLI 工具,Claude Code 就會自己決定什麼時候呼叫它、搜尋什麼、搜幾次、結果夠不夠好。不需要你寫搜尋邏輯,AI 自己就是 Agent。
實際範例:交大課表查詢
這是一個把交大課表轉成 command line 查詢的程式。把它塞進 Claude Code 的工作目錄,就可以直接請 AI 幫你查想要的課:
nycu-course-search — 交大課表 CLI 查詢工具
有了這個工具,你在 Claude Code 裡直接說「幫我查交大下學期有哪些機器學習的課」,它就會自動呼叫這個程式去搜尋課表、整理結果回報給你。這就是 Agentic RAG 的實際運作方式。