无需更换工具即可切换模型,智能体循环中的网络并行搜索,网页抓取,从网络搜索插件迁移。
推出 openrouter:web_search 和 openrouter:web_fetch 这两个新工具,任何模型在请求期间均可调用。当模型决定使用其中某个工具时,OpenRouter 会在服务端执行该工具,并将结果返回给模型,无需任何客户端实现。
- 网络搜索:一个用于智能体搜索的工具,每次请求可执行 0 到 N 次,让模型自行选择查询内容和时机。
- 网页抓取:一个用于从任意 URL 检索完整页面内容的工具。通常用于获取搜索过程中发现的页面。
现在即可在聊天室中点击工具图标进行尝试,并阅读文档了解 API 详情。
无需更换工具即可切换模型
每个模型提供商都有自己内置的网络搜索工具,且模式各不相同。切换模型或提供商后,您将不得不重写定义、配置和解析搜索结果的方式。此外,您也无法保证能获得相同的行为,如果您需要严格强制屏蔽域名等功能,这可能会带来问题。
这些新的服务端工具为您提供了一种统一的方式来启用搜索和抓取功能。只需指定一次 `{"type": "openrouter:web_search"}`,工具定义、调用方式和结果格式在所有支持工具调用的模型中都保持一致。如果您还希望获得相同的搜索行为,可以指定 Exa 或 Parallel 等提供商,这样无论请求路由到 GPT-5.5、Claude 还是 Kimi,返回给模型的结果都是一致的。
{
"model": "openai/gpt-5.5",
"messages": [{ "role": "user", "content": "What happened in tech news today?" }],
"tools": [
{ "type": "openrouter:web_search" },
{ "type": "openrouter:web_fetch" }
]
}
网络搜索
网络搜索支持四种引擎:
| 引擎 | 工作原理 | 定价 |
|---|---|---|
| 自动(默认) | 如果提供商支持,则使用其原生搜索,否则使用 Exa | 视情况而定 |
| 原生 | 提供商内置的搜索功能(OpenAI、Anthropic、Google、xAI、Perplexity) | 提供商定价 |
| Exa | 将搜索传递给 Exa,并从您的 OpenRouter 信用额度中扣费 | 每次请求 0.005 美元。包含最多 10 条结果,超出部分每条结果加收 0.001 美元。 |
| Parallel | 将搜索传递给 Parallel,并从您的 OpenRouter 信用额度中扣费 | 每次请求 0.005 美元。包含最多 10 条结果,超出部分每条结果加收 0.001 美元。 |
每个引擎都有不同的优势。原生搜索与提供商的模型紧密集成。Exa 和 Parallel 增加了可配置的结果上下文大小(search_context_size),原生引擎会忽略此参数。大多数引擎支持域名过滤(allowed_domains, excluded_domains)。
您可以在聊天室界面或通过 API 进行配置:
{
"type": "openrouter:web_search",
"parameters": {
"engine": "exa",
"max_results": 5,
"search_context_size": "high",
"allowed_domains": ["arxiv.org", "nature.com"]
}
}
智能体循环中的并行搜索
当模型需要跨来源比较信息时,它可以在单个请求中触发多次搜索。像“比较排名前三的云 GPU 提供商的价格”这样的问题可能会触发三次独立的搜索,每次使用不同的查询,然后模型再综合生成答案。
使用 max_total_results 来限制请求中所有搜索的累计结果总数。这可以保持成本和上下文用量的可预测性:
{
"type": "openrouter:web_search",
"parameters": {
"max_results": 5,
"max_total_results": 15
}
}
一旦达到上限,模型会收到一条提示已达到限制的消息,而不会继续运行另一次搜索。
网页抓取
网页抓取功能允许模型从 URL 检索完整页面内容,并支持五个引擎。
| 引擎 | 工作原理 | 定价 |
|---|---|---|
| 自动(默认) | 如果支持则使用原生引擎,否则使用 Exa | 视情况而定 |
| 原生 | 提供商内置的抓取功能 | 提供商定价 |
| OpenRouter | OpenRouter 直接进行 HTTP 抓取 | 免费 |
| Exa | 内容提取和干净的 Markdown 输出 | 每次抓取 $0.001 |
| Parallel | 通过 Parallel 的 extract API 进行高质量内容提取 | 每次抓取 $0.001 |
将引擎指定为 Exa、Parallel 或 OpenRouter 可确保在所有模型上获得一致的抓取行为,包括能够使用 allowed_domains 和 blocked_domains 限制模型可以抓取的 URL。原生提供商的抓取能力各不相同,因此如果您需要这些参数在不同模型间得到遵守,请选择这些引擎之一。
使用 max_content_tokens 来限制模型接收的内容量(对于会占用上下文窗口的大页面很有用):
{
"type": "openrouter:web_fetch",
"parameters": {
"engine": "openrouter",
"max_content_tokens": 50000,
"allowed_domains": ["docs.example.com", "api.example.com"],
"blocked_domains": ["internal.example.com"]
}
}
从网页搜索插件迁移
在此之前,模型只能通过网页搜索插件进行搜索,无论模型实际需要什么,每个请求都只执行一次搜索。模型无法决定何时搜索、搜索什么内容,甚至是否进行搜索。
要迁移,请在请求体中将插件替换为工具:
之前(插件):
"plugins": [{ "id": "web" }] 之后(服务器工具):
`"tools": [{ "type": "openrouter:web_search" }]` 服务端工具让模型自行决定何时以及以何种频率进行搜索。一个注意事项是:服务端工具要求模型支持工具调用。如果你当前使用的模型不支持工具,则需要切换至支持工具的模型,或继续使用插件。
我们已创建了一份包含完整细节的迁移指南。