LangChain:网络检索器与集成

网络检索器适用于需要从网络上获取最新数据的场景。比如用户可能相要获取最新的热点信息,此时检索器可以直接从网络上进行检索,以便获得最新的信息。

主流的网络检索器

LangChain 生态里确实有不少专门的网络研究检索器,能帮你获取实时信息。主要有这几类:

  • Tavily:专为AI设计和优化的搜索引擎,结果干净,很适合做研究总结,可直接返回带引用的答案。
    • 用法:from langchain_community.tools.tavily_search import TavilySearchResults
  • Bright Data:提供强大的 SERP API(搜索结果页)。能高度自定义搜索(国家、语言等),并可抓取页面清洗后只给AI喂文本,节省Token。
    • 用法:from langchain_brightdata import BrightDataSERP
  • Parallel Web Tool:直接的网络研究工具,能接收研究目标和子查询,返回排名且压缩过的网页摘要。
    • 用法:from langchain_parallel_web import ParallelWebTool

完整使用示例

以下是三个主流网络研究检索器的完整使用示例。

Tavily专为AI应用设计,返回结构化、高信噪比的搜索结果。

安装与配置

1
2
pip install langchain-community tavily-python
export TAVILY_API_KEY="your-api-key"

基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from langchain_community.tools import TavilySearchResults

# 初始化工具
tool = TavilySearchResults(
max_results=5,
include_answer=True, # 包含AI生成的答案摘要
include_raw_content=True, # 包含原始网页内容
include_images=True, # 包含相关图片
# search_depth="advanced", # 高级搜索模式
# include_domains=["nature.com"], # 限定域名
# exclude_domains=["pinterest.com"] # 排除域名
)

# 直接调用
result = tool.invoke({"query": "2026年人工智能最新突破"})
print(result)

返回示例

1
2
3
4
5
{
"url": "https://example.com/ai-news",
"content": "2026年3月,研究人员发布了全新的多模态模型...",
"score": 0.995
}

Agent集成

1
2
3
4
5
6
7
8
9
10
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate

tools = [TavilySearchResults(max_results=3)]
llm = ChatOpenAI(model="gpt-4o")
agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools)

response = executor.invoke({"input": "今天有什么重要科技新闻?"})

Bright Data SERP

Bright Data提供强大的SERP API,支持多搜索引擎、地理定位和设备模拟。

安装与配置

1
2
pip install langchain-brightdata
export BRIGHT_DATA_API_KEY="your-api-key"

基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from langchain_brightdata import BrightDataSERP

# 初始化工具
serp_tool = BrightDataSERP(
bright_data_api_key="your-api-key", # 可省略,自动读环境变量
search_engine="google", # 支持 google/bing/duckduckgo/yandex
country="cn", # 双字母国家代码
language="zh", # 双字母语言代码
results_count=10,
parse_results=True, # 返回结构化JSON而非原始HTML
)

# 基础搜索
results = serp_tool.invoke("新能源汽车评测")

# 带参数的高级搜索
results = serp_tool.invoke({
"query": "best electric vehicles",
"country": "de", # 模拟从德国搜索
"language": "de", # 德语结果
"search_type": "shop", # 购物搜索结果
"device_type": "mobile", # 模拟移动设备
"results_count": 15,
})

清洗搜索结果(节省Token)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from bs4 import BeautifulSoup
from langchain_brightdata import BrightDataSERP
from langchain.tools import Tool

def get_cleaned_search_results(query):
serp_tool = BrightDataSERP(
bright_data_api_key="your-api-key",
parse_results=False, # 获取原始HTML
)
results = serp_tool.invoke({"query": query})
soup = BeautifulSoup(results, "html.parser")
# 只提取纯文本,保留换行结构
return soup.get_text(separator="\n")

# 包装为LangChain工具
cleaned_tool = Tool.from_function(
name="CleanWebSearch",
func=get_cleaned_search_results,
description="搜索网络并返回清洗后的文本内容"
)

Parallel将“搜索→爬取→提取”整合为一次API调用,直接返回LLM友好的压缩摘要。

安装与配置

1
2
pip install langchain-parallel
export PARALLEL_API_KEY="your-api-key"

基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from langchain_parallel import ParallelWebSearchTool

tool = ParallelWebSearchTool()

# 方式1:自然语言目标描述
result = tool.invoke({
"objective": "2026年量子计算领域的最新突破和商业应用"
})

# 方式2:指定搜索查询列表
result = tool.invoke({
"search_queries": [
"quantum computing breakthroughs 2026",
"IBM quantum roadmap",
"quantum supremacy latest news"
],
"max_results": 8
})

# 解析返回结果
import json
if isinstance(result, str):
result = json.loads(result)
print(result["results"][0]["title"])
print(result["results"][0]["excerpts"])

高级配置(域名过滤、缓存策略)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
result = tool.invoke({
"objective": "气候变化最新科学研究",
"max_results": 15,
"excerpts": {"max_chars_per_result": 2000}, # 每条摘要最大长度
"mode": "one-shot", # one-shot=全面 / agentic=节省Token
"source_policy": {
"include_domains": ["nature.com", "science.org", "ipcc.ch"],
"exclude_domains": ["reddit.com", "twitter.com", "medium.com"]
},
"fetch_policy": {
"max_age_seconds": 86400, # 缓存1天
"timeout_seconds": 60
},
"include_metadata": True # 返回搜索耗时等元数据
})

print(f"搜索耗时: {result['search_metadata']['search_duration_seconds']}秒")
print(f"返回结果数: {len(result['results'])}")

异步调用

1
2
3
4
5
6
7
8
9
10
import asyncio

async def async_search():
result = await tool.ainvoke({
"objective": "最新的AI芯片竞争动态",
"max_results": 10
})
return result

results = asyncio.run(async_search())

注意:以上示例中提到的 your-api-key 是指网检索器自己的API Key(是注册搜索服务获得的密钥,不是LLM大模型的API Key。

快速选型建议

场景 推荐工具 理由
通用问答、聊天机器人 Tavily 开箱即用,AI友好,
返回精准链接和带评分的结果
需要特定地区/语言/设备 Bright Data 强大的地理定位和设备模拟能力
需要深度网页内容 Parallel 自动提取关键摘要,支持域名白名单
成本敏感、Token有限 Parallel (agentic模式) 返回压缩摘要,大幅减少Token消耗

这些工具大多是 StructuredTool,通常需要注册 API Key 并设置环境变量,之后直接赋给 Agent 即可,Agent 会根据你的问题自动调用它们。

集成 Google 搜索 API 到 LangChain 有多种方式,下面介绍几种主流的实现方案。

集成Google搜索API

方案一:官方标准API

Google Custom Search API,这是 Google 官方提供的搜索 API,需要配置 API Key 和搜索引擎 ID。

前置准备

1
pip install google-api-python-client

配置步骤

  1. Google Cloud Console 创建项目,启用 Custom Search API
  2. 创建 API Key(Credentials → Create Credentials → API Key)
  3. Programmable Search Engine 创建搜索引擎:
    • 选择 Search the entire web
    • 获取 Search Engine ID (cx)

基础用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import os
from langchain_community.utilities import GoogleSearchAPIWrapper

# 设置环境变量
os.environ["GOOGLE_API_KEY"] = "your-api-key"
os.environ["GOOGLE_CSE_ID"] = "your-search-engine-id"

# 初始化搜索工具
search = GoogleSearchAPIWrapper(k=5) # k 是返回结果数量

# 执行搜索
results = search.run("人工智能最新进展")
print(results)

# 获取详细结果(含标题、链接、摘要)
detailed_results = search.results("人工智能最新进展", num_results=5)
for item in detailed_results:
print(f"标题: {item['title']}")
print(f"链接: {item['link']}")
print(f"摘要: {item['snippet']}")
print("---")

集成到Agent工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.tools import Tool

# 包装为 LangChain Tool
search_tool = Tool(
name="GoogleSearch",
func=search.run,
description="用于搜索实时信息的工具,可以查询最新新闻、事实等"
)

tools = [search_tool]
llm = ChatOpenAI(model="gpt-4o", temperature=0)

prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的助手,可以使用Google搜索获取实时信息。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])

agent = create_tool_calling_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

response = executor.invoke({"input": "今天有什么重大科技新闻?"})
print(response["output"])

方案二:通过Vertex AI调用

通过 Vertex AI 使用 Google Search Grounding。

如果使用的是 Google Cloud 的 Vertex AI 和 Gemini 模型,可以直接在模型层面启用 Google Search 能力,无需手动调用搜索工具。

安装与配置

1
pip install langchain-litellm google-cloud-aiplatform
1
2
3
4
5
6
7
8
9
10
import os
from langchain_litellm import ChatLiteLLM

# 设置 Google Cloud 凭据
os.environ["VERTEX_PROJECT"] = "your-project-id"
os.environ["VERTEX_LOCATION"] = "us-central1"
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/to/service-account.json"

# 初始化模型
llm = ChatLiteLLM(model="vertex_ai/gemini-2.5-flash", temperature=0)

启用 Google Search Grounding

1
2
3
4
5
6
7
8
9
10
11
12
13
# 批量调用:启用 Google Search
response = llm.invoke(
"今天比特币的价格是多少?",
tools=[{"googleSearch": {}}]
)

# 获取搜索结果中的引用来源
provider_fields = response.response_metadata.get("provider_specific_fields")
if provider_fields and len(provider_fields) > 0:
grounding_info = provider_fields[0]
print("引用来源:", grounding_info)

print("回答内容:", response.content)

流式调用

1
2
3
4
5
6
7
8
9
10
stream = llm.stream(
"最新的 iPhone 有什么新功能?",
tools=[{"googleSearch": {}}]
)

for chunk in stream:
print(chunk.content, end="", flush=True)
# 元数据会通过 additional_kwargs 返回
if "provider_specific_fields" in chunk.additional_kwargs:
print("\n[引用信息]:", chunk.additional_kwargs["provider_specific_fields"])

方案三:第三方搜索API服务

如果不想配置 Google Cloud 的复杂流程,可以使用第三方封装的 Google 搜索 API 服务。

Serper.dev

配置简单,低成本推荐

1
2
pip install langchain-community
export SERPER_API_KEY="your-serper-api-key" # 从 serper.dev 获取
1
2
3
4
5
6
7
8
9
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain.tools import Tool

search = GoogleSerperAPIWrapper(k=5)
result = search.run("Python 最新版本")
print(result)

# 作为工具使用
tools = load_tools(["google-serper"]) # 或直接导入 Tool

SearchAPI.io

1
2
pip install langchain-community
export SEARCHAPI_API_KEY="your-searchapi-key"
1
2
3
4
5
6
7
8
9
from langchain_community.utilities import SearchApiAPIWrapper

search = SearchApiAPIWrapper()
result = search.run("2026年世界杯赛程")
print(result)

# 作为工具加载
from langchain.agents import load_tools
tools = load_tools(["searchapi"])

方案对比与选择建议

方案对比

方案 优点 缺点 适用场景
Google Custom Search 官方稳定,免费额度(100次/天) 配置复杂,需要 CSE ID 中小规模应用
Vertex AI Grounding 原生集成,返回引用来源 需要 Google Cloud 账户,成本较高 企业级应用,需精准引用
Serper.dev 配置简单,返回知识图谱 付费服务(但便宜) 快速原型开发
SearchAPI.io 支持多搜索引擎 付费服务 需要多引擎切换

选择建议

  • 个人项目/学习:用 Serper.dev,配置最简单
  • 企业应用/需引用来源:用 Vertex AI Grounding,原生返回引用链接
  • 免费且官方:用 Google Custom Search,但配置稍复杂

如果有 Google Cloud 账户且需要引用来源,Vertex AI 方案最推荐;如果只是想快速跑通,Serper.dev 是性价比最高的选择。

集成百度搜索

主要有两种方案:直接调用百度AI搜索(千帆平台)或通过第三方 SERP API。后者可以接入百度,但通常需要付费。

方案一:使用百度AI搜索

使用百度AI搜索(千帆平台),这是最推荐的方式,稳定且拥有免费额度。

准备工作

  • 百度智能云千帆平台申请并获取 API Key
  • 安装依赖:pip install langchain langchain-openai requests

两种集成方式

方式A:模拟 OpenAI 格式直接调用
这种方式最简单,适用于快速测试。

1
2
3
4
5
6
7
8
9
10
11
from langchain_openai import ChatOpenAI

# 注意:base_url 指向百度AI搜索的专用端点
client = ChatOpenAI(
model="ernie-bot", # 或任意模型名称
api_key="你的API_KEY",
base_url="https://qianfan.baidubce.com/v2/ai_search"
)

response = client.invoke("今天北京天气怎么样?")
print(response.content)

方式B:封装为 LangChain 工具 (推荐)
这种方式功能更全,可自定义返回条数、时效性等参数,并能让 Agent 自动调用 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import requests
from langchain.tools import tool

BAIDU_API_KEY = "你的API_KEY"

@tool
def baidu_search_tool(query: str) -> str:
"""
使用百度搜索获取实时信息。当需要查询最新新闻、事件、数据时,使用此工具。
输入应为明确的搜索关键词。
"""
url = "https://qianfan.baidubce.com/v2/ai_search/web_search"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {BAIDU_API_KEY}"
}
# 构造请求体,可自定义 top_k 和时效性
data = {
"messages": [{"content": query, "role": "user"}],
"search_source": "baidu_search_v2",
"resource_type_filter": [{"type": "web", "top_k": 5}],
# "search_recency_filter": "month" # 可限制时间范围
}

try:
response = requests.post(url, json=data, headers=headers)
response.raise_for_status()
result = response.json()

# 格式化返回结果,便于大模型阅读
formatted = "【百度搜索结果】\n"
if "references" in result:
for i, ref in enumerate(result["references"][:5], 1):
title = ref.get("title", "无标题")
content = ref.get("content", "无摘要")
formatted += f"{i}. {title}\n{content}\n\n"
else:
formatted += "未找到相关信息。\n"
return formatted
except Exception as e:
return f"搜索失败: {e}"

调用示例

1
print(baidu_search_tool.invoke("LangChain 最新教程"))

集成到 Agent

将上面定义好的 baidu_search_tool 放进工具列表,Agent 就会根据你的问题自主决定是否需要搜索 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI

# 初始化大模型(可用国内模型替换)
llm = ChatOpenAI(
model="deepseek-chat", # 替换为你的模型
base_url="你的API地址",
api_key="你的KEY"
)

# 创建Agent,注入搜索工具
agent = create_agent(
model=llm,
tools=[baidu_search_tool],
system_prompt="你是一个助手,当需要最新信息时,请使用百度搜索工具。"
)

# 执行查询
result = agent.invoke({"messages": [{"role": "user", "content": "2026年有什么值得关注的新技术?"}]})
print(result["messages"][-1].content)

方案二:第三方SERP API集成

如果除了百度,还想接入 Google 等其他搜索引擎,可以考虑这种方式。

LangChain 官方文档推荐的 SearchApi 服务就支持百度搜索 。

1
2
3
4
5
6
# 注意:这是 Java 示例,Python 版可参考 searchapi 官方文档
# 核心逻辑是配置 engine("baidu") 和你的 API Key
SearchApiWebSearchEngine searchEngine = SearchApiWebSearchEngine.builder()
.apiKey("YOUR_SEARCHAPI_KEY")
.engine("baidu") # 指定使用百度
.build();

方案对比

方案 核心特点 免费额度 适用场景
百度AI搜索(千帆) 官方提供,稳定可靠,支持联网检索 每日100次 个人学习、原型验证、轻量级应用
第三方 SERP API 通过统一接口访问百度,配置灵活,但非官方渠道 通常无免费额度 需要同时集成多搜索引擎(如Google、Bing)

几点重要提示

  1. API Key 是关键:无论哪种方案,都需要先去对应平台申请。百度AI搜索的Key在百度智能云千帆平台获取 。
  2. 善用免费额度:百度AI搜索每日100次免费调用,足够个人开发和学习使用 。
  3. 优化搜索体验:在请求参数里,你可以用 search_recency_filter 筛选“近一天/周/月”的新闻,用 top_k 控制返回网页数量,让结果更精准 。

集成360搜索

360搜索并没有像百度那样提供公开的官方搜索API。但可以通过URL参数构造的方式调用360搜索接口,或申请加入360搜索“星火计划” 获得正式API权限。

方案一:通过URL参数调用360搜索

通过URL参数调用360搜索(无需API Key),360搜索的网页接口参数是 q(对应搜索关键词)。

基础搜索函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import codecs
# 尝试不同的编码处理方式
if sys.platform == 'win32':
import os
# 设置Windows终端编码为UTF-8
os.system('chcp 65001 > nul 2>&1')
# 重定向标准输出为UTF-8
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
import requests
from bs4 import BeautifulSoup
import time
from typing import List, Dict


def search_360(query: str, max_results: int = 10) -> List[Dict[str, str]]:
"""
通过360搜索获取搜索结果

Args:
query: 搜索关键词
max_results: 最大返回结果数

Returns:
包含标题、链接、摘要的搜索结果列表
"""
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Referer": "https://www.so.com/",
}

results = []

# 360搜索每页通常显示10条结果
for page in range(1, (max_results // 10) + 2):
params = {
"q": query,
"pn": page # 页码
}

try:
response = requests.get(
"https://www.so.com/s",
params=params,
headers=headers,
timeout=10
)
response.raise_for_status()

# 解析HTML
soup = BeautifulSoup(response.text, 'html.parser')

# 提取搜索结果(需要根据实际HTML结构调整选择器)
# 360搜索结果通常位于 .res-list 或 .result 类中
items = soup.select('.res-list .res-item, .result')

for item in items:
# 获取标题和链接
title_elem = item.select_one('h3 a, .title a')
if not title_elem:
continue

title = title_elem.get_text(strip=True)
link = title_elem.get('href', '')

# 获取摘要
summary_elem = item.select_one('.summary, .res-desc')
summary = summary_elem.get_text(strip=True) if summary_elem else ""

results.append({
"title": title,
"link": link,
"summary": summary
})

if len(results) >= max_results:
break

# 防止请求过快
time.sleep(1)

if len(results) >= max_results:
break

except Exception as e:
print(f"搜索出错: {e}")
continue

return results[:max_results]


if __name__ == "__main__":
# 测试
results = search_360("深圳明天天气怎么样?", max_results=5)
for i, r in enumerate(results, 1):
print(f"{i}. {r['title']}")
print(f" 链接: {r['link']}")
print(f" 摘要: {r['summary'][:200]}...\n")

输出结果:

1
2
3
1. 深圳天气预报_15天_45天天气查询_全国天气网
链接: http://tianqi.so.com/weather/101280601
摘要: 2026年1月31日 -深圳主要地区明天天气预报.深圳周边市县明天天气预报......

封装为LangChain工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from langchain.tools import tool
from typing import Optional, Type
from pydantic import BaseModel, Field

# 定义输入参数模型
class SearchInput(BaseModel):
query: str = Field(description="要搜索的关键词")
max_results: Optional[int] = Field(default=5, description="返回结果数量")

@tool(args_schema=SearchInput)
def search_360_tool(query: str, max_results: int = 5) -> str:
"""
使用360搜索引擎搜索网络信息。
当需要查询最新新闻、实时事件、网络信息时使用此工具。
"""
results = search_360(query, max_results)

if not results:
return "未找到相关搜索结果。"

formatted = "【360搜索结果】\n\n"
for i, item in enumerate(results, 1):
formatted += f"{i}. {item['title']}\n"
formatted += f" 链接: {item['link']}\n"
if item['summary']:
formatted += f" 摘要: {item['summary'][:200]}...\n"
formatted += "\n"

return formatted

集成到Agent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from langchain.agents import create_react_agent, AgentExecutor
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
import os

# 初始化大模型(可使用国内模型)
llm = ChatOpenAI(
model="gpt-4o-mini",
api_key=os.getenv("OPENAI_API_KEY"),
temperature=0
)

# 定义提示模板
prompt = PromptTemplate.from_template(
"""你是一个有用的助手,可以通过搜索获取实时信息。

你有以下工具可用:
{tools}

工具名称:{tool_names}

回答问题时,如果需要最新信息,请使用搜索工具。
请一步步思考,最终给出答案。

问题:{input}
{agent_scratchpad}"""
)

# 创建Agent
tools = [search_360_tool]
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# 执行查询
response = executor.invoke({
"input": "2026年最新发布的国产大模型有哪些?"
})
print(response["output"])

方案二:通过360“星火计划”获取官方API

根据官方信息,360搜索推出了“星火计划”,为开发者提供:

  • 每月100万次免费调用额度
  • 官方Python/Java/Go等语言SDK
  • 多模态搜索能力(文本/语音/图像混合输入)
  • 动态知识图谱支持

申请方式

  1. 访问360搜索开发者平台
  2. 注册账号并申请加入“星火计划”
  3. 审核通过后获取API Key和Secret
  4. 下载官方SDK进行集成

官方API调用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 注意:此为示例结构,实际使用时请参考官方SDK文档
import requests

class SoSearchAPI:
def __init__(self, api_key: str, secret: str):
self.api_key = api_key
self.secret = secret
self.base_url = "https://api.so.com/search" # 实际地址请查阅官方文档

def search(self, query: str, top_k: int = 10) -> dict:
"""执行搜索"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
data = {
"query": query,
"num": top_k,
"search_type": "web" # 网页搜索
}
response = requests.post(self.base_url, json=data, headers=headers)
return response.json()

# 使用
search_api = SoSearchAPI(api_key="your-api-key", secret="your-secret")
result = search_api.search("人工智能", top_k=5)
print(result)

两种方案对比

对比项 方案一(URL参数) 方案二(星火计划)
需要API Key
稳定性 依赖页面结构,可能失效 官方保障,稳定可靠
额度限制 无明确限制(但需注意爬取频率) 每月100万次免费
返回格式 需手动解析HTML 结构化JSON
合规性 需遵守robots.txt,可能违反服务条款 官方授权,完全合规
适用场景 个人学习、快速原型 生产环境、正式应用

中国提供搜索API服务厂商

国内直接提供自建索引的官方网络搜索API服务商主要有以下四家:

厂商 服务名称 免费额度 核心特点
百度智能云 百度搜索 1000次/日 支持网页/视频/图片/阿拉丁,
可指定站点搜索
阿里云 AI搜索开放平台 需开通付费 支持LLM Query改写,
三种搜索策略
(Normal/Fast/Full)
腾讯云 联网搜索API 需开通付费 基于搜狗搜索,
以JSON形式返回结果
360搜索 360搜索 需付费

百度搜索

百度是传统搜索引擎巨头,其API接口成熟度高,搜索结果最符合国内用户习惯。

  • API地址POST https://qianfan.baidubce.com/v2/ai_search/web_search
  • 认证方式:Bearer Token(API Key)
  • 支持功能
    • 多模态搜索:网页、视频、图片、阿拉丁卡片
    • 站点过滤:search_filter.match.site 指定搜索特定网站
    • 时效筛选:search_recency_filter 支持最近7天/30天/180天/365天
    • 屏蔽站点:block_websites 排除不想要的域名
  • Query长度限制:72个字符以内(一个汉字占两个字符)

集成示例(Python):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

url = "https://qianfan.baidubce.com/v2/ai_search/web_search"
headers = {
"Authorization": "Bearer your-api-key",
"Content-Type": "application/json"
}
data = {
"messages": [{"role": "user", "content": "人工智能最新进展"}],
"search_source": "baidu_search_v2",
"resource_type_filter": [{"type": "web", "top_k": 10}],
"search_recency_filter": "week" # 最近一周
}
response = requests.post(url, json=data, headers=headers)
print(response.json())

阿里云AI搜索平台

阿里云提供的联网搜索API与通义大模型深度集成,支持自动Query改写和结果过滤。

  • 服务IDops-web-search-001
  • API地址POST {host}/v3/openapi/workspaces/{workspace_name}/web-search/ops-web-search-001
  • 三种搜索模式
    • Normal模式:Query改写 → 联网搜索 → 向量过滤
    • Fast模式:Query改写 → 联网搜索(不过滤,响应更快)
    • Full模式:额外用大模型对结果进行评判和过滤
  • 可选参数
    • query_rewrite:是否启用LLM对query重写
    • content_type:返回snippet(摘要)或summary(总结)
    • history:支持多轮对话上下文

集成示例(Python):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

url = "https://xxxx-hangzhou.opensearch.aliyuncs.com/v3/openapi/workspaces/default/web-search/ops-web-search-001"
headers = {
"Authorization": "Bearer your-api-key",
"Content-Type": "application/json"
}
data = {
"query": "杭州今日天气",
"query_rewrite": True,
"top_k": 5,
"content_type": "snippet"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())

腾讯云联网搜索API

腾讯云的联网搜索服务基于搜狗搜索(腾讯旗下),以API接口形式提供网页搜索技术。

  • 服务来源:搜狗搜索
  • 返回格式:JSON格式的搜索结果列表
  • 使用限制
    • 需先开通服务并同意服务条款
    • 可通过API Explorer在线调试
  • 注意事项
    • 搜索结果不可缓存、存储或转售
    • 搜索结果的排序基于自动化算法
作者

光星

发布于

2026-03-28

更新于

2026-03-29

许可协议

评论