Веб-поиск
Доступ к актуальным данным из интернета: инструмент aitunnel:web_search даёт любой подходящей модели доступ к информации из сети в реальном времени.
Инструмент aitunnel:web_search даёт любой подходящей модели доступ к информации из сети в реальном времени. Модель сама решает, когда искать, формулирует запрос, получает результаты и отвечает со ссылками на источники.
Работает для Chat Completions (/chat/completions) и Responses API (/responses). Добавьте инструмент в массив tools — как обычный function-tool, но с префиксом aitunnel:.
Как это работает
- Вы передаёте в запросе
tools: [{ "type": "aitunnel:web_search" }](параметры необязательны). - По промпту пользователя модель решает, нужен ли поиск, и формирует поисковый запрос.
- AITUNNEL выполняет поиск выбранным движком (по умолчанию
auto: нативный поиск провайдера, если доступен, иначе Exa). - Результаты (URL, заголовки, фрагменты контента) возвращаются модели.
- Модель синтезирует ответ. В одном запросе она может искать несколько раз.
aitunnel:web_search можно комбинировать с вашими function-tools в том же массиве tools.
Быстрый старт
curl https://api.aitunnel.ru/v1/chat/completions \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Какие главные анонсы в мире ИИ были на этой неделе?"
}
],
"tools": [{"type": "aitunnel:web_search"}]
}'Конфигурация
Все поля в parameters необязательны. Без parameters поиск включается с настройками по умолчанию.
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"engine": "exa",
"max_results": 5,
"max_total_results": 20,
"search_context_size": "medium",
"allowed_domains": ["example.com"],
"excluded_domains": ["reddit.com"]
}
}
]
}| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
engine | string | auto | Движок: auto, native, exa, parallel, perplexity |
mode | string | по движку | Режим движка, от него зависит цена. Exa: instant, fast, auto (по умолчанию), deep-lite, deep, deep-reasoning. Parallel: turbo, fast, basic (по умолчанию), advanced. Другие движки его игнорируют |
max_results | integer | 5 | Максимум результатов за один поиск (1–25; для Perplexity — 1–20). Применяется к Exa, 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_context_size. Игнорируется при нативном поиске. Перекрывается max_characters, если заданы оба |
max_characters | integer | — | Точный максимум символов контента на результат (1–100 000). Применяется к Exa, Parallel и Perplexity; игнорируется при нативном поиске. У Parallel без этого поля — 1 500 символов на результат. Если заданы и max_characters, и search_context_size, приоритет у max_characters |
user_location | object | — | Приблизительная локация для гео-смещения результатов. Сейчас поддерживается только нативным поиском провайдера; для Exa, Parallel и Perplexity игнорируется |
allowed_domains | string[] | — | Ограничить результаты этими доменами (см. фильтрацию доменов) |
excluded_domains | string[] | — | Исключить результаты с этих доменов (см. фильтрацию доменов) |
x_search | object | — | Включить поиск по X (Twitter) у моделей Grok, с фильтрами. Работает только при нативном поиске Grok, остальные модели его игнорируют. См. поиск по X |
Локация пользователя
Передайте приблизительную локацию, чтобы сместить результаты географически:
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"user_location": {
"type": "approximate",
"city": "Москва",
"region": "Москва",
"country": "RU",
"timezone": "Europe/Moscow"
}
}
}
]
}Все поля внутри user_location необязательны.
Поиск по X (Grok)
Нативный поиск у Grok по умолчанию ищет только в вебе. Чтобы искать и по постам X, добавьте объект x_search — пустой объект включает поиск без фильтров:
{
"model": "grok-4.7",
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"engine": "native",
"x_search": {
"allowed_x_handles": ["OpenAI"],
"from_date": "2026-01-01"
}
}
}
]
}| Поле | Тип | Описание |
|---|---|---|
allowed_x_handles | string[] | Только посты этих аккаунтов (до 20). Нельзя вместе с excluded_x_handles |
excluded_x_handles | string[] | Исключить посты этих аккаунтов (до 20). Нельзя вместе с allowed_x_handles |
from_date | string | С какой даты (ISO 8601, например "2026-01-01") |
to_date | string | По какую дату (ISO 8601) |
enable_image_understanding | boolean | Анализировать картинки в постах |
enable_video_understanding | boolean | Анализировать видео в постах |
Поиск по X оплачивается отдельно от веб-поиска: за каждый найденный пост и профиль, а не за вызов. Поэтому сам он не включается — только через x_search.
Выбор движка
auto(по умолчанию) — нативный поиск, если провайдер модели его поддерживает, иначе Exanative— предпочитает встроенный поиск провайдера; если модель его не поддерживает, откатывается на Exaexa— поиск Exa: комбинация keyword- и embeddings-поиска. Возвращает highlights — релевантные выдержки со страницы, а не просто обрезанный текстparallel— поиск Parallelperplexity— Search API Perplexity: ранжированные результаты с фильтрами доменов и контролем размера контекста
Возможности движков
| Возможность | Exa | Parallel | Perplexity | Native |
|---|---|---|---|---|
| Фильтрация доменов | Да | Да* | Да* | Зависит от провайдера |
| Контроль размера контекста | Да (на результат) | Да (суммарно) | Да | Нет |
* У Parallel и Perplexity allowed_domains и excluded_domains взаимоисключающие. У Perplexity при одновременной передаче обоих приоритет у allowed_domains.
Exa
Режим — mode, по умолчанию auto:
mode | Задержка | Цена вызова |
|---|---|---|
instant | ~250 мс | ≈₽1.40 |
fast | ~450 мс | ≈₽1.40 |
auto | ~1 с | ≈₽1.40 |
deep-lite | ~4 с | ≈₽2.40 |
deep | ~4–15 с | ≈₽2.40 |
deep-reasoning | ~12–40 с | ≈₽3.00 |
Каждый режим включает до 10 результатов, дальше ≈₽0.20 за каждый.
По умолчанию Exa выбирает размер выдержки адаптивно — обычно ~2 000–4 000 символов на результат. Управление бюджетом:
search_context_size:low→ 5 000,medium→ 15 000,high→ 30 000 символов на результатmax_characters: точное значение 1–100 000; при одновременной передаче сsearch_context_sizeпобеждаетmax_characters
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"engine": "exa",
"max_characters": 2000
}
}
]
}Выдержки возвращаются модели и клиенту через аннотации url_citation. Фрагменты из разных частей одной страницы разделяются маркером [...]:
Первый фрагмент со страницы.
[...]
Второй фрагмент из другой части той же страницы.
[...]
Третий фрагмент.Parallel
Поддерживает фильтрацию доменов и search_context_size (лимит применяется суммарно ко всем результатам). Без max_characters и search_context_size — 1 500 символов на результат. Режим — mode, по умолчанию basic:
mode | Задержка | Цена вызова | Языки |
|---|---|---|---|
turbo | ~200 мс | ≈₽0.20 | английский и японский |
fast | ~550 мс | ≈₽0.20 | Parallel не указывает |
basic | ~1 с | ≈₽1.00 | широкая поддержка |
advanced | ~3 с | ≈₽1.00 | широкая поддержка |
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": { "engine": "parallel", "mode": "fast" }
}
]
}Каждый режим включает до 10 результатов, дальше ≈₽0.20 за каждый.
Для запросов на русском надёжнее basic или advanced: у turbo поддержка только английского и японского.
Perplexity
Возвращает ранжированные результаты (title, URL, snippet) без LLM-синтеза на стороне поисковика. Поддерживает фильтрацию доменов, search_context_size и max_characters. ≈₽1.00 за вызов.
Нативный поиск провайдеров
При engine: "auto" или "native" используется встроенный поиск провайдера, если модель его поддерживает. Нативный поиск есть у:
- OpenAI — GPT-4.1 / Mini / Nano, GPT-5 и новее, o3, o3 Pro
- Anthropic — Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4 и новее (Opus / Sonnet)
- Google — Gemini 3 Flash / Pro, Gemini 3.1 Flash / Lite, Gemini 3.5 Flash, Gemini 3.7 Flash, Gemini 3.8 Flash
- xAI — Grok 4 и новее (веб-поиск; поиск по X — только через
x_search) - Perplexity — все модели Perplexity (поиск — ядро их API)
Проверить поддержку веб-поиска у конкретной модели можно на странице модели. Для моделей без нативного поиска укажите exa, parallel или perplexity — либо оставьте auto.
Фильтрация доменов
Ограничьте или исключите домены в результатах:
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"allowed_domains": ["arxiv.org", "nature.com"],
"excluded_domains": ["reddit.com"]
}
}
]
}| Движок | allowed_domains | excluded_domains | Примечание |
|---|---|---|---|
| Exa | Да | Да | Можно вместе |
| Parallel | Да | Да | Взаимоисключающие |
| Perplexity | Да | Да | Взаимоисключающие; при обоих приоритет у allowed_domains |
| Native (Anthropic) | Да | Да | Взаимоисключающие |
| Native (OpenAI) | Да | Нет | excluded_domains игнорируется |
| Native (Google) | Нет | Нет | Не поддерживается. При engine: "auto" и фильтрах — откат на Exa; при engine: "native" — ошибка 400 |
| Native (xAI) | Да | Да | Взаимоисключающие |
Ограничение числа результатов
Если модель ищет несколько раз за один запрос, max_total_results ограничивает суммарное число результатов:
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"max_results": 5,
"max_total_results": 15
}
}
]
}После достижения лимита следующие вызовы поиска возвращают модели сообщение о лимите вместо нового поиска. Это помогает контролировать стоимость и размер контекста.
Ограничение числа поисков
Жёсткий лимит числа поисков за запрос — max_uses:
{
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"max_uses": 3
}
}
]
}После лимита дальнейшие поиски не выполняются. При нативном поиске значение пробрасывается только Anthropic; остальные нативные провайдеры его игнорируют.
Каждый поиск ещё тратит один шаг общего бюджета серверных инструментов запроса. Его задаёт поле max_tool_calls на верхнем уровне запроса, рядом с messages и tools, а не в parameters. По умолчанию и максимум — 30 шагов:
{
"model": "gpt-5.6-sol",
"messages": [{ "role": "user", "content": "..." }],
"tools": [{ "type": "aitunnel:web_search" }],
"max_tool_calls": 5
}Аннотации и цитаты
Результаты поиска стандартизированы AITUNNEL в соответствии со схемой аннотаций OpenAI Chat Completions:
{
"message": {
"role": "assistant",
"content": "Вот последние новости, которые я нашёл: ...",
"annotations": [
{
"type": "url_citation",
"url_citation": {
"url": "https://www.example.com/web-search-result",
"title": "Заголовок результата",
"content": "Фрагмент содержимого страницы",
"start_index": 100,
"end_index": 200
}
}
]
}
}url— источникtitle— заголовок (если доступен)content— выдержка со страницы (если доступна)start_index/end_index— позиция цитаты в тексте ответа
Responses API
Тот же инструмент aitunnel:web_search работает в /responses — передайте его в tools вместе с input:
curl https://api.aitunnel.ru/v1/responses \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.6-sol",
"input": "Какая сейчас цена Bitcoin?",
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {"max_results": 3}
}
]
}'Учёт использования
Число фактических поисков отражается в usage ответа:
{
"usage": {
"prompt_tokens": 105,
"completion_tokens": 250,
"total_tokens": 355,
"server_tool_use": {
"web_search_requests": 2
}
}
}Поле web_search_requests — сколько раз модель реально вызвала поиск в этом запросе (0–N). Тарификация идёт за фактические вызовы, а не за сам факт передачи aitunnel:web_search в tools.
Цены
Стоимость веб-поиска добавляется к обычной оплате токенов за обработку результатов. Тарификация идёт за фактические вызовы поиска (модель может искать 0–N раз за один запрос).
| Движок | Цена |
|---|---|
| Exa | ≈₽1.40 в режимах instant, fast и auto (по умолчанию), ≈₽2.40 в deep-lite и deep, ≈₽3.00 в deep-reasoning. До 10 результатов включено, дальше ≈₽0.20 за каждый |
| Parallel | ≈₽0.20 в режимах turbo и fast, ≈₽1.00 в basic (по умолчанию) и advanced. До 10 результатов включено, дальше ≈₽0.20 за каждый |
| Perplexity | ₽1.00 за запрос поиска |
| Native | По тарифу провайдера модели — смотрите страницу модели (поле стоимости веб-поиска) |
Все цены указаны за один вызов поиска и не включают стоимость токенов модели на чтение и синтез результатов.
Примеры
Размер контекста
{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Какие последние достижения в квантовых вычислениях?"
}
],
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"search_context_size": "high"
}
}
]
}Фильтры и лимиты
{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Свежие статьи про LLM с arXiv"
}
],
"tools": [
{
"type": "aitunnel:web_search",
"parameters": {
"engine": "exa",
"max_results": 5,
"max_uses": 3,
"allowed_domains": ["arxiv.org"],
"excluded_domains": ["reddit.com"]
}
}
]
}Вместе с function-tools
{
"model": "gpt-5.6-sol",
"messages": [
{
"role": "user",
"content": "Найди свежие новости про Apple и сравни с нашей внутренней котировкой"
}
],
"tools": [
{ "type": "aitunnel:web_search", "parameters": { "max_results": 3 } },
{
"type": "function",
"function": {
"name": "get_stock_price",
"description": "Текущая цена акции по тикеру",
"parameters": {
"type": "object",
"properties": {
"ticker": { "type": "string" }
},
"required": ["ticker"]
}
}
}
]
}См. также
- Вызов инструментов — пользовательские tools / functions
- Серверные инструменты — обзор инструментов, которые исполняет AITUNNEL
- Каталог моделей — поддержка веб-поиска и цены