Поиск в интернете и извлечение контента
VibeOS включает два инструмента для работы с интернетом, вызываемых моделями и поддерживаемых несколькими провайдерами:
web_search— поиск в интернете с возвратом ранжированных результатовweb_extract— загрузка и извлечение читаемого содержимого с одного или нескольких URL-адресов
Оба инструмента настраиваются через единый выбор бэкенда. Провайдеры выбираются через vibeos tools или задаются напрямую в config.yaml.
Бэкенды
| Провайдер | Переменная окружения | Поиск | Извлечение | Бесплатный тариф |
|---|---|---|---|---|
| Firecrawl (по умолчанию) | FIRECRAWL_API_KEY | ✔ | ✔ | 500 кредитов/мес |
| SearXNG | SEARXNG_URL | ✔ | — | ✔ Бесплатно (саморазмещаемый) |
| Brave Search (бесплатный тариф) | BRAVE_SEARCH_API_KEY | ✔ | — | 2 000 запросов/мес |
| DDGS (DuckDuckGo) | — (без ключа) | ✔ | — | ✔ Бесплатно |
| Tavily | TAVILY_API_KEY | ✔ | ✔ | 1 000 поисков/мес |
| Exa | EXA_API_KEY | ✔ | ✔ | 1 000 поисков/мес |
| Яндекс.Поиск | YANDEX_SEARCH_API_KEY + YANDEX_FOLDER_ID | ✔ | — | Платный (Yandex Cloud) |
| Parallel | PARALLEL_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 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 присутствует.
Приоритет (для каждой возможности):
web.search_backend/web.extract_backend(явный для каждой возможности)web.backend(общий запасной вариант)- Автоопределение из переменных окружения
Автоопределение
Если бэкенд явно не настроен, VibeOS выбирает первый доступный на основе того, какие учётные данные установлены:
| Присутствующие учётные данные | Автовыбранный бэкенд |
|---|---|
FIRECRAWL_API_KEY или FIRECRAWL_API_URL | firecrawl |
PARALLEL_API_KEY | parallel |
TAVILY_API_KEY | tavily |
EXA_API_KEY | exa |
YANDEX_SEARCH_API_KEY + YANDEX_FOLDER_ID | yandex |
SEARXNG_URL | searxng |
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-search
Для агентов, которым нужно использовать SearXNG напрямую через curl (например, в качестве запасного варианта, когда набор веб-инструментов недоступен), установите необязательный навык searxng-search:
vibeos skills install official/research/searxng-search
Это добавляет навык, который обучает агента:
- Вызывать JSON API SearXNG через
curlили Python - Фильтровать по категории (
general,news,scienceи т.д.) - Обрабатывать пагинацию и случаи ошибок
- Корректно откатываться, когда SearXNG недоступен