OpenRouter 平台功能
OpenRouter 平台功能
Web Search
7 分钟阅读
Web 搜索(Web Search)
让任意模型都能获取实时网络信息
测试版(Beta)
服务端工具目前处于测试阶段。API 与行为可能会变更。
openrouter:web_search 服务端工具让 OpenRouter 上的任意模型都能获取实时网络信息。当模型判断需要最新信息时,会带着搜索查询调用该工具。OpenRouter 执行搜索并将结果返回给模型,供其生成有据可依、带引用的回复。
工作原理
- 在
tools数组中加入{ "type": "openrouter:web_search" }。 - 模型根据用户的提示词决定是否需要网页搜索,并生成搜索查询。
- OpenRouter 使用配置的引擎执行搜索(默认为
auto:若可用则使用模型服务提供商的原生搜索,否则回退到 Exa)。 - 搜索结果(URL、标题和内容片段)返回给模型。
- 模型将结果综合到回复中。如有需要,它可能在同一次请求中多次搜索。
快速开始
配置
Web 搜索工具接受可选的 parameters,用于自定义搜索行为:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
engine | string | auto | 使用的搜索引擎:auto、native、exa、firecrawl、parallel 或 perplexity |
mode | string | 引擎默认值 | 引擎特定的搜索模式。Exa:instant、fast、auto、deep-lite、deep 或 deep-reasoning。Parallel:turbo、basic 或 advanced。其他引擎会忽略此参数。 |
max_results | integer | 5 | 每次搜索调用返回的最大结果数(1–25;Perplexity 为 1–20)。适用于 Exa、Firecrawl、Parallel 和 Perplexity 引擎;使用模型服务提供商的原生搜索时会被忽略 |
max_uses | integer | — | 模型在单次请求中最多可执行的搜索次数。达到上限后,后续搜索调用会返回错误结果而非真正执行。使用模型服务提供商的原生搜索时,仅会转发给 Anthropic(作为 max_uses);其他原生搜索服务提供商会忽略此参数 |
max_total_results | integer | — | 单次请求中所有搜索调用的结果总数上限。适用于控制智能体循环中的费用和上下文大小 |
search_context_size | string | — | 检索多少上下文:low、medium 或 high。对 Exa 而言,会固定每条结果的字符上限(5K/15K/30K);省略时,Exa 会自适应选择(每条结果约 2–4K)。对 Parallel 而言,控制所有结果的总字符数(默认为 medium)。对 Perplexity 而言,直接映射到 Search API 的原生 search_context_size 参数。使用模型服务提供商的原生搜索以及 Firecrawl 时会被忽略。若同时设置 max_characters,则以 max_characters 为准 |
max_characters | integer | — | 每条结果内容的精确最大字符数(1–100,000)。适用于 Exa、Parallel 和 Perplexity 引擎;使用模型服务提供商的原生搜索以及 Firecrawl 时会被忽略。对 Exa 而言,限制每条结果的高亮摘录内容。对 Parallel 而言,限制每条结果的摘录内容(省略时默认为 1,500)。对 Perplexity 而言,会通过 max_tokens_per_page 转换为 Token 预算,再按精确字符上限裁剪。若同时设置 max_characters 和 search_context_size,以 max_characters 为准 |
user_location | object | — | 用于地理位置偏向的大致用户位置。目前仅模型服务提供商的原生搜索支持;Exa、Firecrawl、Parallel 和 Perplexity 会忽略此参数(见下文) |
allowed_domains | string[] | — | 将结果限制在这些域名内。Exa、Firecrawl、Parallel、Perplexity 以及大多数原生服务提供商支持(见域名过滤) |
excluded_domains | string[] | — | 排除来自这些域名的结果。Exa、Firecrawl、Parallel、Perplexity 以及部分原生服务提供商支持(见域名过滤) |
用户位置
传入大致的用户位置,使搜索结果偏向该地理区域:
user_location 内的所有字段均为可选。
原生搜索服务提供商
当 engine 为 "auto"(默认)或 "native" 时,OpenRouter 会为受支持的模型使用服务提供商内置的搜索。以下模型服务提供商提供原生网页搜索:
- OpenAI — GPT-4.1、GPT-4.1 Mini、GPT-4.1 Nano、GPT-5 及之后的版本、o3、o3 Pro、o4-mini
- Anthropic — Claude 3.5 Haiku、Claude 3.7 Sonnet、Claude 4 及之后的版本(所有 Opus/Sonnet 变体)
- Google — Gemini 3 Flash、Gemini 3 Pro、Gemini 3.1 Flash/Lite、Gemini 3.5 Flash
- SpaceXAI — Grok 4 及之后的版本(同时包含网页搜索和 X 搜索)
- Perplexity — 所有 Perplexity 模型(搜索是其 API 的核心能力)
较旧的 OpenAI 模型——包括 GPT-4o、GPT-4o Mini 和 GPT-4 Turbo——不支持原生网页搜索。若对这些模型设置 engine: "native",服务端工具会回退到 Exa 搜索。使用 engine: "auto"(或省略该字段)可获得等效行为。
你可以在对应的模型页面查看特定模型是否支持原生搜索——留意 “Web Search” 能力徽章。对于没有原生搜索的模型,将 engine 设为其他受支持的选项(Exa、Firecrawl、Parallel 或 Perplexity)——或保持 "auto" 以默认使用 Exa。
引擎选择
Web 搜索服务端工具支持多种搜索引擎:
auto(默认):若模型服务提供商支持原生搜索则使用原生搜索,否则回退到 Exanative:优先使用服务提供商内置的网页搜索;若模型不支持原生搜索则回退到 Exaexa:使用 Exa 的搜索 API,结合关键词搜索与基于嵌入的搜索。返回 Exa 高亮摘录(highlights)——从各页面中抽取与搜索查询最相关的片段——而不是截断后的整页文本。详见下文 Exa 一节。firecrawl:使用 Firecrawl 的搜索 API(自带密钥,BYOK)parallel:使用 Parallel 的搜索 APIperplexity:使用 Perplexity Search API,返回带排名的网页结果,并支持域名过滤、上下文大小控制和max_characters
引擎能力
| 功能 | Exa | Firecrawl | Parallel | Perplexity | 原生 |
|---|---|---|---|---|---|
| 域名过滤 | 是 | 是 | 是 | 是*** | 因服务提供商而异 |
| 上下文大小控制 | 是* | 否 | 是** | 是 | 否 |
| API 密钥 | 服务端 | 自带密钥(BYOK,你的密钥) | 服务端 | 服务端 | 由服务提供商处理 |
* Exa:上限按每条结果计算
** Parallel:上限为所有结果的合计
*** Perplexity:allowed_domains 与 excluded_domains 互斥——同时提供时,以 allowed_domains 为准
Exa
OpenRouter 会为每条结果请求 Exa 高亮摘录(highlights),而不是 text 内容选项。高亮摘录是直接从页面抽取、并由 Exa 判定为与搜索查询最相关的片段,对于智能体网页工具而言,通常能以更少的 Token 提供更高质量的上下文,优于截断后的整页文本。
Exa 的 mode 控制搜索延迟与深度。默认仍为 auto:
| 模式 | 大致延迟 | 请求费用 |
|---|---|---|
instant | ~250 ms | $0.007 |
fast | ~450 ms | $0.007 |
auto(默认) | ~1 秒 | $0.007 |
deep-lite | ~4 秒 | $0.012 |
deep | ~4–15 秒 | $0.012 |
deep-reasoning | ~12–40 秒 | $0.015 |
默认情况下,Exa 会按查询和文档自适应选择高亮摘录长度——通常每条结果约 2,000–4,000 个字符。你可以通过两种方式控制每条结果的字符预算:
通过 search_context_size 使用粗粒度预设 — 映射到 Exa 的 contents.highlights.maxCharacters:
low— 每条结果 5,000 个字符medium— 每条结果 15,000 个字符high— 每条结果 30,000 个字符
通过 max_characters 指定精确值 — 传入任意整数(1–100,000)以设置精确的每条结果内容预算。Exa、Parallel 和 Perplexity 均支持。若同时设置 max_characters 和 search_context_size,以 max_characters 为准。
若既未设置 max_characters 也未设置 search_context_size,OpenRouter 会让 Exa 自适应选择高亮摘录长度,而 Parallel 使用每条结果 1,500 个字符的默认值。所选片段会随每条结果返回给模型,并通过 url_citation 注解呈现给 API 调用方。在同一条结果内,来自页面不同位置的片段会用 Exa 的 [...] 标记分隔,因此 url_citation 注解的 content 字段可能如下所示:
Firecrawl(自带密钥,BYOK)
Firecrawl 使用你自己的 API 密钥。设置步骤:
- 前往 OpenRouter 插件设置,将网页搜索引擎选为 Firecrawl
- 接受 Firecrawl 服务条款——这会创建一个与你的邮箱关联的 Firecrawl 账户
- 账户初始赠送 10,000 免费额度(额度在 3 个月后过期)
Firecrawl 搜索直接消耗你的 Firecrawl 额度——OpenRouter 不额外收费。每次搜索按每 10 条结果消耗 2 额度,外加每条抓取结果 5 额度(1 次基础抓取 + 4 次高亮摘录提取)。例如,返回 5 条结果的搜索会消耗 27 个 Firecrawl 额度(2 次搜索 + 5×5 次抓取)。详见 Firecrawl 定价。
Firecrawl 支持域名过滤(allowed_domains / excluded_domains),但二者互斥——不能在同一次请求中同时使用。
Parallel
Parallel 支持域名过滤和上下文大小控制(search_context_size)。设置 mode 以选择服务提供商模式;OpenRouter 会保留现有的 turbo 默认值并显式发送。
| 模式 | 延迟 | 请求费用 | 语言支持 |
|---|---|---|---|
turbo(默认) | ~200 ms | 每 1,000 次请求 $1 | 英语和日语 |
basic | ~1 秒 | 每 1,000 次请求 $5 | 广泛的语言支持 |
advanced | ~3 秒 | 每 1,000 次请求 $5 | 广泛的语言支持 |
每种模式最多包含 10 条结果。额外结果按每 1,000 条 $1 计费。
Perplexity
Perplexity 返回带排名的网页结果(标题、URL、摘要片段),不进行 LLM 综合。它支持域名过滤(allowed_domains / excluded_domains,互斥)、search_context_size 和 max_characters。使用 OpenRouter 额度,每次请求 $0.005。
域名过滤
使用 allowed_domains 和 excluded_domains 限制搜索结果中出现的域名:
| 引擎 | allowed_domains | excluded_domains | 说明 |
|---|---|---|---|
| Exa | 是 | 是 | 可以同时使用 |
| Parallel | 是 | 是 | 互斥 |
| Firecrawl | 是 | 是 | 互斥 |
| Perplexity | 是 | 是 | 互斥(同时提供时,以 allowed_domains 为准) |
| 原生(Anthropic) | 是 | 是 | 互斥 |
| 原生(OpenAI) | 是 | 否 | excluded_domains 会被静默忽略 |
| 原生(Google) | 否 | 否 | 不支持。使用 engine: "auto" 时,若设置了过滤器会回退到 Exa。使用 engine: "native" 时返回 400 错误 |
| 原生(SpaceXAI) | 是 | 是 | 互斥 |
控制结果总数
当模型在单次请求中多次搜索时,使用 max_total_results 限制累计结果数:
达到上限后,后续搜索调用会向模型返回一条提示已达上限的消息,而不是再执行一次搜索。这有助于控制智能体循环中的费用和上下文窗口占用。
限制搜索次数
要硬性限制模型在单次请求中最多可执行多少次搜索,在工具的 parameters 中设置 max_uses(与 Anthropic 原生网页搜索的 max_uses 对齐):
达到上限后,后续搜索调用会向模型返回一条提示已达上限的消息,而不是再执行一次搜索。使用模型服务提供商的原生搜索时,该值仅会转发给 Anthropic(作为其原生 max_uses);其他原生搜索服务提供商没有等效参数,会忽略它。
每次搜索还会消耗请求整体服务端工具预算中的一步,该预算由所有服务端工具共享。设置顶层 max_tool_calls 请求字段(与 messages 和 tools 同级,不是工具参数)来限制该预算:
省略时,预算默认为 30 步,这也是最大值。若需更精细的控制(消费上限、自定义停止条件),使用 stop_server_tools_when,它会完全覆盖 max_tool_calls。各服务端工具的预算如何工作,详见工具调用限制。
也可用于 Responses API
Web 搜索服务端工具也可用于 Responses API:
用量追踪
网页搜索用量会在响应的 usage 对象中报告:
web_search_requests 字段统计模型在该请求期间发起的搜索查询总数。
定价
| 引擎 | 定价 |
|---|---|
| Exa | Instant/Fast/Auto:每次请求 $0.007;Deep Lite/Deep:$0.012;Deep Reasoning:$0.015。包含最多 10 条结果,之后每条额外结果 $0.001 |
| Parallel | Turbo:$0.001/次请求;Basic 或 Advanced:$0.005/次请求。包含最多 10 条结果,之后每条额外结果 $0.001 |
| Perplexity | 使用 OpenRouter 额度,每次请求 $0.005 |
| Firecrawl | 直接消耗你的 Firecrawl 额度——OpenRouter 不收费。每 10 条结果 2 额度(搜索)+ 每条结果 5 额度(1 次抓取 + 4 次高亮摘录)。详见 Firecrawl 定价 |
| 原生 | 由服务提供商透传(OpenAI、Anthropic、Google、Perplexity、SpaceXAI) |
以上费用均叠加在处理搜索结果内容所产生的标准 LLM Token 费用之上。
从 Web 搜索插件迁移
Web 搜索插件(plugins: [{ id: "web" }])和 :online 变体 已弃用。请改用 openrouter:web_search 服务端工具。
主要区别:
| Web 搜索插件(已弃用) | Web 搜索服务端工具 | |
|---|---|---|
| 如何启用 | plugins: [{ id: "web" }] | tools: [{ type: "openrouter:web_search" }] |
| 由谁决定是否搜索 | 始终搜索一次 | 由模型决定何时/是否搜索 |
| 调用频率 | 每个请求一次 | 每个请求 0 到 N 次 |
| 引擎选项 | Native、Exa、Firecrawl、Parallel、Perplexity | Auto、Native、Exa、Firecrawl、Parallel、Perplexity |
| 域名过滤 | 是(Exa、Parallel、Perplexity、部分原生) | 是(Exa、Parallel、Perplexity、大多数原生) |
| 上下文大小控制 | 通过 web_search_options | 通过 search_context_size 参数 |
| 结果总数上限 | 否 | 是(max_total_results) |
| 定价 | 因引擎而异 | 因引擎而异(费率相同) |