前言
如果你正在使用 n8n 建立 AI Agent,肯定遇過一個棘手問題:當 Agent 需要查詢即時資訊(如新聞、天氣)時,該怎麼辦?
這篇文章將手把手教你如何將 Grounding with Google Search 包裝成一個獨立的 n8n Workflow,讓你的任何 AI Agent 都能透過「Call n8n Workflow Tool」重複調用這個強大的搜尋能力。
什麼是 Grounding with Google Search?
簡單來說,這是讓 AI 腳踏實地(Grounding)獲取真實世界資訊的機制。當你在 API 請求中啟用Google Search 工具時,Gemini 模型會執行以下動作:- 意圖分析:判斷你的問題是否需要聯網搜尋。
- 執行搜尋:自動產生關鍵字並進行 Google 搜尋。
- 整合資訊:閱讀搜尋結果,生成有憑據的回答。
- 來源標註:回傳資料來源連結,讓內容具備可信度。
這對於需要「即時性」與「準確性」的應用場景(例如:查詢今日股價、最新颱風動態)至關重要。
實作架構總覽
為了達成「可重複使用」的目標,我們將建立兩個 Workflow:
- 1. 搜尋工具 Workflow(子流程):負責接收查詢指令、呼叫 Gemini API、清洗資料並回傳。
- 2. 主要 Workflow(主流程):你的 AI Agent 本體,透過 Tool 功能呼叫上述的子流程。
架構示意圖:
[你的 AI Agent (主流程)]
↓
[Call n8n Workflow Tool]
↓
[搜尋工具 Workflow (子流程)]
↓
[Gemini API (啟動 Grounding)]
↓
[回傳:摘要結果 + 資料來源連結]
步驟一:建立搜尋工具 Workflow
請在 n8n 中建立一個新的 Workflow,命名為「Gemini Grounding Search Tool」,並依序加入以下節點。
1. Execute Workflow Trigger
這是讓此 Workflow 能被外部呼叫的關鍵入口。
- 節點類型:Execute Workflow Trigger
- 設定方式 (Input data mode):選擇
Define using fields below - 欄位設定 (Fields):新增一個欄位
- Name: query
- Type: String
2. HTTP Request 節點
負責與 Google Gemini API 進行通訊。
- 節點類型:HTTP Request
- Method:POST
- URL:(使用模型自行更改,這裡使用gemini-3.0-flash-preview)
https://generativelanguage.googleapis.com/v1beta/models/gemini-3.0-flash-preview:generateContent - Authentication:Generic Credential Type → Header Auth
- Headers:
- Content-Type : application/json
Body 設定(JSON 格式): 請直接複製以下程式碼,注意 {{ $json.query }} 是讀取上一個節點的輸入值。
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "{{ $json.query }}"
}
]
}
],
"tools": [
{
"google_search": {}
}
],
"systemInstruction": {
"parts": [
{
"text": "你是一個專業的搜尋助手。優先搜尋台灣相關的內容,使用繁體中文回覆。"
}
]
},
"generationConfig": {
"temperature": 0.5,
"maxOutputTokens": 2048
}
}
關鍵設定:"tools": [{"google_search": {}}] 這行程式碼正是啟用 Grounding with Google Search 功能的開關。
3. 設定 API Key (Credentials)
你需要先到 Google AI Studio 申請 API Key,並在 n8n 建立 Header Auth:
- Header Name:x-goog-api-keyHeader Value:你的_Gemini_API_Key
4. Code 節點 (資料清洗)
Gemini 回傳的 JSON 結構較為複雜,我們使用 Code 節點來提取「摘要內容」與「引用來源」。
- 節點類型:CodeLanguage:JavaScript
JavaScript 程式碼:
// 取得 Gemini API 回應
const input = $input.first().json;
const data = input.body || input;
// 1. 提取 AI 回應文字
let response = '抱歉,無法取得搜尋結果';
if (data.candidates && data.candidates[0]) {
const parts = data.candidates[0].content?.parts;
if (parts && parts[0]) {
response = parts[0].text || response;
}
}
// 2. 提取資料來源 (Grounding Metadata)
const groundingMetadata = data.candidates?.[0]?.groundingMetadata || null;
let sources = [];
let sourcesText = '';
if (groundingMetadata?.groundingChunks) {
sources = groundingMetadata.groundingChunks
.filter(c => c.web?.uri)
.slice(0, 5) // 限制只取前 5 個來源
.map(c => ({
title: c.web?.title || '來源連結',
url: c.web.uri
}));
// 格式化來源文字,方便直接顯示
if (sources.length > 0) {
sourcesText = '\n\n📚 資料來源:';
sources.forEach((s, i) => {
sourcesText += `\n${i + 1}. ${s.title}`;
});
}
}
// 3. 回傳整理後的結果
return {
json: {
response: response + sourcesText,
sources
}
};
步驟二:在 AI Agent 中使用搜尋工具
完成上述設定後,回到你的主流程,將這個搜尋能力賦予你的 Agent。
- 新增 Tool:在 AI Agent 節點中,點選
Add Tool。 - 選擇類型:選擇
Call n8n Workflow Tool。 - 設定參數:
- Tool Name:google_grounding_search (命名需符合程式規範,不能有空格)
- Description:使用 Google 搜尋查詢最新資訊。適合查詢新聞、天氣、股價、活動等即時資料。優先顯示台灣相關內容。 (注意:Description 對於 LLM 判斷何時使用工具非常重要)
- Workflow:選擇剛剛建立的「Gemini Grounding Search Tool」。
- 定義輸入 (Input Definition):
Defined automatically by the model
實際運作情境
當使用者問:「今天台北天氣如何?」
- Agent 判斷:這是一個需要即時資訊的問題。
- 呼叫工具:Agent 啟動
google_grounding_search,傳入參數query = "台北今天天氣"。 - 執行搜尋:子流程運作,Gemini API 聯網搜尋 Google。
- 回傳結果:Agent 收到天氣概況與資料來源。
- 最終回覆:Agent 整理資訊後,回答使用者並附上參考連結。
使用此方法的 4 大優勢
- 完全免費:善用 Gemini API 的免費額度。
- 原生準確:直接使用 Google 搜尋引擎底層技術,結果精準度極高。
- 自動引用:API 結構化回傳資料來源,解決 AI 幻覺(Hallucination)問題,增加可信度。
- 模組化設計:一次建立,無限重複使用。無論你有幾個 Chatbot,都能共用這個搜尋工具。
進階優化小撇步
為了讓體驗更好,你可以嘗試以下調整:
- 地區限定:在
systemInstruction中加入「僅搜尋台灣地區資訊」,避免出現簡體中文或國外不相關的結果。 - 控制創造力:將
temperature設定為 0.3 或更低,讓回答更保守、更忠於搜尋結果。 - 錯誤處理:在 HTTP Request 後加入 If 節點,若 API 呼叫失敗(例如超出額度),可設定備案回覆,避免流程中斷。
























