feat: add support for searx/searxng (#253)

* add searx/searxng support

* nit

* Fix indentation in search.py for readability

* Clean up imports in search.py

Removed unused imports from search.py

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
This commit is contained in:
Gordon
2025-09-22 18:54:30 +08:00
committed by GitHub
parent 6bb0b95579
commit 1c27e0f2ae
10 changed files with 41 additions and 1 deletions

View File

@@ -22,9 +22,10 @@ ENABLE_MCP_SERVER_CONFIGURATION=false
# Otherwise, you system could be compromised.
ENABLE_PYTHON_REPL=false
# Search Engine, Supported values: tavily (recommended), duckduckgo, brave_search, arxiv
# Search Engine, Supported values: tavily (recommended), duckduckgo, brave_search, arxiv, searx
SEARCH_API=tavily
TAVILY_API_KEY=tvly-xxx
# SEARX_HOST=xxx # Required only if SEARCH_API is searx.(compatible with both Searx and SearxNG)
# BRAVE_SEARCH_API_KEY=xxx # Required only if SEARCH_API is brave_search
# JINA_API_KEY=jina_xxx # Optional, default is None

View File

@@ -169,6 +169,10 @@ DeerFlow supports multiple search engines that can be configured in your `.env`
- No API key required
- Specialized for scientific and academic papers
- **Searx/SearxNG**: Self-hosted metasearch engine
- Requires `SEARX_HOST` to be set in the `.env` file
- Supports connecting to either Searx or SearxNG
To configure your preferred search engine, set the `SEARCH_API` variable in your `.env` file:
```bash

View File

@@ -167,6 +167,10 @@ DeerFlow unterstützt mehrere Suchmaschinen, die in Ihrer `.env`-Datei über die
- Kein API-Schlüssel erforderlich
- Spezialisiert auf wissenschaftliche und akademische Papiere
- **Searx/SearxNG**: Selbstgehostete Metasuchmaschine
- Erfordert `SEARX_HOST` in Ihrer `.env`-Datei
- Unterstützt die Anbindung an Searx oder SearxNG
Um Ihre bevorzugte Suchmaschine zu konfigurieren, setzen Sie die Variable `SEARCH_API` in Ihrer `.env`-Datei:
```bash

View File

@@ -168,6 +168,10 @@ DeerFlow soporta múltiples motores de búsqueda que pueden configurarse en tu a
- No requiere clave API
- Especializado en artículos científicos y académicos
- **Searx/SearxNG**: Motor de metabúsqueda autoalojado
- Requiere `SEARX_HOST` en tu archivo `.env`
- Compatible con Searx o SearxNG
Para configurar tu motor de búsqueda preferido, establece la variable `SEARCH_API` en tu archivo `.env`:
```bash

View File

@@ -162,6 +162,10 @@ DeerFlow は複数の検索エンジンをサポートしており、`.env`フ
- APIキー不要
- 科学・学術論文専用
- **Searx/SearxNG**セルフホスト型メタ検索エンジン
- `.env`ファイルに`SEARX_HOST`が必要
- Searx または SearxNG に接続可能
お好みの検索エンジンを設定するには、`.env`ファイルで`SEARCH_API`変数を設定します:
```bash

View File

@@ -171,6 +171,10 @@ DeerFlow suporta múltiplos mecanismos de busca que podem ser configurados no se
- Não requer chave API
- Especializado em artigos científicos e acadêmicos
- **Searx/SearxNG**: Mecanismo de metabusca auto-hospedado
- Requer `SEARX_HOST` no seu arquivo `.env`
- Suporta integração com Searx ou SearxNG
Para configurar o seu mecanismo preferido, defina a variável `SEARCH_API` no seu arquivo:
```bash

View File

@@ -168,6 +168,10 @@ DeerFlow поддерживает несколько поисковых сист
- Не требуется API-ключ
- Специализируется на научных и академических статьях
- **Searx/SearxNG**: Самостоятельно размещённая метапоисковая система
- Требуется `SEARX_HOST` в вашем файле `.env`
- Поддерживает подключение к Searx или SearxNG
Чтобы настроить предпочитаемую поисковую систему, установите переменную `SEARCH_API` в вашем файле `.env`:
```bash

View File

@@ -163,6 +163,10 @@ DeerFlow 支持多种搜索引擎,可以在`.env`文件中通过`SEARCH_API`
- 无需 API 密钥
- 专为科学和学术论文设计
- **Searx/SearxNG**:自托管的元搜索引擎
- 需要在`.env`文件中设置`SEARX_HOST`
- 支持对接Searx或SearxNG
要配置您首选的搜索引擎,请在`.env`文件中设置`SEARCH_API`变量:
```bash

View File

@@ -14,6 +14,7 @@ class SearchEngine(enum.Enum):
DUCKDUCKGO = "duckduckgo"
BRAVE_SEARCH = "brave_search"
ARXIV = "arxiv"
SEARX = "searx"
WIKIPEDIA = "wikipedia"

View File

@@ -8,12 +8,14 @@ from typing import List, Optional
from langchain_community.tools import (
BraveSearch,
DuckDuckGoSearchResults,
SearxSearchRun,
WikipediaQueryRun,
)
from langchain_community.tools.arxiv import ArxivQueryRun
from langchain_community.utilities import (
ArxivAPIWrapper,
BraveSearchWrapper,
SearxSearchWrapper,
WikipediaAPIWrapper,
)
@@ -30,6 +32,7 @@ LoggedTavilySearch = create_logged_tool(TavilySearchWithImages)
LoggedDuckDuckGoSearch = create_logged_tool(DuckDuckGoSearchResults)
LoggedBraveSearch = create_logged_tool(BraveSearch)
LoggedArxivSearch = create_logged_tool(ArxivQueryRun)
LoggedSearxSearch = create_logged_tool(SearxSearchRun)
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
@@ -88,6 +91,13 @@ def get_web_search_tool(max_search_results: int):
load_all_available_meta=True,
),
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.SEARX.value:
return LoggedSearxSearch(
name="web_search",
wrapper=SearxSearchWrapper(
k=max_search_results,
)
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.WIKIPEDIA.value:
wiki_lang = search_config.get("wikipedia_lang", "en")
wiki_doc_content_chars_max = search_config.get(