如何将 Search API 接入 LangChain,实现实时网页搜索

了解如何将 Search API 接入 LangChain,让 Agent 可以获取实时网页结果、整理最新来源,并回答依赖时效信息的问题。

如何将 Search API 接入 LangChain,实现实时网页搜索
Marcus Bennett
最后更新于
5 分钟阅读

没有 web search 的 LangChain Agent 依然有用,但它有一个明显盲点:它无法可靠知道模型训练截止时间之后发生了什么。

如果只是解释 Python list 或改写段落,这没问题。

但如果用户问的是近期产品更新、当前搜索排名、价格页、新闻、市场信号或竞品变化,就不能只靠模型记忆。

比较实际的做法是:给 Agent 一个搜索工具。

Search API 可以把 LangChain Agent 从“依赖模型记忆的助手”变成“可以查询实时信息的研究助手”。Agent 可以判断什么时候需要搜索,获取最新网页结果,读取结构化摘要,再基于当前上下文回答。

快速回答

要把 Search API 接入 LangChain,可以先把 Search API 请求封装成 LangChain tool,再把 tool 传给 Agent,并在 system prompt 中说清楚什么时候需要搜索。

典型流程是:

用户问题
→ LangChain Agent 判断是否需要搜索
→ Search API 返回最新网页结果
→ Agent 读取结构化搜索数据
→ Agent 基于实时上下文和来源信息回答

为什么 LangChain 需要 Search API?

LLM 擅长推理、摘要和写作,但它不是实时网页索引。

当答案依赖当前数据时,Search API 可以让 LangChain 应用获取最新外部信息。

常见场景包括:

  • 实时研究助手

  • SEO 和排名追踪 Agent

  • 竞品监控

  • 市场情报 workflow

  • 新闻和趋势摘要

  • 产品与价格研究

  • 需要实时网页上下文的 RAG 系统

  • 内容大纲生成

重点不只是“能搜索网页”。

重点是搜索结果要以 Agent 能读懂的方式返回。

对 Agent 来说,结构化 JSON 通常比原始 HTML 更好用。相比把整页搜索结果塞进模型,把 title、snippet、position、source domain 等字段传给 LLM 会更干净。

Search API vs 自建爬虫

你可以自己写爬虫,但它很容易变成基础设施工程。

方式

更适合

主要问题

自建爬虫

一次性实验

解析、封锁、CAPTCHA、版面变化

浏览器自动化

复杂页面操作

慢、成本高、难扩展

Search API / SERP API

搜索结果、排名、摘要、来源

需要选对 API 和参数

对 LangChain Agent 来说,Search API 通常更干净。

Agent 不需要一整页渲染后的搜索页。它通常只需要一组简洁搜索结果:

[
  {
    "title": "Example result title",
    "url": "result_page",
    "snippet": "Short summary from the search result",
    "position": 1
  }
]

这种数据更容易摘要,更省 token,也更方便后续存储和分析。

Step 1:安装依赖

你可以自己写 LangChain tool,也可以使用已有套件。

以 Talordata 为例,可以安装 LangChain 相关套件:

pip install langchain langchain-openai langchain-talordata

模型供应商可以替换成你自己在 LangChain 中使用的模型。

Step 2:设置 API keys

不要把凭证写死在代码里,建议使用环境变量。

import os

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

正式部署时,应该把 key 放在部署平台的 secret settings 里,而不是放在源码中。

API key 泄露不是小 bug,是一条拿着信用卡的小龙。

Step 3:先直接测试搜索工具

不要一开始就接 Agent。

先确保 Search API 本身能正常返回结果。

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 不会凭空修好它。先测工具,再交给 Agent。

常见搜索参数包括:

参数

含义

query

搜索查询

engine

搜索引擎,例如 Google 或 Bing

gl

国家或市场

hl

搜索语言

location

城市或地区

device

Desktop 或 mobile

num

返回结果数量

no_cache

视设置而定,用于请求 fresh results

Step 4:把 Search API tool 加入 LangChain Agent

搜索工具能返回结果后,就可以传给 LangChain 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 the search tool when the question depends on recent, external,
location-specific, or source-dependent information.

When you search:
- focus on title, URL, snippet, source, and ranking position
- summarize the findings clearly
- include source names when they help verification
- do not invent facts that are not supported by the results

Do not search for stable definitions or simple programming explanations.
"""
)

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

print(response)

这里的核心是:当问题依赖最新信息时,模型不应该只靠记忆回答。

Step 5:告诉 Agent 什么时候应该搜索

一个支持搜索的 Agent,不应该每次都搜索。

这是地板上的小陷阱。

如果每个问题都搜索,Agent 会变慢、请求变多,还可能把不必要的网页噪声带进答案。

适合搜索的问题:

What changed in this product category this month?
Which pages rank for this keyword today?
Find recent pricing pages for CRM tools.
What are the latest news results about this company?

不太需要搜索的问题:

What is a Python dictionary?
Rewrite this paragraph.
Explain what an API is.
Summarize the text I provided.

可以写一段搜索策略:

SEARCH_POLICY = """
Use web search only when:
- the answer may have changed recently
- the user asks for current sources
- the question involves rankings, prices, news, competitors, products, or policies
- the result may vary by country, city, language, or device

Do not search when:
- the answer is stable general knowledge
- the user only asks to rewrite, translate, or summarize provided text
- the task can be completed from the conversation alone
"""

这会让 Agent 更可控,不会像一个停不下来的搜索小风车。

Step 6:不要只传 keyword,要使用搜索参数

实时网页搜索里,query 只是其中一部分。

搜索结果会受市场、语言、设备和地区影响。

示例:

result = search_tool.invoke({
    "query": "best project management software",
    "engine": "google",
    "params": {
        "gl": "us",
        "hl": "en",
        "location": "New York, United States",
        "device": "desktop",
        "num": 10
    }
})

如果做 SEO、本地搜索或市场研究,请保存搜索上下文:

字段

为什么重要

query

实际搜索查询

engine

Google、Bing、DuckDuckGo 等

gl

国家或市场

hl

搜索语言

location

城市或地区

device

Desktop 或 mobile

collected_at

用于历史比较的时间戳

没有这些上下文,后续很难验证答案。

Step 7:控制搜索上下文大小

不要把所有内容都塞进 LLM。

多数 Agent 只需要这些字段:

title
url
snippet
position
source/domain
date, if available

可以加一个压缩层:

def compact_results(raw_results, limit=5):
    organic = (
        raw_results.get("organic_results")
        or raw_results.get("organic")
        or raw_results.get("results")
        or []
    )

    compact = []

    for item in organic[:limit]:
        compact.append({
            "title": item.get("title", ""),
            "url": item.get("link") or item.get("url", ""),
            "snippet": item.get("snippet") or item.get("description", ""),
            "position": item.get("position") or item.get("rank"),
        })

    return compact

这样 Agent 不用在数据泥潭里游泳,回答会更稳。

SDK 还是 MCP?

把搜索接入 LangChain,常见有两种方式。

方式

适合场景

SDK integration

本地原型、单 Agent 应用、快速开发

MCP integration

生产系统、多 Agent 设置、共享工具服务

验证流程时先用 SDK。

当工具复用、部署隔离和团队级使用变重要时,再考虑 MCP。

简单判断:

一个应用、一个团队、快速接入 → SDK
多个 Agent、共享工具服务、生产治理 → MCP

不要一开始就搞架构表演。先把搜索工具跑通。

示例:实时研究 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 real-time research assistant.

When the user asks about a recent or source-dependent topic:
1. Search the web.
2. Read the top relevant results.
3. Identify the main facts, patterns, and disagreements.
4. Mention useful source names.
5. Clearly say when the search results are incomplete.

Keep the answer concise and practical.
"""
)

response = agent.invoke({
    "messages": [
        {
            "role": "user",
            "content": "Find recent discussions about AI search agents and summarize the main trends."
        }
    ]
})

print(response)

同一套模式也能改造成 SEO 内容简报、市场研究、本地排名追踪、产品监控和 RAG source discovery。

Best practices

第一版保持简单。
一个搜索工具,一个 Agent,一个清楚 prompt。

只在需要时搜索。
工具有价值,是因为 Agent 能选择它,而不是每一轮都必须使用它。

Agent workflow 优先用结构化结果。
Raw HTML 适合自定义解析,但 JSON 通常更适合 LLM 上下文。

保存查询上下文。
Query、engine、country、language、location、device 和 timestamp 都应该保留。

使用搜索结果时,让 Agent 提供来源名称。
实时回答最好可以验证。

处理失败情况。
Search API 可能返回空结果、timeout 或 rate limit。Agent 应该温和失败,而不是编答案。

FAQ

LangChain 中的 Search API 是什么?

在 LangChain 里,Search API 通常会被封装成 tool。Agent 可以在需要外部网页信息时调用它,再把返回结果作为回答上下文。

为什么 LangChain Agent 需要实时 web search?

模型可能不知道最近事件、当前排名、实时价格或新发布页面。实时 web search 可以让 Agent 在回答前获取最新外部信息。

SERP API 和 Search API 一样吗?

SERP API 是 Search API 的一种,重点是搜索引擎结果页。它通常返回 title、snippet、ranking、ads、local results、news、images 或其他搜索结果模块。免费测试SERP API>>

应该使用 JSON 还是 HTML 搜索结果?

对 LangChain Agent 来说,JSON 通常更合适,因为它结构化、易摘要。HTML 适合需要原始 SERP 或自定义解析的场景。

可以用于 SEO workflow 吗?

可以。同一套模式可以支持排名追踪、关键词研究、内容大纲、竞品监控、本地 SEO 检查和 SERP feature 分析。

Agent 应该每个问题都搜索吗?

不应该。搜索应该用在近期、依赖来源、依赖市场或依赖地区的问题上。稳定定义和简单写作任务通常不需要搜索。

立即开展您的数据业务

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

免费试用