← W2 | RAG

RAG 架構介紹

什麼是 RAG?

RAG = Retrieval-Augmented Generation(檢索增強生成),是目前最主流的 LLM 應用架構之一。

LLM 有兩個先天限制:知識有截止日期(訓練完就定格了),而且不知道你的私有資料(公司文件、課堂筆記、研究數據)。直接問它最新的或你自己的東西,它只能猜或拒答。

RAG 的解法很直覺:先幫 LLM 查到相關資料,再讓它根據查到的內容回答。不改模型、不重新訓練,只是在問問題之前多一個「搜尋」步驟。

1

使用者提問

「交大有哪些 AI 課程?」

2

搜尋知識庫

查資料庫、搜網頁、讀文件

3

組合 Prompt

問題 + 搜尋結果 → 送給 LLM

4

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 的實際運作方式。