如何用 SERP API 为 LangChain Agent 加入实时 Google 搜索能力

了解如何使用 SERP API 为 LangChain Agent 接入实时 Google 搜索,让 Agent 可以获取最新搜索结果、整理来源,并基于实时数据回答问题。

talor ai
Last updated on
4 min read

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 实用很多。

Scale Your Data
Operations Today.

Join the world's most robust proxy network.

Start Free Trial