У любой модели есть дата обрезки знаний. Спросите её о вчерашних новостях, курсе валюты или свежем релизе библиотеки, и она либо честно скажет «не знаю», либо начнёт выдумывать. Через API VEGA эту проблему решает встроенный веб-поиск: он работает для любой модели в каталоге и включается одним параметром в запросе.
VEGA полностью совместима с OpenRouter, поэтому вся механика та же самая. Разница одна: вместо https://openrouter.ai/api/v1 используется https://api.vega.chat/api/v1, а ключ создаётся в личном кабинете на api.vega.chat/keys. Все примеры ниже уже написаны под VEGA.
web в поле plugins: поиск выполняется один раз перед ответом модели, результаты подмешиваются в контекст.openrouter:web_search: модель сама решает, когда искать, и может сделать несколько запросов за один ответ.:online в имени модели: шорткат, эквивалент плагина web с настройками по умолчанию.Плюс у части провайдеров есть собственный поиск (OpenAI, Anthropic, Google, Perplexity, xAI). По умолчанию VEGA использует его там, где он есть, а для остальных моделей подключает Exa.
Минимальный рабочий запрос:
curl https://api.vega.chat/api/v1/chat/completions \
-H "Authorization: Bearer $VEGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.2",
"messages": [
{"role": "user", "content": "Что сегодня случилось в мире AI?"}
],
"plugins": [{"id": "web", "max_results": 5}]
}'Перед генерацией VEGA выполняет поиск, берёт до max_results результатов (по умолчанию 5) и добавляет выдержки из страниц в промпт. Модель отвечает с опорой на свежие данные и возвращает ссылки на источники в поле annotations:
{
"message": {
"role": "assistant",
"content": "Вот последние новости: ...",
"annotations": [
{
"type": "url_citation",
"url_citation": {
"url": "https://example.com/news",
"title": "Заголовок статьи",
"content": "Выдержка со страницы",
"start_index": 24,
"end_index": 118
}
}
]
}
}Плагин можно настроить:
"plugins": [{
"id": "web",
"engine": "exa",
"mode": "auto",
"max_results": 3,
"search_prompt": "Вот свежие результаты поиска:",
"include_domains": ["habr.com", "*.medium.com"],
"exclude_domains": ["reddit.com"]
}]Поле search_prompt определяет, как результаты подставляются в контекст. По умолчанию модель получает инструкцию цитировать источники markdown-ссылками с именем домена, например [nytimes.com](https://nytimes.com/page). Можно задать свой формат, если нужны цитаты в другом виде.
Вариант поинтереснее для агентов. Здесь поиск оформлен как обычный тулз, и модель сама решает, нужен ли он. Спросите «сколько будет 2+2» и поиска не будет. Спросите про погоду, и модель сходит в интернет, при необходимости несколько раз с уточняющими запросами.
flowchart LR
U["Ваш запрос"] --> M["Модель"]
M -->|нужны свежие данные| S["openrouter:web_search"]
S --> R["Результаты поиска"]
R --> M
M -->|может искать ещё| S
M --> A["Ответ с цитатами"]curl https://api.vega.chat/api/v1/chat/completions \
-H "Authorization: Bearer $VEGA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-5.2",
"messages": [
{"role": "user", "content": "Какие AI-модели вышли на этой неделе?"}
],
"tools": [{"type": "openrouter:web_search"}]
}'Тулз принимает параметры:
| Параметр | По умолчанию | Что делает |
|---|---|---|
engine | auto | Движок: auto, native, exa, firecrawl, parallel, perplexity |
mode | у движка | Режим поиска, зависит от движка (см. таблицу цен ниже) |
max_results | 5 | Результатов за один поиск, от 1 до 25 |
max_uses | без лимита | Максимум поисковых вызовов за запрос |
max_total_results | без лимита | Суммарный лимит результатов по всем поискам |
search_context_size | нет | low / medium / high: размер выдержек |
max_characters | нет | Точный лимит символов на результат, до 100 000 |
allowed_domains / excluded_domains | нет | Фильтр доменов |
user_location | нет | Город, регион, страна для локальных результатов |
Число поисков ограничивается двумя способами. max_uses ставит жёсткий лимит на вызовы этого тулза, а верхнеуровневый max_tool_calls ограничивает общий бюджет серверных тулзов на запрос (по умолчанию и максимум 30):
{
"tools": [{
"type": "openrouter:web_search",
"parameters": {"max_uses": 3, "max_total_results": 15}
}],
"max_tool_calls": 5
}Это удобно для агентных циклов: модель может уточнять запросы, но не уйдёт в бесконечный поиск и не съест бюджет.
Самый короткий вариант: допишите :online к имени модели.
{"model": "openai/gpt-5.2:online", "messages": [...]}Работает и с бесплатными моделями: openai/gpt-oss-20b:free:online. Учтите, что сам поиск платный даже у free-моделей, бесплатны только токены. Способ считается устаревшим в пользу server tool, но полностью работает и хорош для быстрых тестов.
За поиск отвечает параметр engine. Значение auto (по умолчанию) выбирает нативный поиск провайдера, если модель его поддерживает, иначе Exa.
| Движок | Цена | Что включено |
|---|---|---|
Exa instant / fast / auto | $0.007 за поиск | до 10 результатов |
Exa deep-lite / deep | $0.012 за поиск | до 10 результатов |
Exa deep-reasoning | $0.015 за поиск | до 10 результатов |
Parallel turbo / fast | $0.001 за поиск | до 10 результатов |
Parallel basic / advanced | $0.005 за поиск | до 10 результатов |
| Perplexity | $0.005 за поиск | до 10 результатов |
| Firecrawl | кредиты вашего аккаунта Firecrawl | BYOK, VEGA не берёт доплаты |
native | тарифы провайдера | например, у Anthropic $10 за 1000 поисков |
Результаты сверх десяти стоят $0.001 за штуку у Exa и Parallel. У Exa режимы отличаются глубиной и скоростью: auto отвечает примерно за секунду, deep копает 4-15 секунд, deep-reasoning до 40 секунд.
Нативный поиск есть у свежих OpenAI (gpt-4.1 и новее, o3, o4-mini), Anthropic (Claude 3.5 Haiku, 3.7 Sonnet и всё семейство 4.x), Google Gemini 3, Grok 4+ и всех моделей Perplexity. Он оплачивается по прайсу провайдера и проходит прозрачно через счёт VEGA.
Ограничить источники можно списками доменов с поддержкой масок и путей:
"plugins": [{
"id": "web",
"include_domains": ["arxiv.org", "*.nature.com"],
"exclude_domains": ["pinterest.com"]
}]У Exa оба списка можно использовать вместе, у Parallel, Perplexity и Firecrawl они взаимоисключающие. С нативным поиском по-разному: у Anthropic списки тоже взаимоисключающие, у OpenAI работает только include_domains, а Google фильтры не поддерживает совсем. Если задать фильтры с engine: "auto" для Google-модели, VEGA сама переключится на Exa.
У моделей xAI плагин дополнительно включает поиск по постам X/Twitter, и им можно управлять через x_search_filter:
{
"model": "x-ai/grok-4.1-fast",
"messages": [{"role": "user", "content": "Что пишут про VEGA в X?"}],
"plugins": [{"id": "web"}],
"x_search_filter": {
"allowed_x_handles": ["OpenRouterAI"],
"from_date": "2026-01-01",
"enable_image_understanding": true
}
}Фильтрует по хендлам (до 20), диапазону дат и умеет анализировать картинки и видео в постах.
Счёт за запрос с поиском складывается из двух частей: токены модели (сюда входят и токены найденных страниц, они добавляются в prompt) плюс стоимость самого поиска по таблице выше. Обе части уже включены в usage.cost ответа, ничего пересчитывать вручную не нужно.
Пример: запрос к openai/gpt-5.2 с plugins: [{"id": "web", "engine": "exa", "max_results": 5}]. Поиск стоит $0.007, результаты добавили, скажем, 6000 prompt-токенов. Итоговое списание будет токены по тарифу модели + $0.007, всё в одной строке usage.cost.
Детали по каждой генерации видны через GET /api/v1/generation?id=<id генерации>: там есть total_cost, num_search_results и web_search_engine (например "exa"), так что расходы на поиск можно разложить по факту.
Для чат-бота с кнопкой «искать в сети» проще всего плагин web: один поиск на запрос, предсказуемая цена. Для агента берите server tool и обязательно ставьте max_uses и max_total_results, иначе любопытная модель нагенерирует десяток поисков за раз.
Дёшево и быстро: engine: "parallel", mode: "turbo" за $0.001 или engine: "exa" за $0.007. Глубокое исследование: exa с mode: "deep".
Если ответ раздувает от контекста, режьте выдержки через search_context_size: "low" или max_characters: 2000. По умолчанию Exa отдаёт 2-4 тысячи символов на результат, при high до 30 тысяч.
from openai import OpenAI
client = OpenAI(
base_url="https://api.vega.chat/api/v1",
api_key="YOUR_VEGA_API_KEY",
)
response = client.chat.completions.create(
model="openai/gpt-5.2",
messages=[
{"role": "user", "content": "Какие новые AI-модели вышли на этой неделе?"}
],
extra_body={
"plugins": [{"id": "web", "engine": "exa", "max_results": 5}]
},
)
message = response.choices[0].message
print(message.content)
for ann in message.annotations or []:
if getattr(ann, "type", None) == "url_citation":
cite = ann.url_citation
print(f"- {cite.title}: {cite.url}")
print("Списано:", response.usage.model_dump().get("cost"))Тот же запрос работает и через POST /api/v1/responses, и через POST /api/v1/messages для Anthropic-совместимого API: поля plugins и tools принимаются везде, цитаты в ответе придут в едином формате url_citation.
На этом всё: один параметр в запросе, и модель отвечает по свежим данным с ссылками на источники. Проверить можно прямо в чате VEGA или любым curl из примеров выше.