如何用 SERP API 為 LangChain Agent 加入即時 Google 搜尋能力

了解如何使用 SERP API 為 LangChain Agent 接入即時 Google 搜尋,讓 Agent 可以取得最新搜尋結果、整理來源,並基於即時資料回答問題。

talor ai
最后更新于
4 分钟阅读

LangChain Agent 很好用,但只要使用者問到最新資訊,問題就來了。

某個產品昨天剛發布。某個排名今天早上變了。競品剛調整價格。新的文件頁剛上線。模型本身可能仍然回答得很流暢,但它用的其實是舊知識。

這時候,搜尋工具就很有價值。

SERP API 可以讓 LangChain Agent 即時查詢 Google,取得結構化搜尋結果,再根據這些結果回答問題。你不需要自己抓 Google 頁面,也不需要維護瀏覽器會話,更不用每次搜尋頁版面變動就修 selector。

這篇文章會示範如何讓 LangChain Agent 透過 Talordata SERP API 調用 Google Search。後續同樣的方式也可以延伸到 Bing、Yandex、DuckDuckGo、Google News、Google Images 等搜尋類型。

我們要建立什麼?

整體流程很直覺:

使用者問題
→ LangChain Agent 判斷是否需要搜尋
→ SERP API 取得最新 Google 結果
→ Agent 讀取 title、link、snippet 和 metadata
→ Agent 生成有依據的回答

例如,使用者問:

What are the latest updates in LangChain agents?

不要讓模型直接靠記憶回答,而是讓 Agent 先搜尋,再整理結果。

這種方式適合:

  • 研究助手

  • SEO 工具

  • AI 新聞監控

  • 競品追蹤 Agent

  • 市場研究流程

  • 內容大綱生成器

  • 需要即時網頁資料的 RAG 系統

為什麼不用自己抓 Google?

你當然可以自己寫爬蟲抓 Google,至少一開始看起來可以。

但很快就會遇到麻煩:

  • 不同國家和裝置的搜尋結果版面不同

  • 廣告、Maps、Videos、Images、News 會混在結果裡

  • 需要處理 CAPTCHA 和封鎖

  • 會遇到跳轉連結和追蹤連結

  • HTML selector 經常變

  • 有些內容和模組不是單純靜態 HTML

  • 搜尋結果很難穩定整理成統一格式

對 Agent 來說,原始 HTML 也太吵了。

大多數時候,你不需要把整頁搜尋結果塞進模型上下文。你真正需要的是更乾淨的資料結構:

{
  "title": "Example result",
  "link": "https://example.com",
  "snippet": "Short description from the search result",
  "position": 1
}

這種資料更容易讓 LLM 理解,也更容易存入資料庫,token 消耗也更可控。

Step 1:安裝套件

如果你走 SDK 方式,可以先安裝 Talordata 的 LangChain 套件:

pip install langchain-talordata

如果你使用 OpenAI 作為 LangChain 模型,也可以一起安裝:

pip install langchain langchain-openai langchain-talordata

SDK 方式適合快速原型、內部工具和單一 Agent 應用。你可以先用它跑通流程,再考慮是否需要 MCP。

TalorData和LangChain集成教程-MCP

TalorData和LangChain集成教程-SDK

Step 2:設定 API Key

Talordata 的 LangChain 套件會讀取 TALOR_API_KEY

import os

os.environ["TALOR_API_KEY"] = "your-talordata-api-key"
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"

正式部署時,不要把 API Key 寫死在 Python 檔案中。更好的做法是使用環境變數、secret manager,或部署平台提供的密鑰設定。

Step 3:先直接測試 Google Search

不要急著把工具塞進 Agent。

先確認搜尋工具本身可以正常返回結果。

from langchain_talordata import TalorSerpTool

search_tool = TalorSerpTool.from_env()

result = search_tool.invoke({
    "query": "latest LangChain agent updates",
    "engine": "google",
    "params": {
        "gl": "us",
        "hl": "en",
        "device": "desktop"
    }
})

print(result)

這一步很重要。

如果工具本身回傳錯誤,Agent 不會突然變聰明。先把搜尋請求、API Key、參數和返回資料都測通,再把它交給 Agent。

常見參數包括:

參數

用途

query

搜尋查詢

engine

搜尋引擎,例如 google

gl

國家或市場

hl

搜尋語言

device

desktop 或 mobile

location

城市或地區

no_cache

是否跳過快取,視 API 設定而定

Step 4:把搜尋工具加入 LangChain Agent

工具測通後,就可以交給 Agent 使用。

from langchain.agents import create_agent
from langchain_talordata import TalorSerpTool

search_tool = TalorSerpTool.from_env()

agent = create_agent(
    model="openai:gpt-4o-mini",
    tools=[search_tool],
    system_prompt=(
        "You are a research assistant. "
        "Use Google Search when the user asks about recent, changing, "
        "or source-dependent information. "
        "When you use search results, summarize the answer clearly and include the source URLs."
    ),
)

response = agent.invoke({
    "messages": [
        {
            "role": "user",
            "content": "What are the latest updates in LangChain agents?"
        }
    ]
})

print(response)

這裡的重點不是程式碼有多長,而是 Agent 多了一個新能力:

它不再只能依賴模型記憶。

它可以在需要時查詢即時搜尋結果。

Step 5:不要讓 Agent 什麼都搜

很多人做搜尋 Agent 時,會犯一個錯:讓 Agent 每個問題都查搜尋。

聽起來保險,但實際會帶來幾個問題:

  1. 簡單問題也變慢

  2. API 請求變多

  3. Agent 可能被雜訊搜尋結果帶偏

比較好的做法是讓 Agent 只在必要時搜尋。

適合搜尋的問題:

What changed in Google AI Overviews this month?
Who are the top-ranking pages for "best CRM software" in the US?
Find recent pricing pages for project management tools.
What are people saying about this product launch?

不太需要搜尋的問題:

What is a Python list?
Explain what an API is.
Write a regex for email validation.
Summarize this paragraph.

可以把規則寫進 system prompt:

system_prompt = """
You are a practical research assistant.

Use the search tool only when:
- the question depends on recent information
- the user asks for sources
- the answer may vary by location, language, or market
- the user asks about rankings, prices, competitors, products, or news

Do not search for stable programming concepts, definitions, or tasks that can be answered directly.

When using search:
- prefer concise summaries
- mention the most relevant source URLs
- do not claim more certainty than the search results support
"""

這樣 Agent 會更像一個有判斷力的研究助手,而不是一個停不下來的瀏覽器分身。

Step 6:控制 Google 搜尋參數

對真實應用來說,只有 query 不夠。

同一個關鍵字,在不同國家、語言、裝置和城市下,搜尋結果可能完全不同。這對 SEO、市場研究、產品監控和本地分析都很重要。

例如:

result = search_tool.invoke({
    "query": "best running shoes",
    "engine": "google",
    "params": {
        "gl": "gb",
        "hl": "en",
        "location": "London, England, United Kingdom",
        "device": "mobile"
    }
})

這會比一個泛泛的全球查詢更有用。

如果你在做 SEO,應該把 glhllocationdevice 和採集時間一起保存。否則後續很難解釋排名變化。

Step 7:控制返回內容大小

Agent 不需要閱讀所有內容。

多數情況下,下面幾個欄位就夠了:

title
link
snippet
position
source / domain
date, if available

你可以在 prompt 裡提醒模型:

system_prompt = """
When reading search results, focus on:
- title
- link
- snippet
- ranking position
- visible date if present

Ignore duplicated results, navigation pages, and thin pages unless they are directly relevant.
"""

這件事看起來小,但很有用。

乾淨輸入可以降低 token 消耗,減少雜訊,也能讓 Agent 的回答更穩。

SDK 還是 MCP?

如果你只是做一個簡單的 LangChain 應用,SDK 是最快的:

pip install
→ import tool
→ add it to agent
→ run

適合:

  • 本地原型

  • 單一 LangChain App

  • 內部測試工具

  • 快速驗證搜尋能力

MCP 更適合搜尋工具需要被多個 Agent 或多個系統共用的情況。

場景

建議方式

本地原型

SDK

單一 LangChain 應用

SDK

多個 Agent 共用搜尋能力

MCP

生產環境工具服務

MCP

團隊級 Agent Stack

MCP

不要因為 MCP 聽起來更架構化,就一開始硬上 MCP。

先用 SDK 跑通需求。當你真的需要工具復用、部署隔離、權限管理和團隊協作時,再切到 MCP。

實例:SERP Research Agent

下面是一個偏 SEO 和內容研究的 Agent prompt。

from langchain.agents import create_agent
from langchain_talordata import TalorSerpTool

search_tool = TalorSerpTool.from_env()

agent = create_agent(
    model="openai:gpt-4o-mini",
    tools=[search_tool],
    system_prompt="""
You are an SEO research assistant.

When the user gives you a keyword:
1. Search Google with the provided market settings.
2. Identify the common search intent.
3. Summarize the top result patterns.
4. Extract useful content angles.
5. Suggest 5 article sections.
6. Include source URLs from the search results.

Keep the answer practical. Do not over-explain.
"""
)

response = agent.invoke({
    "messages": [
        {
            "role": "user",
            "content": (
                "Research the keyword 'best project management software' "
                "for the US English desktop SERP."
            )
        }
    ]
})

print(response)

這類場景非常適合加搜尋。

因為 Agent 不需要猜誰排在前面,它可以直接看即時 SERP。

常見問題

Tool 沒有執行

如果模型產生了 tool call,但工具沒有真正跑起來,檢查你的 agent runner。

有些寫法只是讓模型「知道可以調用工具」,但工具執行仍然需要 agent workflow 或你自己調用 tool.invoke(...)

結果太寬泛

加入更明確的地區、語言和裝置參數:

{
    "gl": "us",
    "hl": "en",
    "location": "New York, United States",
    "device": "desktop"
}

Agent 搜尋太頻繁

調整 system prompt。明確告訴它什麼時候應該搜尋,什麼時候應該直接回答。

回答太泛

讓 Agent 引用具體搜尋結果,例如 result title、URL、日期、排名位置和共同模式。泛泛的 prompt 會生出一鍋泛泛的湯。

最後

為 LangChain Agent 加入 Google Search,不只是加一個工具。

它改變的是 Agent 能取得的資訊邊界。

沒有搜尋時,Agent 主要依賴模型記憶。

有搜尋後,它可以先確認最新資訊,再回答問題。

最簡單的第一版可以這樣做:

Install langchain-talordata
Set TALOR_API_KEY
Create TalorSerpTool
Test direct Google search
Attach the tool to a LangChain agent
Control when the agent searches

跑通後,你可以把同一套模式擴展到新聞監控、SEO 研究、本地排名檢查、競品分析、產品追蹤或即時 RAG。

先從小流程開始。讓搜尋結果保持乾淨。讓 Agent 說清楚它找到什麼。

這樣已經能讓 LangChain Agent 實用很多。

立即开展您的数据业务

加入全球最强大的代理网络

免费试用