跳至主要內容
ESC
跳到課程內容
進階應用 RAG 架構:讓 AI 用你的資料回答問題
0%
5 / 5 中級 35 分鐘 00:00

RAG 架構:讓 AI 用你的資料回答問題

實戰學習 RAG(Retrieval-Augmented Generation)架構,用 Vertex AI Search 和 Agent Builder 建構企業級知識問答系統,大幅減少 AI 幻覺

2026年3月21日

為什麼需要 RAG?

LLM 有一個根本性的限制——它只知道訓練資料中包含的內容。當你問 Gemini「我們公司的退貨政策是什麼?」,它不可能知道答案,因為你的公司文件不在它的訓練資料中。

更糟糕的是,LLM 不會說「我不知道」——它會自信地編造一個看起來合理的答案。這就是「幻覺(Hallucination)」問題。

RAG(Retrieval-Augmented Generation) 是解決這個問題的標準架構模式:

使用者提問


① 檢索(Retrieval):從企業知識庫中找出最相關的文件片段


② 增強(Augmentation):將檢索到的片段作為上下文注入 prompt


③ 生成(Generation):LLM 基於這些真實資料生成回答

RAG 的核心邏輯很簡單:不讓 AI 憑記憶回答,而是先幫它找到答案所在的文件,再讓它基於文件生成回答。

RAG vs Fine-tuning

面向RAGFine-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-005768一般文字嵌入,推薦大部分場景
text-multilingual-embedding-002768多語言場景(含繁體中文)

3. 檢索與生成(Retrieval & Generation)

使用者提問時:

  1. 將問題轉換為同樣的向量表示
  2. 在索引中搜尋最近似的文件片段(通常取 top-5)
  3. 將這些片段注入 prompt 作為上下文
  4. LLM 基於上下文生成回答

在 GCP 上實作 RAG

GCP 提供兩條路徑建構 RAG 系統:

路徑一:Vertex AI Search(全託管、零程式碼)

Vertex AI Search 是最快的方式——你只需要上傳文件,Google 處理切割、嵌入、索引和檢索的所有細節。

步驟:

  1. 建立 Data Store — 在 Vertex AI Search 建立資料存放區
  2. 匯入資料 — 支援 Cloud Storage(PDF、HTML、TXT)、BigQuery、網站爬蟲
  3. 建立 Search App — 建立搜尋應用,設定 LLM 摘要功能
  4. 查詢 — 透過 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 的三大能力

  1. RAG 知識檢索 — 從企業文件中找答案(同 Vertex AI Search)
  2. 工具呼叫(Function Calling) — 呼叫 API 執行動作(查詢訂單、建立工單)
  3. 多步推理 — 自動拆解複雜問題為多個步驟依序執行

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 搜尋結果,並附上來源連結

用你自己的企業資料作為 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 BuilderRAG + Function Calling + 多步推理,建構能執行動作的 AI 代理
GroundingGoogle 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 的完整知識體系:

  1. 概念基礎 — 生成式 AI 的原理與 Google Cloud AI 產品全景
  2. API 實作 — 用 Gemini API 完成文字生成、多模態分析、串流回應
  3. Prompt 技巧 — Few-shot、CoT、JSON mode、溫度控制
  4. RAG 架構 — 讓 AI 在企業資料上精準回答,減少幻覺
  5. Agent 建構 — RAG + Function Calling,從問答升級為任務執行

接下來,你可以回到 PCA 課程 的 AI/ML 章節(Lesson 10),從架構師角度深入理解企業級 AI 系統設計。

徽章解鎖!