主题
Brave Search 工具
一套用于查询 Brave Search API 的工具——涵盖网页、新闻、图片和视频搜索。
Brave Search 工具
描述
CrewAI 提供一系列 Brave Search 工具,每个工具针对特定的 Brave Search API 端点。 你无需使用单个大而全的工具,而是可以精确选择与智能体所需结果类型相匹配的工具:
| 工具 | 端点 | 用例 |
|---|---|---|
BraveWebSearchTool | Web Search | 通用网页结果、摘要和 URL |
BraveNewsSearchTool | News Search | 最新新闻文章和标题 |
BraveImageSearchTool | Image Search | 带尺寸和源 URL 的图片结果 |
BraveVideoSearchTool | Video Search | 来自全网各处的视频结果 |
BraveLocalPOIsTool | Local POIs | 查找兴趣点(例如餐厅) |
BraveLocalPOIsDescriptionTool | Local POIs | 检索 AI 生成的地点描述 |
BraveLLMContextTool | LLM Context | 为 AI 智能体、LLM grounding 和 RAG 流水线优化的预提取网页内容。 |
所有工具共享一个公共基类(BraveSearchToolBase),它提供一致的行为——限流、对 429 响应自动重试、请求头和参数校验,以及可选的文件保存。
NOTE
较旧的 BraveSearchTool 类仍可用于向后兼容,但它被视为 legacy,未来不会获得同等程度的关注。我们建议迁移到上面列出的特定工具,它们提供更丰富的配置和更专注的接口。
NOTE
尽管许多工具(例如 BraveWebSearchTool、BraveNewsSearchTool、BraveImageSearchTool 和 BraveVideoSearchTool)可与免费的 Brave Search API 订阅/套餐一起使用,但某些参数(例如 enable_snippets)和工具(例如 BraveLocalPOIsTool 和 BraveLocalPOIsDescriptionTool)需要付费套餐。请查阅你的订阅套餐能力以了解详情。
安装
shell
pip install 'crewai[tools]'开始使用
- 安装包 — 确认
crewai[tools]已安装在你的 Python 环境中。 - 获取 API 密钥 — 在 api-dashboard.search.brave.com/login 注册以生成密钥。
- 设置环境变量 — 将密钥存储为
BRAVE_API_KEY,或通过api_key参数直接传入。
快速示例
网页搜索
python
from crewai_tools import BraveWebSearchTool
tool = BraveWebSearchTool()
results = tool.run(q="CrewAI agent framework")
print(results)新闻搜索
python
from crewai_tools import BraveNewsSearchTool
tool = BraveNewsSearchTool()
results = tool.run(q="latest AI breakthroughs")
print(results)图片搜索
python
from crewai_tools import BraveImageSearchTool
tool = BraveImageSearchTool()
results = tool.run(q="northern lights photography")
print(results)视频搜索
python
from crewai_tools import BraveVideoSearchTool
tool = BraveVideoSearchTool()
results = tool.run(q="how to build AI agents")
print(results)地点 POI 描述
python
from crewai_tools import (
BraveWebSearchTool,
BraveLocalPOIsDescriptionTool,
)
web_search = BraveWebSearchTool(raw=True)
poi_details = BraveLocalPOIsDescriptionTool()
results = web_search.run(q="italian restaurants in pensacola, florida")
if "locations" in results:
location_ids = [ loc["id"] for loc in results["locations"]["results"] ]
if location_ids:
descriptions = poi_details.run(ids=location_ids)
print(descriptions)通用构造函数参数
每个 Brave Search 工具在初始化时都接受以下参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
api_key | str | None | None | Brave API 密钥。回退到 BRAVE_API_KEY 环境变量。 |
headers | dict | None | None | 随每个请求发送的额外 HTTP 请求头(例如 api-version、地理位置请求头)。 |
requests_per_second | float | 1.0 | 最大请求速率。工具将在调用之间休眠,以保持在此限制内。 |
save_file | bool | False | 当为 True 时,每个响应都会写入带时间戳的 .txt 文件。 |
raw | bool | False | 当为 True 时,返回完整的 API JSON 响应,不做任何精简。 |
timeout | int | 30 | HTTP 请求超时时间(秒)。 |
country | str | None | None | 用于地理定位的旧版简写(例如 "US")。建议直接使用 country 查询参数。 |
n_results | int | 10 | 结果数量的旧版简写。建议直接使用 count 查询参数。 |
WARNING
country 和 n_results 构造函数参数用于向后兼容。当调用时未提供对应的查询参数(country、count)时,它们会作为默认值应用。对于新代码,我们建议改为直接作为查询参数传入 country 和 count。
查询参数
每个工具在发送请求前都会根据 Pydantic schema 校验其查询参数。 参数因端点略有不同——以下是其中最常用参数的摘要:
BraveWebSearchTool
| 参数 | 描述 |
|---|---|
q | (必填) 搜索查询字符串(最多 400 个字符)。 |
country | 用于地理定位的两字母国家/地区代码(例如 "US")。 |
search_lang | 用于结果的两字母语言代码(例如 "en")。 |
count | 返回的最大结果数(1–20)。 |
offset | 跳过前 N 页结果(0–9)。 |
safesearch | 内容过滤器:"off"、"moderate" 或 "strict"。 |
freshness | 时效过滤器:"pd"(过去一天)、"pw"(过去一周)、"pm"(过去一个月)、"py"(过去一年),或类似 "2025-01-01to2025-06-01" 的日期范围。 |
extra_snippets | 每个结果最多包含 5 个额外文本摘要。 |
goggles | 用于自定义重排序的 Brave Goggles URL 和/或来源。 |
完整的参数和请求头参考,请参阅 Brave Web Search API 文档。
BraveNewsSearchTool
| 参数 | 描述 |
|---|---|
q | (必填) 搜索查询字符串(最多 400 个字符)。 |
country | 用于地理定位的两字母国家/地区代码。 |
search_lang | 用于结果的两字母语言代码。 |
count | 返回的最大结果数(1–50)。 |
offset | 跳过前 N 页结果(0–9)。 |
safesearch | 内容过滤器:"off"、"moderate" 或 "strict"。 |
freshness | 时效过滤器(与网页搜索相同的选项)。 |
goggles | 用于自定义重排序的 Brave Goggles URL 和/或来源。 |
完整的参数和请求头参考,请参阅 Brave News Search API 文档。
BraveImageSearchTool
| 参数 | 描述 |
|---|---|
q | (必填) 搜索查询字符串(最多 400 个字符)。 |
country | 用于地理定位的两字母国家/地区代码。 |
search_lang | 用于结果的两字母语言代码。 |
count | 返回的最大结果数(1–200)。 |
safesearch | 内容过滤器:"off" 或 "strict"。 |
spellcheck | 尝试纠正查询中的拼写错误。 |
完整的参数和请求头参考,请参阅 Brave Image Search API 文档。
BraveVideoSearchTool
| 参数 | 描述 |
|---|---|
q | (必填) 搜索查询字符串(最多 400 个字符)。 |
country | 用于地理定位的两字母国家/地区代码。 |
search_lang | 用于结果的两字母语言代码。 |
count | 返回的最大结果数(1–50)。 |
offset | 跳过前 N 页结果(0–9)。 |
safesearch | 内容过滤器:"off"、"moderate" 或 "strict"。 |
freshness | 时效过滤器(与网页搜索相同的选项)。 |
完整的参数和请求头参考,请参阅 Brave Video Search API 文档。
BraveLocalPOIsTool
| 参数 | 描述 |
|---|---|
ids | (必填) 所需位置的唯一标识符列表。 |
search_lang | 用于结果的两字母语言代码。 |
完整的参数和请求头参考,请参阅 Brave Local POIs API 文档。
BraveLocalPOIsDescriptionTool
| 参数 | 描述 |
|---|---|
ids | (必填) 所需位置的唯一标识符列表。 |
完整的参数和请求头参考,请参阅 Brave POI 描述 API 文档。
自定义请求头
所有工具都支持自定义 HTTP 请求头。例如,网页搜索工具接受地理位置请求头以提供位置感知结果:
python
from crewai_tools import BraveWebSearchTool
tool = BraveWebSearchTool(
headers={
"x-loc-lat": "37.7749",
"x-loc-long": "-122.4194",
"x-loc-city": "San Francisco",
"x-loc-state": "CA",
"x-loc-country": "US",
}
)
results = tool.run(q="best coffee shops nearby")你也可以在初始化后使用 set_headers() 方法更新请求头:
python
tool.set_headers({"api-version": "2025-01-01"})原始模式
默认情况下,每个工具会将 API 响应精简为简洁的结果列表。如果你需要完整、未经处理的 API 响应,请启用原始模式:
python
from crewai_tools import BraveWebSearchTool
tool = BraveWebSearchTool(raw=True)
full_response = tool.run(q="Brave Search API")智能体集成示例
以下是如何为 CrewAI 智能体配备多个 Brave Search 工具:
python
from crewai import Agent
from crewai.project import agent
from crewai_tools import BraveWebSearchTool, BraveNewsSearchTool
web_search = BraveWebSearchTool()
news_search = BraveNewsSearchTool()
@agent
def researcher(self) -> Agent:
return Agent(
config=self.agents_config["researcher"],
tools=[web_search, news_search],
)高级示例
组合多个参数进行定向搜索:
python
from crewai_tools import BraveWebSearchTool
tool = BraveWebSearchTool(
requests_per_second=0.5, # conservative rate limit
save_file=True,
)
results = tool.run(
q="artificial intelligence news",
country="US",
search_lang="en",
count=5,
freshness="pm", # past month only
extra_snippets=True,
)
print(results)从 BraveSearchTool 迁移(旧版)
如果你当前正在使用 BraveSearchTool,切换到新工具很简单:
python
# Before (legacy)
from crewai_tools import BraveSearchTool
tool = BraveSearchTool(country="US", n_results=5, save_file=True)
results = tool.run(search_query="AI agents")
# After (recommended)
from crewai_tools import BraveWebSearchTool
tool = BraveWebSearchTool(save_file=True)
results = tool.run(q="AI agents", country="US", count=5)主要区别:
- 导入:使用
BraveWebSearchTool(或新闻/图片/视频变体)而不是BraveSearchTool。 - 查询参数:使用
q而不是search_query。(为方便起见,仍接受search_query和query,但首选参数是q。) - 结果数量:在初始化时作为查询参数传入
count,而不是n_results。 - 国家/地区:作为查询参数传入
country,而不是在初始化时传入。 - API 密钥:现在除了
BRAVE_API_KEY环境变量外,还可以直接通过api_key=传入。 - 限流:可通过
requests_per_second配置,并在收到429响应时自动重试。
结论
Brave Search 工具套件为你的 CrewAI 智能体提供灵活、针对特定端点的 Brave Search API 访问能力。无论你需要网页、突发新闻、图片还是视频,都有一个经过参数校验并内置容错能力的专用工具。选择适合你用例的工具,并参阅 Brave Search API 文档 了解可用参数和响应格式的完整详情。