Веб-поиск
Поиск в интернете через server tool gorouter:web_search и web_search_options.
Веб-поиск даёт модели актуальные данные из интернета: модель сама решает, когда искать, получает результаты и отвечает со ссылками на источники.
Рабочий пример
Chat Completions:
{
"model": "openai/gpt-5-mini",
"messages": [{"role": "user", "content": "Какие новости о выходе Next.js были на этой неделе?"}],
"max_tokens": 2048,
"tools": [
{
"type": "gorouter:web_search",
"parameters": {"engine": "exa", "max_results": 5, "max_uses": 3, "max_total_results": 10}
}
]
}Responses:
{
"model": "openai/gpt-5-mini",
"input": "Какие новости о выходе Next.js были на этой неделе?",
"max_output_tokens": 2048,
"tools": [
{
"type": "gorouter:web_search",
"parameters": {"engine": "exa", "max_results": 5, "max_uses": 3, "max_total_results": 10}
}
]
}Отправляйте объекты на /api/v1/chat/completions и /api/v1/responses соответственно. Инструмент можно сочетать с обычными function tools в том же массиве tools.
Поиск работает только с моделями, у которых опубликован тариф «за поиск». Он показан на странице модели в каталоге.
Важные параметры
Поля объекта parameters:
max_total_results— обязательный предел числа результатов за весь запрос.max_results— число результатов за один поиск. По умолчанию 5, максимум 10.max_uses— сколько поисков модель может выполнить. Максимум 30. Если не указан, берётся top-levelmax_tool_calls(по умолчанию 30, максимум 30). Чем меньше значение, тем меньше резерв.engine— поисковый движок:auto(по умолчанию),native,exa,firecrawl,parallel,perplexity. Приautoиnativeиспользуется встроенный поиск провайдера, если endpoint его поддерживает, иначе Exa. Ограничения для встроенного поиска описаны в разделе «Стоимость».search_context_size— объём контекста из результатов:low,medium,high.max_characters— предел символов в каждом результате, не больше 100000. Учитывается движкамиexa,parallelиperplexity; встроенный поиск провайдера (auto,native) его игнорирует.allowed_domains,excluded_domains— массивы строк с доменами, которыми нужно ограничить или исключить поиск.user_location— объект с примерным местоположением пользователя для локальных результатов.
Другие ключи в parameters и в самом объекте инструмента отклоняются.
Альтернатива: web_search_options
Модели с параметром web_search_options в supported_parameters принимают упрощённый формат:
{
"model": "openai/gpt-4o-search-preview",
"messages": [{"role": "user", "content": "Курс биткоина сегодня"}],
"web_search_options": {"search_context_size": "low"}
}search_context_size обязателен: low, medium или high. Другие ключи не принимаются. Такой запрос считается одной операцией поиска.
Ответ
- Источники приходят в аннотациях типа
url_citation: вmessage.annotationsдля Chat Completions и вannotationsтекстовой части ответа для Responses. Каждая аннотация содержитurl,titleи позицию цитаты в тексте. usage.server_tool_use_details.web_search_requests— сколько поисков фактически выполнено.usage.cost— итоговая цена запроса в ₽, включая поиски и все раунды модели.
Число поисков и их стоимость по каждому запросу видны в логах аккаунта: значок поиска в строке запроса и строка «Из них веб-поиск» в деталях.
Стоимость
Каждый поиск оплачивается по тарифу «за поиск» выбранной модели, а токены — по обычным тарифам модели. После каждого результата поиска модель может вызываться снова, поэтому на старте резерв рассчитывается по максимуму:
- число поисков (
max_usesилиmax_tool_calls, плюс одна операция дляweb_search_options) × тариф «за поиск»; - до N+1 раундов модели, где N — максимальное число поисков; в каждом раунде резервируется вход и лимит ответа.
Число поисков ограничивается так:
exa,firecrawl,parallel,perplexity, а такжеautoиnativeна endpoint без встроенного поиска (тогда поиск идёт через Exa): берётся меньшее изmax_usesиmax_tool_calls.autoиnativeна endpoint со встроенным поиском провайдера. OpenRouter передаётmax_usesтолько Anthropic, остальные провайдеры (OpenAI, Google, xAI, Perplexity) его игнорируют и не публикуют предел числа поисков. Поэтому такой endpoint принимается только для Anthropic и только с явнымmax_uses. Для остальных провайдеров запрос на этот endpoint отклоняется сbilling_unbounded. Если у модели есть endpoint без встроенного поиска, запрос уходит туда.
Чтобы поиск работал с любой моделью, укажите engine: "exa" (или другой движок OpenRouter) и max_uses.
Объём входа в раунде зависит от движка. Для exa, parallel и perplexity с указанным max_characters он считается по реальному пределу: исходный запрос, ответы предыдущих раундов и все результаты поиска (max_total_results × max_characters). Тариф поиска для этих движков берётся не ниже опубликованной цены OpenRouter за запрос. Для встроенного поиска провайдера объём результатов ничем не ограничен, поэтому каждый раунд резервируется с полным контекстом модели. У моделей с контекстом около 1 млн токенов это сотни рублей даже для одного поиска.
Резерв может заметно превышать итоговую цену. Списывается фактическая стоимость из usage.cost, остаток резерва освобождается. Чтобы уменьшить резерв, используйте engine: "exa" с max_characters, небольшие max_uses и max_total_results и явный лимит ответа.
{
"type": "gorouter:web_search",
"parameters": {"engine": "exa", "max_results": 3, "max_uses": 2, "max_total_results": 6, "max_characters": 1500}
}Такие же параметры использует веб-чат GoRouter; число поисков за ответ (от 1 до 5) настраивается в меню поиска, там же показан резерв до отправки.
Ошибки и ограничения
Неподдерживаемые варианты отклоняются до отправки провайдеру с кодом billing_unbounded. Сообщение начинается с «Нельзя безопасно ограничить стоимость запроса по данным поставщика» и содержит причину. Так отклоняются:
- устаревший плагин
plugins: [{"id": "web"}]— используйтеgorouter:web_search; - суффикс модели
:online; parameters.x_searchи другие ключи, не перечисленные выше;- другие server tools, кроме
gorouter:web_search, в том числе вtool_choice; max_resultsбольше 10,max_usesилиmax_tool_callsбольше 30,max_charactersбольше 100000;- endpoint модели без опубликованного тарифа
web_search; engineautoилиnative(в том числе безengine), если подходящие endpoint модели используют встроенный поиск провайдера, кроме Anthropic с явнымmax_uses, или не публикуют список встроенных инструментов.
Веб-поиск нельзя совмещать с audio output. Виртуальная модель gorouter/free веб-поиск не поддерживает. Если модель не поддерживает web_search_options, запрос вернёт unsupported_parameter.