mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-04-02 22:02:13 +08:00
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:
@@ -22,9 +22,10 @@ ENABLE_MCP_SERVER_CONFIGURATION=false
|
|||||||
# Otherwise, you system could be compromised.
|
# Otherwise, you system could be compromised.
|
||||||
ENABLE_PYTHON_REPL=false
|
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
|
SEARCH_API=tavily
|
||||||
TAVILY_API_KEY=tvly-xxx
|
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
|
# BRAVE_SEARCH_API_KEY=xxx # Required only if SEARCH_API is brave_search
|
||||||
# JINA_API_KEY=jina_xxx # Optional, default is None
|
# JINA_API_KEY=jina_xxx # Optional, default is None
|
||||||
|
|
||||||
|
|||||||
@@ -169,6 +169,10 @@ DeerFlow supports multiple search engines that can be configured in your `.env`
|
|||||||
- No API key required
|
- No API key required
|
||||||
- Specialized for scientific and academic papers
|
- 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:
|
To configure your preferred search engine, set the `SEARCH_API` variable in your `.env` file:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -167,6 +167,10 @@ DeerFlow unterstützt mehrere Suchmaschinen, die in Ihrer `.env`-Datei über die
|
|||||||
- Kein API-Schlüssel erforderlich
|
- Kein API-Schlüssel erforderlich
|
||||||
- Spezialisiert auf wissenschaftliche und akademische Papiere
|
- 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:
|
Um Ihre bevorzugte Suchmaschine zu konfigurieren, setzen Sie die Variable `SEARCH_API` in Ihrer `.env`-Datei:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -168,6 +168,10 @@ DeerFlow soporta múltiples motores de búsqueda que pueden configurarse en tu a
|
|||||||
- No requiere clave API
|
- No requiere clave API
|
||||||
- Especializado en artículos científicos y académicos
|
- 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`:
|
Para configurar tu motor de búsqueda preferido, establece la variable `SEARCH_API` en tu archivo `.env`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -162,6 +162,10 @@ DeerFlow は複数の検索エンジンをサポートしており、`.env`フ
|
|||||||
- APIキー不要
|
- APIキー不要
|
||||||
- 科学・学術論文専用
|
- 科学・学術論文専用
|
||||||
|
|
||||||
|
- **Searx/SearxNG**セルフホスト型メタ検索エンジン
|
||||||
|
- `.env`ファイルに`SEARX_HOST`が必要
|
||||||
|
- Searx または SearxNG に接続可能
|
||||||
|
|
||||||
お好みの検索エンジンを設定するには、`.env`ファイルで`SEARCH_API`変数を設定します:
|
お好みの検索エンジンを設定するには、`.env`ファイルで`SEARCH_API`変数を設定します:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -171,6 +171,10 @@ DeerFlow suporta múltiplos mecanismos de busca que podem ser configurados no se
|
|||||||
- Não requer chave API
|
- Não requer chave API
|
||||||
- Especializado em artigos científicos e acadêmicos
|
- 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:
|
Para configurar o seu mecanismo preferido, defina a variável `SEARCH_API` no seu arquivo:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -168,6 +168,10 @@ DeerFlow поддерживает несколько поисковых сист
|
|||||||
- Не требуется API-ключ
|
- Не требуется API-ключ
|
||||||
- Специализируется на научных и академических статьях
|
- Специализируется на научных и академических статьях
|
||||||
|
|
||||||
|
- **Searx/SearxNG**: Самостоятельно размещённая метапоисковая система
|
||||||
|
- Требуется `SEARX_HOST` в вашем файле `.env`
|
||||||
|
- Поддерживает подключение к Searx или SearxNG
|
||||||
|
|
||||||
Чтобы настроить предпочитаемую поисковую систему, установите переменную `SEARCH_API` в вашем файле `.env`:
|
Чтобы настроить предпочитаемую поисковую систему, установите переменную `SEARCH_API` в вашем файле `.env`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -163,6 +163,10 @@ DeerFlow 支持多种搜索引擎,可以在`.env`文件中通过`SEARCH_API`
|
|||||||
- 无需 API 密钥
|
- 无需 API 密钥
|
||||||
- 专为科学和学术论文设计
|
- 专为科学和学术论文设计
|
||||||
|
|
||||||
|
- **Searx/SearxNG**:自托管的元搜索引擎
|
||||||
|
- 需要在`.env`文件中设置`SEARX_HOST`
|
||||||
|
- 支持对接Searx或SearxNG
|
||||||
|
|
||||||
要配置您首选的搜索引擎,请在`.env`文件中设置`SEARCH_API`变量:
|
要配置您首选的搜索引擎,请在`.env`文件中设置`SEARCH_API`变量:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ class SearchEngine(enum.Enum):
|
|||||||
DUCKDUCKGO = "duckduckgo"
|
DUCKDUCKGO = "duckduckgo"
|
||||||
BRAVE_SEARCH = "brave_search"
|
BRAVE_SEARCH = "brave_search"
|
||||||
ARXIV = "arxiv"
|
ARXIV = "arxiv"
|
||||||
|
SEARX = "searx"
|
||||||
WIKIPEDIA = "wikipedia"
|
WIKIPEDIA = "wikipedia"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,14 @@ from typing import List, Optional
|
|||||||
from langchain_community.tools import (
|
from langchain_community.tools import (
|
||||||
BraveSearch,
|
BraveSearch,
|
||||||
DuckDuckGoSearchResults,
|
DuckDuckGoSearchResults,
|
||||||
|
SearxSearchRun,
|
||||||
WikipediaQueryRun,
|
WikipediaQueryRun,
|
||||||
)
|
)
|
||||||
from langchain_community.tools.arxiv import ArxivQueryRun
|
from langchain_community.tools.arxiv import ArxivQueryRun
|
||||||
from langchain_community.utilities import (
|
from langchain_community.utilities import (
|
||||||
ArxivAPIWrapper,
|
ArxivAPIWrapper,
|
||||||
BraveSearchWrapper,
|
BraveSearchWrapper,
|
||||||
|
SearxSearchWrapper,
|
||||||
WikipediaAPIWrapper,
|
WikipediaAPIWrapper,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -30,6 +32,7 @@ LoggedTavilySearch = create_logged_tool(TavilySearchWithImages)
|
|||||||
LoggedDuckDuckGoSearch = create_logged_tool(DuckDuckGoSearchResults)
|
LoggedDuckDuckGoSearch = create_logged_tool(DuckDuckGoSearchResults)
|
||||||
LoggedBraveSearch = create_logged_tool(BraveSearch)
|
LoggedBraveSearch = create_logged_tool(BraveSearch)
|
||||||
LoggedArxivSearch = create_logged_tool(ArxivQueryRun)
|
LoggedArxivSearch = create_logged_tool(ArxivQueryRun)
|
||||||
|
LoggedSearxSearch = create_logged_tool(SearxSearchRun)
|
||||||
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
|
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
|
||||||
|
|
||||||
|
|
||||||
@@ -88,6 +91,13 @@ def get_web_search_tool(max_search_results: int):
|
|||||||
load_all_available_meta=True,
|
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:
|
elif SELECTED_SEARCH_ENGINE == SearchEngine.WIKIPEDIA.value:
|
||||||
wiki_lang = search_config.get("wikipedia_lang", "en")
|
wiki_lang = search_config.get("wikipedia_lang", "en")
|
||||||
wiki_doc_content_chars_max = search_config.get(
|
wiki_doc_content_chars_max = search_config.get(
|
||||||
|
|||||||
Reference in New Issue
Block a user