Веб-поиск и извлечение

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

Оба инструмента настраиваются через единый выбор бэкенда. Провайдеры выбираются через hermes tools или задаются напрямую в config.yaml. Возможности рекурсивного обхода (Firecrawl/Tavily) доступны через web_extract, а не как отдельный инструмент web_crawl.

Бэкенды

Провайдер Переменная окружения Поиск Извлечение Обход Бесплатный тариф
Firecrawl (по умолчанию) FIRECRAWL_API_KEY 500 кредитов/мес
SearXNG SEARXNG_URL ✔ Бесплатно (самостоятельное размещение)
Tavily TAVILY_API_KEY 1 000 поисков/мес
Exa EXA_API_KEY 1 000 поисков/мес
Parallel PARALLEL_API_KEY Платный

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

tip Подписчики Nous Если у вас есть платная подписка Nous Portal, веб-поиск и извлечение доступны через Tool Gateway через управляемый Firecrawl — ключ API не требуется. Выполните hermes tools, чтобы включить.


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

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

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

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

Какая модель выполняет суммирование?

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

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

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

Или выберите интерактивно: hermes modelConfigure auxiliary modelsweb_extract.

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

Когда суммирование мешает

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


Настройка

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

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

hermes tools

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

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

# ~/.hermes/.env
FIRECRAWL_API_KEY=fc-your-key-here

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

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

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

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


SearXNG (бесплатно, самостоятельное размещение)

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

SearXNG — только для поискаweb_extract (включая его режимы обхода) требует отдельного провайдера извлечения.

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

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 и найдите блок formats (около строки 84):

# До (по умолчанию — JSON отключён):
formats:
  - html

# После (включите JSON для Hermes):
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. Настройте Hermes:

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

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

web:
  search_backend: "searxng"

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


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

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

# ~/.hermes/.env
SEARXNG_URL=https://searx.example.com

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


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

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

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

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


Tavily

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

# ~/.hermes/.env
TAVILY_API_KEY=tvly-your-key-here

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


Exa

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

# ~/.hermes/.env
EXA_API_KEY=your-exa-key-here

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


Parallel

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

# ~/.hermes/.env
PARALLEL_API_KEY=your-parallel-key-here

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


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

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

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

# ~/.hermes/config.yaml
web:
  backend: "searxng"   # firecrawl | searxng | tavily | exa | parallel

Раздельная настройка по возможностям

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

# ~/.hermes/config.yaml
web:
  search_backend: "searxng"     # используется web_search
  extract_backend: "firecrawl"  # используется web_extract (и его режимы глубокого обхода)

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

Приоритет (по возможности):

  1. web.search_backend / web.extract_backend (явное раздельное указание)

  2. web.backend (общий резерв)

  3. Автоопределение по переменным окружения

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

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

Наличие учётных данных Автовыбранный бэкенд
FIRECRAWL_API_KEY или FIRECRAWL_API_URL firecrawl
PARALLEL_API_KEY parallel
TAVILY_API_KEY tavily
EXA_API_KEY exa
SEARXNG_URL searxng

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

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

✅ Web Search & Extract (searxng)

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

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

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

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

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

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

web_extract сообщает "search-only backend"

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

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

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

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

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

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

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

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


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

hermes skills install official/research/searxng-search

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