為什麼需要 RAG?
LLM 有一個根本性的限制——它只知道訓練資料中包含的內容。當你問 Gemini「我們公司的退貨政策是什麼?」,它不可能知道答案,因為你的公司文件不在它的訓練資料中。
更糟糕的是,LLM 不會說「我不知道」——它會自信地編造一個看起來合理的答案。這就是「幻覺(Hallucination)」問題。
RAG(Retrieval-Augmented Generation) 是解決這個問題的標準架構模式:
使用者提問
│
▼
① 檢索(Retrieval):從企業知識庫中找出最相關的文件片段
│
▼
② 增強(Augmentation):將檢索到的片段作為上下文注入 prompt
│
▼
③ 生成(Generation):LLM 基於這些真實資料生成回答
RAG 的核心邏輯很簡單:不讓 AI 憑記憶回答,而是先幫它找到答案所在的文件,再讓它基於文件生成回答。
RAG vs Fine-tuning
| 面向 | RAG | Fine-tuning |
|---|---|---|
| 適用場景 | 讓 AI 存取最新或私有資料 | 改變 AI 的行為模式或風格 |
| 資料更新 | 即時——更新文件索引即可 | 需要重新訓練模型 |
| 成本 | 低(只需索引和檢索) | 高(GPU 訓練時數) |
| 可追溯性 | 高(可標示回答來源) | 低(無法追溯到特定訓練資料) |
| 幻覺控制 | 好(回答錨定在真實文件上) | 中等(仍可能產生幻覺) |
| 最佳搭配 | 知識問答、文件搜尋、客服 | 特殊語氣、專業術語、格式要求 |
💡 提示:在實務中,80% 的企業 AI 應用適合用 RAG 解決。只有在需要改變模型的回答風格或教會它全新的專業領域知識時,才考慮 fine-tuning。
RAG 的核心元件
一套完整的 RAG 系統包含三個核心元件:
1. 文件處理與切割(Document Processing)
原始文件(PDF、Word、網頁、資料庫)必須先被切割為適當大小的文件片段(Chunks):
| 切割策略 | 說明 | 適用場景 |
|---|---|---|
| 固定大小 | 每 500-1000 tokens 切一段 | 通用文件、快速上手 |
| 語意切割 | 按段落、章節或語意邊界切割 | 結構化文件、技術手冊 |
| 重疊切割 | 相鄰片段有 10-20% 重疊 | 避免關鍵資訊被切斷 |
切割粒度直接影響檢索品質:太大的片段包含雜訊,太小的片段缺乏上下文。
2. 向量嵌入與索引(Embedding & Indexing)
文件片段被轉換為向量嵌入(Vector Embeddings)——一組數字,代表文字的語意含義。語意相近的文字在向量空間中距離較近。
「Cloud Run 是無伺服器容器平台」
→ [0.12, -0.45, 0.78, ..., 0.33] (768 維向量)
「Cloud Run 提供自動擴縮功能」
→ [0.11, -0.43, 0.76, ..., 0.35] (語意相近,向量距離近)
「BigQuery 是資料倉儲」
→ [0.89, 0.22, -0.15, ..., -0.67] (語意不同,向量距離遠)
GCP 提供的嵌入模型:
| 模型 | 維度 | 適用場景 |
|---|---|---|
| text-embedding-005 | 768 | 一般文字嵌入,推薦大部分場景 |
| text-multilingual-embedding-002 | 768 | 多語言場景(含繁體中文) |
3. 檢索與生成(Retrieval & Generation)
使用者提問時:
- 將問題轉換為同樣的向量表示
- 在索引中搜尋最近似的文件片段(通常取 top-5)
- 將這些片段注入 prompt 作為上下文
- LLM 基於上下文生成回答
在 GCP 上實作 RAG
GCP 提供兩條路徑建構 RAG 系統:
路徑一:Vertex AI Search(全託管、零程式碼)
Vertex AI Search 是最快的方式——你只需要上傳文件,Google 處理切割、嵌入、索引和檢索的所有細節。
步驟:
- 建立 Data Store — 在 Vertex AI Search 建立資料存放區
- 匯入資料 — 支援 Cloud Storage(PDF、HTML、TXT)、BigQuery、網站爬蟲
- 建立 Search App — 建立搜尋應用,設定 LLM 摘要功能
- 查詢 — 透過 API 或 Console 進行語意搜尋
from google import genai
client = genai.Client(vertexai=True, project='YOUR_PROJECT', location='us-central1')
# 使用 Vertex AI Search 作為 grounding 來源
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='我們公司的年假政策是什麼?',
config={
'tools': [{
'retrieval': {
'vertex_ai_search': {
'datastore': 'projects/YOUR_PROJECT/locations/global/collections/default_collection/dataStores/YOUR_DATASTORE'
}
}
}]
}
)
print(response.text)
# AI 會基於你上傳的公司文件回答,並附上來源引用
Vertex AI Search 的優勢:
- 零基礎設施管理 — 不需要管理向量資料庫
- 自動切割與嵌入 — Google 的 AI 自動處理文件前處理
- 混合搜尋 — 結合語意搜尋和關鍵字搜尋,提升召回率
- 權限控制 — 整合 Google Workspace 權限,使用者只能搜到有權限的文件
- 多語言 — 原生支援包含繁體中文在內的多種語言
💡 提示:對大多數企業 RAG 需求,Vertex AI Search 是最佳起點。只有在需要完全控制檢索邏輯時,才考慮自建 RAG。
路徑二:自建 RAG(完全控制)
需要更細粒度控制時,可以用 Python 自建 RAG pipeline:
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project='YOUR_PROJECT', location='us-central1')
# Step 1:文件切割(簡化範例)
def chunk_document(text, chunk_size=500, overlap=50):
chunks = []
start = 0
while start < len(text):
end = start + chunk_size
chunks.append(text[start:end])
start = end - overlap
return chunks
# Step 2:產生嵌入向量
def get_embeddings(texts):
response = client.models.embed_content(
model='text-embedding-005',
contents=texts
)
return [e.values for e in response.embeddings]
# Step 3:檢索最相關的片段(簡化版,生產環境應使用向量資料庫)
import numpy as np
def find_relevant_chunks(query, chunks, chunk_embeddings, top_k=3):
query_embedding = get_embeddings([query])[0]
# 計算餘弦相似度
similarities = []
for emb in chunk_embeddings:
sim = np.dot(query_embedding, emb) / (np.linalg.norm(query_embedding) * np.linalg.norm(emb))
similarities.append(sim)
# 取 top-k
top_indices = np.argsort(similarities)[-top_k:][::-1]
return [(chunks[i], similarities[i]) for i in top_indices]
# Step 4:RAG 生成
def rag_answer(query, chunks, chunk_embeddings):
relevant = find_relevant_chunks(query, chunks, chunk_embeddings)
context = '\n---\n'.join([chunk for chunk, score in relevant])
prompt = f"""根據以下參考資料回答問題。如果資料中沒有相關資訊,請明確說明「根據現有資料無法回答」。
參考資料:
{context}
問題:{query}
回答:"""
response = client.models.generate_content(
model='gemini-2.5-flash',
config=types.GenerateContentConfig(temperature=0.2),
contents=prompt
)
return response.text, relevant
自建 vs 全託管的決策:
| 面向 | Vertex AI Search | 自建 RAG |
|---|---|---|
| 開發速度 | 數小時 | 數週 |
| 基礎設施 | 全託管 | 需管理向量資料庫 |
| 客製化 | 中等 | 完全控制 |
| 切割策略 | Google 自動 | 自訂 |
| 向量資料庫 | 內建 | AlloyDB / Pinecone / Weaviate |
| 適合 | 80% 的企業場景 | 需要極致客製化的場景 |
Agent Builder:RAG + 工具呼叫
Vertex AI Agent Builder 將 RAG 提升到下一個層次——不只是問答,而是能執行動作的 AI 代理:
Agent 的三大能力
- RAG 知識檢索 — 從企業文件中找答案(同 Vertex AI Search)
- 工具呼叫(Function Calling) — 呼叫 API 執行動作(查詢訂單、建立工單)
- 多步推理 — 自動拆解複雜問題為多個步驟依序執行
Function Calling 範例
讓 AI 不只回答問題,還能執行實際動作:
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project='YOUR_PROJECT', location='us-central1')
# 定義工具(函式宣告)
check_gcp_status_tool = types.Tool(
function_declarations=[
types.FunctionDeclaration(
name='check_service_status',
description='檢查指定 GCP 服務的運行狀態',
parameters={
'type': 'object',
'properties': {
'service_name': {
'type': 'string',
'description': 'GCP 服務名稱,如 Cloud Run、Cloud SQL'
},
'region': {
'type': 'string',
'description': 'GCP 區域,如 us-central1、asia-east1'
}
},
'required': ['service_name']
}
)
]
)
# 帶工具的對話
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='幫我檢查 asia-east1 的 Cloud SQL 目前是否正常運行',
config=types.GenerateContentConfig(
tools=[check_gcp_status_tool]
)
)
# 模型會回傳 function call 而非文字回應
if response.candidates[0].content.parts[0].function_call:
fc = response.candidates[0].content.parts[0].function_call
print(f"模型要求呼叫函式:{fc.name}")
print(f"參數:{fc.args}")
# → 你的程式碼執行實際的 API 呼叫,再將結果回傳給模型
RAG + Function Calling 的威力
結合兩者,你可以建構真正有用的企業 AI 助手:
| 使用者問題 | AI 的行動 |
|---|---|
| 「我們的退貨政策是什麼?」 | RAG:從知識庫檢索退貨政策文件 |
| 「幫我查訂單 #12345 的狀態」 | Function Call:呼叫訂單查詢 API |
| 「根據退貨政策,訂單 #12345 可以退貨嗎?」 | RAG + Function Call:先查政策,再查訂單,綜合判斷 |
Grounding:減少幻覺的關鍵
Grounding(接地) 是讓 AI 回答基於事實而非猜測的機制。GCP 提供兩種 grounding 來源:
Google Search Grounding
讓 Gemini 在回答前先搜尋 Google,用最新的網路資訊作為依據:
response = client.models.generate_content(
model='gemini-2.5-flash',
contents='Google Cloud 最近有什麼新服務發布?',
config=types.GenerateContentConfig(
tools=[types.Tool(google_search=types.GoogleSearch())]
)
)
print(response.text)
# 回答會基於最新的 Google 搜尋結果,並附上來源連結
Enterprise Grounding(Vertex AI Search)
用你自己的企業資料作為 grounding 來源(即前面介紹的 RAG 模式)。
| Grounding 類型 | 來源 | 適用場景 |
|---|---|---|
| Google Search | 公開網路 | 需要最新資訊、通用知識 |
| Vertex AI Search | 企業私有資料 | 內部知識庫、合規文件 |
| 兩者結合 | 混合 | 企業資料為主,公開資訊為輔 |
RAG 品質優化
RAG 系統上線容易,但做好不容易。以下是常見的品質問題與解決方案:
| 問題 | 症狀 | 解決方案 |
|---|---|---|
| 檢索不到正確文件 | AI 回答「根據資料無法回答」,但答案確實在文件中 | 調整切割策略(使用重疊切割)、嘗試混合搜尋 |
| 檢索到不相關文件 | AI 回答偏離主題 | 加入 metadata 篩選、提高相似度閾值 |
| 幻覺仍然存在 | AI 回答包含文件中不存在的資訊 | 在 prompt 中強化「僅根據提供的資料回答」指令 |
| 回答缺乏上下文 | 回答過於簡短或片段化 | 增加檢索的 top-k 數量、使用更大的 chunk size |
| 多語言品質差 | 中文問題檢索到英文文件但翻譯品質低 | 使用 multilingual embedding model |
評估 RAG 品質的指標
- Faithfulness(忠實度) — AI 的回答是否完全基於檢索到的文件?
- Relevance(相關性) — 檢索到的文件是否與問題相關?
- Answer Correctness(答案正確性) — 最終答案是否正確?
Vertex AI 提供內建的 RAG 評估框架,可以自動化這些品質檢查。
實戰情境
情境一:企業知識庫問答
需求:一家 500 人的科技公司,內部文件散落在 Google Drive、Confluence 和 SharePoint。員工平均每天花 45 分鐘搜尋內部資訊。
架構:
- 資料匯入 — 使用 Vertex AI Search 的連接器,自動索引 Google Drive 和網站內容
- 權限控制 — 整合 Google Workspace 權限,研發部門的文件只有研發部門能搜到
- 搜尋介面 — 在公司內網嵌入 Vertex AI Search 的搜尋 Widget
- LLM 摘要 — 搜尋結果自動由 Gemini 2.5 Flash 產生摘要回答,附上來源連結
- 預估效益 — 每人每天節省 30 分鐘 × 500 人 × 250 工作日 = 每年節省 62,500 人時
情境二:客服 AI 助手
需求:電商平台每月收到 10 萬筆客服諮詢,70% 是重複性問題(退貨政策、物流查詢、付款問題)。
架構:
- 知識庫 — Vertex AI Search 索引客服手冊、FAQ、退貨政策
- 工具整合 — Agent Builder 連接訂單查詢 API、物流追蹤 API
- 對話流程 — 多輪對話處理複雜問題(「我的訂單 #12345 可以退貨嗎?」→ 查訂單 → 查政策 → 綜合判斷)
- 人工升級 — AI 無法解答或客戶要求時,自動轉接真人客服,附上對話摘要
- 安全護欄 — Model Armor 過濾不當內容,防止 prompt injection
- 預估效益 — 自動處理 70% 的諮詢,客服團隊可從 20 人減少到 8 人
重點整理
| 概念 | 重點 |
|---|---|
| RAG | 先檢索再生成——讓 AI 基於真實文件回答,大幅減少幻覺 |
| Vertex AI Search | 全託管 RAG 方案,數小時即可上線,適合 80% 企業場景 |
| 自建 RAG | 完全控制切割/嵌入/檢索,適合需要極致客製化的場景 |
| Agent Builder | RAG + Function Calling + 多步推理,建構能執行動作的 AI 代理 |
| Grounding | Google Search(公開資訊)+ Vertex AI Search(私有資料)兩種來源 |
| Function Calling | 讓 AI 呼叫 API 執行動作,從問答升級為任務執行 |
| 品質優化 | 切割策略、混合搜尋、prompt 強化、評估指標(Faithfulness/Relevance) |
核心原則:
- 先用 Vertex AI Search,再考慮自建 — 全託管方案能滿足大部分需求
- RAG 先於 Fine-tuning — 80% 的企業 AI 需求用 RAG 即可解決
- 安全護欄不可省 — Model Armor 是所有面向使用者的 AI 應用必備元件
- 品質是持續工程 — 上線只是開始,持續監控 Faithfulness 和 Relevance
課程總結
恭喜你完成登雲學院 GenAI 課程的全部 5 堂課!你已經從零建立了生成式 AI 的完整知識體系:
- 概念基礎 — 生成式 AI 的原理與 Google Cloud AI 產品全景
- API 實作 — 用 Gemini API 完成文字生成、多模態分析、串流回應
- Prompt 技巧 — Few-shot、CoT、JSON mode、溫度控制
- RAG 架構 — 讓 AI 在企業資料上精準回答,減少幻覺
- Agent 建構 — RAG + Function Calling,從問答升級為任務執行
接下來,你可以回到 PCA 課程 的 AI/ML 章節(Lesson 10),從架構師角度深入理解企業級 AI 系統設計。