Searxng Search
通過 SearXNG 進行免費元搜索——聚合來自 70 多個搜索引擎的結果。可自託管或使用公共實例。無需 API 密鑰。當網絡搜索工具集不可用時自動回退。
技能元數據
| 來源 | 可選 — 使用 hermes skills install official/research/searxng-search 安裝 |
| 路徑 | optional-skills/research/searxng-search |
| 版本 | 1.0.0 |
| 作者 | hermes-agent |
| 許可證 | MIT |
| 平臺 | linux, macos |
| 標籤 | search, searxng, meta-search, self-hosted, free, fallback |
| 相關技能 | duckduckgo-search, domain-intel |
參考:完整 SKILL.md
以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理看到的指令。
SearXNG Search
使用 SearXNG 進行免費元搜索——這是一個尊重隱私、可自託管的搜索聚合器,可同時查詢 70 多個搜索引擎。
使用公共實例時無需 API 密鑰。也可以自託管以獲得完全控制權。當未配置主要網絡搜索工具集(FIRECRAWL_API_KEY)時,它會自動作為回退選項出現。
配置
SearXNG 需要一個指向您的 SearXNG 實例的 SEARXNG_URL 環境變量:
# Public instances (no setup required)
SEARXNG_URL=https://searxng.example.com
# Self-hosted SearXNG
SEARXNG_URL=http://localhost:8888
如果未配置實例,則此技能不可用,代理將回退到其他搜索選項。
檢測流程
在選擇方法之前,檢查實際可用的內容:
# Check if SEARXNG_URL is set and the instance is reachable
curl -s --max-time 5 "${SEARXNG_URL}/search?q=test&format=json" | head -c 200
決策樹:
- 如果設置了
SEARXNG_URL且實例有響應,則使用 SearXNG - 如果未設置
SEARXNG_URL或無法訪問,則回退到其他可用的搜索工具 - 如果用戶特別想要使用 SearXNG,幫助他們設置實例或查找公共實例
方法 1:通過 curl 使用 CLI(首選)
通過 terminal 使用 curl 調用 SearXNG JSON API。這避免假設安裝了任何特定的 Python 包。
# Text search (JSON output)
curl -s --max-time 10 \
"${SEARXNG_URL}/search?q=python+async+programming&format=json&engines=google,bing&limit=10"
# With Safesearch off
curl -s --max-time 10 \
"${SEARXNG_URL}/search?q=example&format=json&safesearch=0"
# Specific categories (general, news, science, etc.)
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 結果
# Extract titles and URLs from 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:通過 requests 使用 Python API
使用 requests 庫直接從 Python 調用 SearXNG REST API:
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:searxng-data Python 包
為了獲得更結構化的訪問,安裝 searxng-data 包:
pip install searxng-data
from searxng_data import engines
# List available engines
print(engines.list_engines())
注意:此包僅提供引擎元數據,不提供搜索 API 本身。
自託管 SearXNG
運行您自己的 SearXNG 實例:
# Using Docker
docker run -d -p 8888:8080 \
-v $(pwd)/searxng:/etc/searxng \
searxng/searxng:latest
# Then set
SEARXNG_URL=http://localhost:8888
或通過 pip 安裝:
pip install searxng
# Edit /etc/searxng/settings.yml
searxng-run
公共 SearXNG 實例可在以下地址找到:
https://searxng.example.com(替換為任何公共實例)
工作流:先搜索後提取
SearXNG 返回標題、URL 和摘要——而非完整的頁面內容。要獲取完整的頁面內容,請先搜索,然後使用 web_extract、瀏覽器工具或 curl 提取最相關的 URL。
# Search for relevant pages
curl -s "${SEARXNG_URL}/search?q=fastapi+deployment&format=json&limit=3"
# Output: list of results with titles and URLs
# Then extract the best URL with web_extract
限制
- 實例可用性:如果 SearXNG 實例宕機或無法訪問,搜索將失敗。始終檢查
SEARXNG_URL是否已設置且實例可訪問。 - 無內容提取:SearXNG 返回摘要,而非完整的頁面內容。使用
web_extract、瀏覽器工具或curl獲取完整文章。 - 速率限制:某些公共實例會限制請求。自託管可避免此問題。
- 引擎覆蓋範圍:可用引擎取決於 SearXNG 實例的配置。某些引擎可能被禁用。
- 結果新鮮度:元搜索聚合外部引擎——結果的新鮮度取決於這些引擎。
故障排除
| 問題 | 可能原因 | 解決方法 |
|---|---|---|
未設置 SEARXNG_URL | 未配置實例 | 使用公共 SearXNG 實例或設置您自己的實例 |
| 連接被拒絕 | 實例未運行或 URL 錯誤 | 檢查 URL 是否正確以及實例是否正在運行 |
| 結果為空 | 實例阻止了查詢 | 嘗試不同的實例或自託管 |
| 響應緩慢 | 公共實例負載過高 | 自託管或使用負載較低的公共實例 |
不支持 json 格式 | SearXNG 版本過舊 | 嘗試 format=rss 或升級 SearXNG |
常見陷阱
- 始終設置
SEARXNG_URL:如果沒有它,該技能無法運行。 - 對查詢進行 URL 編碼:在 curl 中,空格和特殊字符必須進行 URL 編碼,或者在 Python 中使用
urllib.parse.quote()。 - 使用
format=json:默認格式可能不適合機器讀取。請始終顯式請求 JSON 格式。 - 設置超時:始終使用
--max-time或timeout=以避免在無法訪問的實例上掛起。 - 自託管最佳:公共實例可能會宕機、受到速率限制或被封鎖。自託管實例更可靠。
實例發現
如果未設置 SEARXNG_URL 且用戶詢問有關 SearXNG 的問題,請幫助他們:
- 查找公共 SearXNG 實例(搜索“public searxng instance”)
- 使用 Docker 或 pip 搭建自己的實例
公共實例列表位於:https://searxng.org/