Перейти к основному содержимому

Поиск в интернете и извлечение контента

VibeOS включает два инструмента для работы с интернетом, вызываемых моделями и поддерживаемых несколькими провайдерами:

  • web_search — поиск в интернете с возвратом ранжированных результатов
  • web_extract — загрузка и извлечение читаемого содержимого с одного или нескольких URL-адресов

Оба инструмента настраиваются через единый выбор бэкенда. Провайдеры выбираются через vibeos tools или задаются напрямую в config.yaml.

Бэкенды​

ПровайдерПеременная окруженияПоискИзвлечениеБесплатный тариф
Firecrawl (по умолчанию)FIRECRAWL_API_KEY✔✔500 кредитов/мес
SearXNGSEARXNG_URL✔—✔ Бесплатно (саморазмещаемый)
Brave Search (бесплатный тариф)BRAVE_SEARCH_API_KEY✔—2 000 запросов/мес
DDGS (DuckDuckGo)— (без ключа)✔—✔ Бесплатно
TavilyTAVILY_API_KEY✔✔1 000 поисков/мес
ExaEXA_API_KEY✔✔1 000 поисков/мес
Яндекс.ПоискYANDEX_SEARCH_API_KEY + YANDEX_FOLDER_ID✔—Платный (Yandex Cloud)
ParallelPARALLEL_API_KEY✔✔Платный
xAI (Grok)XAI_API_KEY или vibeos auth login xai-oauth✔—Платный (SuperGrok или за токены)

Brave Search, DDGS, Яндекс.Поиск и xAI — только для поиска; объедините любой из них с Firecrawl/Tavily/Exa/Parallel, если вам также нужен web_extract. DDGS использует под капотом ddgs Python-пакет; если он ещё не установлен, выполните pip install ddgs (или позвольте VibeOS лениво установить его при первом использовании). xAI запускает серверный инструмент web_search от Grok через Responses API — результаты генерируются LLM, а не на основе индекса, поэтому заголовки, описания и выбор URL являются выходными данными модели (см. предостережение о доверии к модели ниже).

Разделение по возможностям: вы можете использовать разных провайдеров для поиска и извлечения независимо — например, SearXNG (бесплатно) для поиска и Firecrawl для извлечения. См. Конфигурация по возможностям ниже.

Подписчики Nous

Если у вас есть платная подписка Nous Portal, поиск в интернете и извлечение контента доступны через Tool Gateway с управляемым Firecrawl — без необходимости в API-ключе. Новые установки могут выполнить vibeos setup --portal для входа и включения всех инструментов шлюза сразу; существующие установки могут включить только веб через vibeos tools.


Как web_extract обрабатывает длинные страницы​

Бэкенды возвращают необработанную разметку страницы, которая может быть огромной (темы форумов, сайты документации, новостные статьи со встроенными комментариями). Чтобы сохранить контекстное окно используемым и снизить затраты, web_extract пропускает возвращённый контент через вспомогательную модель web_extract перед передачей агенту. Поведение определяется исключительно размером:

Размер страницы (символы)Что происходит
Менее 5 000Возвращается как есть — без вызова LLM, полная разметка достигает агента
5 000 – 500 000Однопроходное резюме через вспомогательную модель web_extract, ограниченное ~5 000 символов вывода
500 000 – 2 000 000Разбивка на части: разделяется на фрагменты по 100 тыс. символов, каждый резюмируется параллельно, затем синтезируется итоговое резюме (~5 000 символов)
Более 2 000 000Отказ с подсказкой использовать более сфокусированный исходный URL

Резюме сохраняет цитаты, блоки кода и ключевые факты в их исходном форматировании — это компрессор контента, а не парафразировщик. Если резюмирование не удаётся или истекает по времени, VibeOS возвращается к первым ~5 000 символам необработанного контента вместо бесполезной ошибки.

Какая модель выполняет резюмирование?​

Вспомогательная задача web_extract. По умолчанию (auxiliary.web_extract.provider: "auto") это ваша основная чат-модель — тот же провайдер, та же модель, что и vibeos model. Это нормально для большинства конфигураций, но на дорогих моделях рассуждений (Opus, MiniMax M2.7 и т.д.) каждое извлечение длинной страницы добавляет значительные затраты.

Чтобы направлять резюме извлечения на дешёвую, быструю модель независимо от вашей основной:

# ~/.vibeos/config.yaml
auxiliary:
web_extract:
provider: openrouter
model: google/gemini-3-flash-preview
timeout: 360 # секунды; увеличьте, если сталкиваетесь с тайм-аутами резюмирования

Или выберите интерактивно: vibeos model → Configure auxiliary models → web_extract.

См. Вспомогательные модели для полного справочника и шаблонов переопределения для каждой задачи.

Когда резюмирование мешает​

Если вам нужно именно необработанное, нерезюмированное содержимое страницы — например, вы парсите структурированную страницу, где резюме LLM могло бы пропустить важные поля — используйте вместо этого browser_navigate + browser_snapshot. Инструмент браузера возвращает живое дерево доступности без перезаписи вспомогательной моделью (с собственным ограничением в 8 000 символов для снимка на огромных страницах).


Настройка​

Быстрая настройка через vibeos tools​

Выполните vibeos tools, перейдите к Web Search & Extract и выберите провайдера. Мастер запросит необходимый URL или API-ключ и запишет его в вашу конфигурацию.

vibeos tools

Firecrawl (по умолчанию)​

Полнофункциональный поиск и извлечение. Рекомендуется для большинства пользователей.

# ~/.vibeos/.env
FIRECRAWL_API_KEY=fc-ваш-ключ-здесь

Получите ключ на firecrawl.dev. Бесплатный тариф включает 500 кредитов в месяц.

Саморазмещаемый Firecrawl: Укажите на свой собственный экземпляр вместо облачного API:

# ~/.vibeos/.env
FIRECRAWL_API_URL=http://localhost:3002

Когда FIRECRAWL_API_URL установлен, API-ключ необязателен (отключите аутентификацию сервера с помощью USE_DB_AUTHENTICATION=false).


SearXNG (бесплатно, саморазмещаемый)​

SearXNG — это уважающий конфиденциальность метапоисковый движок с открытым исходным кодом, который агрегирует результаты из более чем 70 поисковых систем. API-ключ не требуется — просто укажите VibeOS на работающий экземпляр SearXNG.

SearXNG — только для поиска — для web_extract требуется отдельный провайдер извлечения.

Вариант A — Саморазмещение с Docker (рекомендуется)​

Это даёт вам частный экземпляр без ограничений скорости.

1. Создайте рабочую директорию:

mkdir -p ~/searxng/searxng
cd ~/searxng

2. Напишите docker-compose.yml:

# ~/searxng/docker-compose.yml
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
ports:
- "8888:8080"
volumes:
- ./searxng:/etc/searxng:rw
environment:
- SEARXNG_BASE_URL=http://localhost:8888/
restart: unless-stopped

3. Запустите контейнер:

docker compose up -d

4. Включите формат JSON API:

SearXNG поставляется с отключённым по умолчанию выводом JSON. Скопируйте сгенерированную конфигурацию и включите его:

# Скопируйте автосгенерированную конфигурацию из контейнера
docker cp searxng:/etc/searxng/settings.yml ~/searxng/searxng/settings.yml

Откройте ~/searxng/searxng/settings.yml. Если присутствует use_default_settings: true, файл содержит только ваши переопределения. Все остальные настройки наследуются из встроенных значений по умолчанию. Чтобы включить JSON-ответы для VibeOS, добавьте следующее переопределение:

search:
formats:
- html
- json

Ваш settings.yml должен выглядеть примерно так:

# Прочтите документацию перед расширением значений по умолчанию:
# https://docs.searxng.org/admin/settings/

use_default_settings: true

server:
secret_key: "abcdef12345678"
image_proxy: true

search:
formats:
- html
- json

5. Перезапустите для применения:

docker cp ~/searxng/searxng/settings.yml searxng:/etc/searxng/settings.yml
docker restart searxng

6. Проверьте, что работает:

curl -s "http://localhost:8888/search?q=test&format=json" | python3 -c \
"import sys,json; d=json.load(sys.stdin); print(f'{len(d[\"results\"])} results')"

Вы должны увидеть что-то вроде 10 results. Если вы получаете 403 Forbidden, формат JSON всё ещё отключён — перепроверьте шаг 4.

7. Настройте VibeOS:

# ~/.vibeos/.env
SEARXNG_URL=http://localhost:8888

Затем выберите SearXNG в качестве поискового бэкенда в ~/.vibeos/config.yaml:

web:
search_backend: "searxng"

Или установите через vibeos tools → Web Search & Extract → SearXNG.


Вариант B — Использование публичного экземпляра​

Публичные экземпляры SearXNG перечислены на searx.space. Отфильтруйте экземпляры, у которых включён формат JSON (показано в таблице).

# ~/.vibeos/.env
SEARXNG_URL=https://searx.example.com
Публичные экземпляры

Публичные экземпляры имеют ограничения скорости, переменное время безотказной работы и могут в любое время отключить формат JSON. Для производственного использования настоятельно рекомендуется саморазмещение.


Объединение SearXNG с провайдером извлечения​

SearXNG обрабатывает поиск; вам нужен отдельный провайдер для web_extract. Используйте ключи для каждой возможности:

# ~/.vibeos/config.yaml
web:
search_backend: "searxng"
extract_backend: "firecrawl" # или tavily, exa, parallel

С этой конфигурацией VibeOS использует SearXNG для всех поисковых запросов и Firecrawl для извлечения URL — объединяя бесплатный поиск с высококачественным извлечением.


Tavily​

Оптимизированный для ИИ поиск и извлечение с щедрым бесплатным тарифом.

# ~/.vibeos/.env
TAVILY_API_KEY=tvly-ваш-ключ-здесь

Получите ключ на app.tavily.com. Бесплатный тариф включает 1 000 поисков в месяц.


Exa​

Нейронный поиск с семантическим пониманием. Хорош для исследований и поиска концептуально связанного контента.

# ~/.vibeos/.env
EXA_API_KEY=ваш-ключ-exa-здесь

Получите ключ на exa.ai. Бесплатный тариф включает 1 000 поисков в месяц.


Яндекс.Поиск​

Поисковый API Yandex Cloud — лучший по умолчанию для русскоязычных / кириллических запросов. Только для поиска; объедините с Firecrawl/Tavily/Exa/Parallel для web_extract.

# ~/.vibeos/.env
YANDEX_SEARCH_API_KEY=ваш-ключ-поискового-api
YANDEX_FOLDER_ID=b1gxxxxxxxx # та же папка, что и YandexART, если вы уже используете его

Включите Search API в папке и предоставьте сервисному аккаунту роль search-api.executor (или редактора). Затем выберите Яндекс.Поиск в vibeos tools или:

# ~/.vibeos/config.yaml
web:
search_backend: "yandex"
extract_backend: "firecrawl"

Необязательные переопределения: YANDEX_SEARCH_TYPE (RU по умолчанию, также COM/TR/…), YANDEX_SEARCH_REGION (например, 225 Россия, 213 Москва), YANDEX_SEARCH_FOLDER_ID, если поиск должен использовать другую папку, отличную от YANDEX_FOLDER_ID.

Для многоисточниковых цитируемых обзоров загрузите встроенный навык professional-research.


Parallel​

Нативный для ИИ поиск и извлечение с возможностями глубокого исследования.

# ~/.vibeos/.env
PARALLEL_API_KEY=ваш-ключ-parallel-здесь

Получите доступ на parallel.ai.


xAI (Grok)​

Направляет web_search через серверный инструмент web_search от Grok на Responses API. Grok выполняет фактический поиск и возвращает лучшие результаты в виде структурированного JSON.

Работает с любым путём учётных данных — никаких новых переменных окружения, никакого нового мастера настройки:

# ~/.vibeos/.env (путь через переменную окружения)
XAI_API_KEY=sk-xai-ваш-ключ-здесь

или для подписчиков SuperGrok:

vibeos auth login xai-oauth

Затем выберите xAI в качестве поискового бэкенда:

# ~/.vibeos/config.yaml
web:
backend: "xai"

Необязательные настройки:

web:
backend: "xai"
xai:
model: grok-build-0.1 # модель рассуждений, требуемая web_search (по умолчанию)
allowed_domains: # необязательно, макс. 5 — взаимоисключающе с excluded_domains
- arxiv.org
excluded_domains: # необязательно, макс. 5
- example-spam.com
timeout: 90 # секунды (по умолчанию)

Только для поиска — объедините с Firecrawl / Tavily / Exa / Parallel, если вам также нужен web_extract. При 401 провайдер выполняет единое принудительное обновление OAuth-токена и повторяет попытку (покрывает отзыв в середине окна и непрозрачные токены, которые упреждающая проверка срока действия не может декодировать); учётные данные из переменных окружения пропускают повторную попытку.

Модель доверия

В отличие от провайдеров на основе индекса (Brave, Tavily, Exa), которые возвращают дословные результаты поисковой системы, xAI — это LLM, который сам выбирает, какие URL показывать, и сам пишет заголовки и описания. Содержание запроса влияет на вывод, поэтому вредоносный запрос (например, внедрённый через ненадёжный входящий ввод, который подхватил агент) в принципе может направить Grok на выдачу URL, выбранных злоумышленником. Относитесь к возвращённым URL так же, как к любой ссылке, сгенерированной моделью — проверяйте перед загрузкой, особенно если запрос поступил из ненадёжного ввода.


Конфигурация​

Единый бэкенд​

Установите одного провайдера для всех веб-возможностей:

# ~/.vibeos/config.yaml
web:
backend: "searxng" # firecrawl | searxng | brave-free | ddgs | tavily | exa | yandex | parallel | xai

Конфигурация по возможностям​

Используйте разных провайдеров для поиска и извлечения. Это позволяет объединить бесплатный поиск (SearXNG) с платным провайдером извлечения или наоборот:

# ~/.vibeos/config.yaml
web:
search_backend: "searxng" # используется web_search
extract_backend: "firecrawl" # используется web_extract

Русскоязычный / кириллический поиск (Яндекс) с извлечением Firecrawl:

# ~/.vibeos/config.yaml
web:
search_backend: "yandex"
extract_backend: "firecrawl"

Когда ключи для каждой возможности пусты, оба возвращаются к web.backend. Когда web.backend также пуст, бэкенд автоматически определяется из того, какой API-ключ/URL присутствует.

Приоритет (для каждой возможности):

  1. web.search_backend / web.extract_backend (явный для каждой возможности)
  2. web.backend (общий запасной вариант)
  3. Автоопределение из переменных окружения

Автоопределение​

Если бэкенд явно не настроен, VibeOS выбирает первый доступный на основе того, какие учётные данные установлены:

Присутствующие учётные данныеАвтовыбранный бэкенд
FIRECRAWL_API_KEY или FIRECRAWL_API_URLfirecrawl
PARALLEL_API_KEYparallel
TAVILY_API_KEYtavily
EXA_API_KEYexa
YANDEX_SEARCH_API_KEY + YANDEX_FOLDER_IDyandex
SEARXNG_URLsearxng

xAI Web Search не входит в цепочку автоопределения — наличие XAI_API_KEY (или вход через xAI Grok OAuth) не направляет веб-трафик через xAI автоматически, поскольку эти учётные данные также используются для вывода / TTS / генерации изображений, и пользователь может захотеть другой бэкенд для веба. Включите явно с помощью web.backend: "xai".


Проверка настройки​

Выполните vibeos setup, чтобы увидеть, какой веб-бэкенд обнаружен:

✅ Web Search & Extract (searxng)

Или проверьте через CLI:

# Активируйте виртуальное окружение и запустите модуль веб-инструментов напрямую
source ~/.vibeos/vibeos-agent/.venv/bin/activate
python -m tools.web_tools

Это выведет активный бэкенд и его статус:

✅ Web backend: searxng
Using SearXNG (search only): http://localhost:8888

Устранение неполадок​

web_search возвращает {"success": false}​

  • Проверьте, доступен ли SEARXNG_URL: curl -s "http://localhost:8888/search?q=test&format=json"
  • Если вы получаете HTTP 403, формат JSON отключён — добавьте json в список formats в settings.yml и перезапустите
  • Если вы получаете ошибку соединения, контейнер может не работать: docker ps | grep searxng

web_extract сообщает «search-only backend»​

SearXNG не может извлекать содержимое URL. Установите web.extract_backend на провайдера, поддерживающего извлечение:

web:
search_backend: "searxng"
extract_backend: "firecrawl" # или tavily / exa / parallel

SearXNG возвращает 0 результатов​

Некоторые публичные экземпляры отключают определённые поисковые системы или категории. Попробуйте:

  • Другой запрос
  • Другой публичный экземпляр с searx.space
  • Саморазмещение собственного экземпляра для надёжных результатов

Ограничение скорости на публичном экземпляре​

Переключитесь на саморазмещаемый экземпляр (см. Вариант A выше). С Docker ваш собственный экземпляр не имеет ограничений скорости.

web_extract возвращает усечённый контент с пометкой «summarization timed out»​

Вспомогательная модель не завершила резюмирование в течение настроенного тайм-аута. Либо:

  • Увеличьте auxiliary.web_extract.timeout в config.yaml (по умолчанию 360 с для новых установок, 30 с, если ключ отсутствует)
  • Переключите вспомогательную задачу web_extract на более быструю модель (например, google/gemini-3-flash-preview) — см. Как web_extract обрабатывает длинные страницы
  • Для страниц, где резюмирование — неподходящий инструмент, используйте вместо этого browser_navigate

Для агентов, которым нужно использовать SearXNG напрямую через curl (например, в качестве запасного варианта, когда набор веб-инструментов недоступен), установите необязательный навык searxng-search:

vibeos skills install official/research/searxng-search

Это добавляет навык, который обучает агента:

  • Вызывать JSON API SearXNG через curl или Python
  • Фильтровать по категории (general, news, science и т.д.)
  • Обрабатывать пагинацию и случаи ошибок
  • Корректно откатываться, когда SearXNG недоступен