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

Searxng Search

Бесплатный мета-поиск через SearXNG — объединяет результаты из 70+ поисковых систем. Можно разместить на собственном сервере или использовать публичный экземпляр. Ключ API не требуется. Автоматически переключается в режим резервирования, когда набор инструментов веб-поиска недоступен.

Метаданные навыка​

ИсточникОпционально — установка с помощью vibeos skills install official/research/searxng-search
Путьoptional-skills/research/searxng-search
Версия1.0.0
Авторvibeos-agent
ЛицензияMIT
Платформыlinux, macos
Тегиsearch, searxng, meta-search, self-hosted, free, fallback
Связанные навыкиduckduckgo-search, domain-intel

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Это то, что агент видит в качестве инструкций, когда навык активен.

SearXNG Search

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

Ключ API не требуется при использовании публичного экземпляра. Также можно разместить на собственном сервере для полного контроля. Автоматически появляется как резервный вариант, когда основной набор инструментов веб-поиска (FIRECRAWL_API_KEY) не настроен.

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

SearXNG требует переменную окружения SEARXNG_URL, указывающую на ваш экземпляр SearXNG:

# Публичные экземпляры (настройка не требуется)
SEARXNG_URL=https://searxng.example.com

# Самостоятельно размещенный SearXNG
SEARXNG_URL=http://localhost:8888

Если экземпляр не настроен, этот навык недоступен, и агент переключается на другие варианты поиска.

Процесс обнаружения​

Проверьте, что на самом деле доступно, прежде чем выбирать подход:

# Проверьте, установлена ли SEARXNG_URL и доступен ли экземпляр
curl -s --max-time 5 "${SEARXNG_URL}/search?q=test&format=json" | head -c 200

Дерево решений:

  1. Если SEARXNG_URL установлена и экземпляр отвечает, используйте SearXNG
  2. Если SEARXNG_URL не установлена или недоступна, переключитесь на другие доступные инструменты поиска
  3. Если пользователь хочет использовать именно SearXNG, помогите ему настроить экземпляр или найти публичный

Метод 1: CLI через curl (предпочтительный)​

Используйте curl через terminal для вызова JSON API SearXNG. Это позволяет избежать предположений о том, что какой-либо конкретный пакет Python установлен.

# Текстовый поиск (вывод JSON)
curl -s --max-time 10 \
"${SEARXNG_URL}/search?q=python+async+programming&format=json&engines=google,bing&limit=10"

# С отключенным безопасным поиском
curl -s --max-time 10 \
"${SEARXNG_URL}/search?q=example&format=json&safesearch=0"

# Конкретные категории (general, news, science и т.д.)
curl -s --max-time 10 \
"${SEARXNG_URL}/search?q=AI+news&format=json&categories=news"

Распространенные флаги CLI​

ФлагОписаниеПример
qСтрока запроса (URL-кодированная)q=python+async
formatФормат вывода: json, csv, rssformat=json
enginesРазделенный запятыми список движковengines=google,bing,ddg
limitМаксимум результатов на движок (по умолчанию 10)limit=5
categoriesФильтр по категорииcategories=news,science
safesearch0=нет, 1=умеренный, 2=строгийsafesearch=0
time_rangeФильтр: day, week, month, yeartime_range=week

Разбор результатов JSON​

# Извлечение заголовков и URL из JSON
curl -s --max-time 10 "${SEARXNG_URL}/search?q=fastapi&format=json&limit=5" \
| python3 -c "
import json, sys
data = json.load(sys.stdin)
for r in data.get('results', []):
print(r.get('title',''))
print(r.get('url',''))
print(r.get('content','')[:200])
print()
"

Возвращает для каждого результата: title, url, content (фрагмент), engine, parsed_url, img_src, thumbnail, author, published_date

Метод 2: Python API через requests​

Используйте REST API SearXNG напрямую из Python с библиотекой requests:

import os, requests, urllib.parse

base_url = os.environ.get("SEARXNG_URL", "")
if not base_url:
raise RuntimeError("SEARXNG_URL is not set")

query = "fastapi deployment guide"
params = {
"q": query,
"format": "json",
"limit": 5,
"engines": "google,bing",
}

resp = requests.get(f"{base_url}/search", params=params, timeout=10)
resp.raise_for_status()
data = resp.json()

for r in data.get("results", []):
print(r["title"])
print(r["url"])
print(r.get("content", "")[:200])
print()

Метод 3: Пакет Python searxng-data​

Для более структурированного доступа установите пакет searxng-data:

pip install searxng-data
from searxng_data import engines

# Список доступных движков
print(engines.list_engines())

Примечание: Этот пакет предоставляет только метаданные движков, а не сам поисковый API.

Самостоятельное размещение SearXNG​

Чтобы запустить собственный экземпляр SearXNG:

# Использование Docker
docker run -d -p 8888:8080 \
-v $(pwd)/searxng:/etc/searxng \
searxng/searxng:latest

# Затем установите
SEARXNG_URL=http://localhost:8888

Или установка через pip:

pip install searxng
# Отредактируйте /etc/searxng/settings.yml
searxng-run

Публичные экземпляры SearXNG доступны по адресу:

  • https://searxng.example.com (замените на любой публичный экземпляр)

Рабочий процесс: Поиск, затем Извлечение​

SearXNG возвращает заголовки, URL и фрагменты — не полное содержимое страниц. Чтобы получить полное содержимое страницы, сначала выполните поиск, а затем извлеките наиболее релевантный URL с помощью web_extract, инструментов браузера или curl.

# Поиск релевантных страниц
curl -s "${SEARXNG_URL}/search?q=fastapi+deployment&format=json&limit=3"
# Вывод: список результатов с заголовками и URL

# Затем извлеките лучший URL с помощью web_extract

Ограничения​

  • Доступность экземпляра: Если экземпляр SearXNG недоступен или не отвечает, поиск завершается ошибкой. Всегда проверяйте, что SEARXNG_URL установлена и экземпляр доступен.
  • Отсутствие извлечения содержимого: SearXNG возвращает фрагменты, а не полное содержимое страниц. Используйте web_extract, инструменты браузера или curl для получения полных статей.
  • Ограничение скорости: Некоторые публичные экземпляры ограничивают количество запросов. Самостоятельное размещение позволяет избежать этого.
  • Охват движков: Доступные движки зависят от конфигурации экземпляра SearXNG. Некоторые движки могут быть отключены.
  • Свежесть результатов: Мета-поиск агрегирует внешние движки — свежесть результатов зависит от этих движков.

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

ПроблемаВероятная причинаЧто делать
SEARXNG_URL не установленаЭкземпляр не настроенИспользуйте публичный экземпляр SearXNG или настройте свой собственный
Соединение отклоненоЭкземпляр не запущен или неверный URLПроверьте правильность URL и запущен ли экземпляр
Пустые результатыЭкземпляр блокирует запросПопробуйте другой экземпляр или разместите свой собственный
Медленные ответыПубличный экземпляр перегруженРазместите свой собственный или используйте менее загруженный публичный экземпляр
Формат json не поддерживаетсяСтарая версия SearXNGПопробуйте format=rss или обновите SearXNG

Подводные камни​

  • Всегда устанавливайте SEARXNG_URL: Без этого навык не сможет функционировать.
  • URL-кодируйте запросы: Пробелы и специальные символы должны быть URL-кодированы в curl или используйте urllib.parse.quote() в Python.
  • Используйте format=json: Формат по умолчанию может быть нечитаем для машин. Всегда явно запрашивайте JSON.
  • Устанавливайте тайм-аут: Всегда используйте --max-time или timeout=, чтобы избежать зависания при недоступных экземплярах.
  • Самостоятельное размещение — лучший вариант: Публичные экземпляры могут выходить из строя, ограничивать скорость или блокировать. Самостоятельно размещенный экземпляр надежен.

Обнаружение экземпляров​

Если SEARXNG_URL не установлена и пользователь спрашивает о SearXNG, помогите ему либо:

  1. Найти публичный экземпляр SearXNG (поищите «public searxng instance»)
  2. Настроить свой собственный с помощью Docker или pip

Публичные экземпляры перечислены на: https://searxng.org/