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
Дерево решений:
- Если
SEARXNG_URLустановлена и экземпляр отвечает, используйте SearXNG - Если
SEARXNG_URLне установлена или недоступна, переключитесь на другие доступные инструменты поиска - Если пользователь хочет использовать именно 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, rss | format=json |
engines | Разделенный запятыми список движков | engines=google,bing,ddg |
limit | Максимум результатов на движок (по умолчанию 10) | limit=5 |
categories | Фильтр по категории | categories=news,science |
safesearch | 0=нет, 1=умеренный, 2=строгий | safesearch=0 |
time_range | Фильтр: day, week, month, year | time_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, помогите ему либо:
- Найти публичный экземпляр SearXNG (поищите «public searxng instance»)
- Настроить свой собственный с помощью Docker или pip
Публичные экземпляры перечислены на: https://searxng.org/