这是什么
WebSearch 是一个内置工具(用户可见名为 Web Search),
由模型自动调用,不是需要用户敲的命令。当会话需要知识截止日期之后的信息时,
模型会自行发起一次搜索,把关键词交给工具,再把结果整合进回答。
工具的输入只有搜索词与可选的域名过滤;真正的「去哪儿搜、怎么搜」由一个适配器层决定。
工厂函数 createAdapter() 从五种后端中选出一个实现统一接口
WebSearchAdapter 的适配器,对上层完全透明:
| 后端 key | 实现方式 | 是否需要密钥 |
|---|---|---|
tavily(默认) |
POST 到 Tavily Search API,结果直接映射为标题 / URL / 摘要 | 否(走默认端点) |
api |
Anthropic 服务端 web_search_20250305 server tool,经二次 API 调用 |
沿用当前 API 凭证 |
bing |
抓取 Bing 搜索页 HTML,正则解析 b_algo 结果块 |
否 |
brave |
调用 Brave LLM Context API,把 grounding 载荷映射为结果 | 是(Brave API key) |
exa |
通过 MCP 协议调用 Exa 的 web_search_exa |
可选(配置 API key) |
该工具始终启用,没有 feature flag 门控;标记为只读(isReadOnly)且可并发
(isConcurrencySafe)。它在延迟工具列表里(shouldDefer),
需要时由模型按语义检索后加载。
前置条件
-
默认后端无需额外准备。 Tavily 适配器直接使用项目默认端点
https://tavily.qianshou-dashi.win/search,不需要任何 API key。 -
只有 Brave 后端强制要求密钥。 未提供时会抛出
BraveSearchAdapter requires BRAVE_SEARCH_API_KEY or BRAVE_API_KEY。 - api 后端依赖当前 Anthropic API 凭证与官方端点,用于服务端搜索;第三方代理端点下 该后端可能不可用,此时应改用其他后端。
-
网络出口需能访问所选后端的主机(
tavily.qianshou-dashi.win、www.bing.com、api.search.brave.com、mcp.exa.ai)。
启用与选择后端
工具本身开箱即用,通常无需任何操作 —— 模型会在需要时自动调用。若想更换搜索后端,
用 /web-tools 面板或环境变量即可。
-
确认模型可自动调用
无需配置。
WebSearch随内置工具集加载,模型在需要最新信息时会自行发起搜索。 你可直接在提问里要求「联网查一下」来引导。 -
用
/web-tools选择搜索后端在会话里执行
/web-tools,切到 Search 标签页,用方向键选择后按空格选定。 面板可配置 Tavily / Brave / Exa,Bing 与 Anthropic API 无需额外配置。# 打开 Web Tools 面板(Search / Fetch 两个标签页) /web-tools # ↑↓ 导航 · Space 选定 · Enter 进入配置 · Esc 关闭 -
(可选)用环境变量强制指定后端
WEB_SEARCH_ADAPTER优先级最高,覆盖设置面板的选择。取值api/bing/brave/exa/tavily。# 临时强制使用 Bing 后端启动 WEB_SEARCH_ADAPTER=bing qsdashi -
(仅 Brave)提供 API key
在
/web-tools的 Brave 配置项填入,或设置环境变量BRAVE_SEARCH_API_KEY/BRAVE_API_KEY(设置面板的值优先于环境变量)。
配置
后端选择与端点 / 密钥写入用户级 settings.json,跨会话生效。优先级为:
WEB_SEARCH_ADAPTER 环境变量 > webSearchAdapter 设置 >
默认 tavily。
| 设置项 | 类型 | 说明 |
|---|---|---|
webSearchAdapter |
"tavily" | "api" | "bing" | "brave" | "exa" |
Web 搜索后端;缺省为 tavily |
tavilyEndpointUrl |
string |
自定义 Tavily 端点,默认 https://tavily.qianshou-dashi.win
|
braveApiKey |
string | Brave 搜索 API key,使用 brave 后端时必填 |
exaApiKey |
string | Exa AI API key,可选 |
exaEndpointUrl |
string | Exa MCP 端点,默认 https://mcp.exa.ai/mcp |
相关环境变量:
| 变量 | 作用 |
|---|---|
WEB_SEARCH_ADAPTER |
显式指定搜索后端,优先级高于设置面板 |
BRAVE_SEARCH_API_KEY |
Brave API key(首选变量名) |
BRAVE_API_KEY |
Brave API key(备选变量名) |
Brave 适配器先读设置里的 braveApiKey,为空再依次读
BRAVE_SEARCH_API_KEY、BRAVE_API_KEY。Tavily 与 Exa 只从设置读取,
不识别环境变量。
常用命令与参数
WebSearch 由模型调用,没有对应的斜杠命令;与之相关的是用于配置后端的
/web-tools。
| 命令 | 行为 |
|---|---|
/web-tools |
打开 Web Tools 面板,选择并配置搜索 / 抓取后端 |
工具输入参数(模型自动填充):
| 参数 | 类型 | 说明 |
|---|---|---|
query |
string | 搜索关键词,最少 2 个字符 |
allowed_domains |
string[] | 域名白名单,只保留这些域名(含子域名)的结果 |
blocked_domains |
string[] | 域名黑名单,过滤掉这些域名的结果;与白名单不可同时使用 |
num_results |
number | 返回结果数量,默认 8 |
livecrawl |
"fallback" | "preferred" |
实时抓取模式,默认 "fallback"(Exa 后端使用) |
search_type |
"auto" | "fast" | "deep" |
搜索类型,默认 "auto"(Exa 后端使用) |
context_max_characters |
number | 为 LLM 优化的上下文字符上限,默认 10000(Exa 后端使用) |
过滤在拿到结果后于本地按主机名匹配,支持子域名;每个适配器各自实现该逻辑。
allowed_domains 与 blocked_domains 同时提供会被
validateInput 直接拒绝。
实战示例
让模型联网检索(无需命令,正常提问即可):
# 直接提问即可触发 WebSearch,模型会展示「Searching for ...」进度
<用户> 帮我查一下 React 19 的最新稳定版本,并给出来源
# 工具返回的是 markdown 链接列表,模型会在回答末尾附上 Sources 小节
切换到 Bing 后端(走本地 HTML 解析,不依赖 API key):
# 显式指定 Bing,适合第三方代理端点无法用 api 后端的场景
WEB_SEARCH_ADAPTER=bing qsdashi
使用 Exa 后端并自定义端点:
{
"webSearchAdapter": "exa",
"exaEndpointUrl": "https://mcp.exa.ai/mcp",
"exaApiKey": "exa-..."
}
常见问题排错
错误信息为
BraveSearchAdapter requires BRAVE_SEARCH_API_KEY or BRAVE_API_KEY。
在 /web-tools 的 Brave 配置里填入 key,或设置
BRAVE_SEARCH_API_KEY 环境变量。
工具会以 Error: Cannot specify both allowed_domains and blocked_domains in the same request
拒绝本次调用。这是工具层面的硬校验,二选一即可。
Bing 适配器依赖一组浏览器请求头来规避反爬的 JS 渲染空页。若目标网络被拦截或返回验证页, 可能解析不到结果。此时可切换到 Tavily(默认)或 Brave 后端。
api 后端使用 Anthropic 服务端 web_search_20250305 server tool,
仅在官方端点下工作。使用第三方代理 / 兼容层时应改用 Tavily、Bing 或 Exa 等本地后端。
WebSearch 默认需要授权(checkPermissions 返回 passthrough)。
在权限提示中选择允许,或把 WebSearch 规则加入本地设置以便长期放行。
适配器工厂会按选中的后端 key 缓存实例;当 WEB_SEARCH_ADAPTER 或设置项变化时,
会重建适配器,无需重启会话。