mirror of
https://gitee.com/wanwujie/deer-flow
synced 2026-05-03 18:50:43 +08:00
Feat: Add Wikipedia search engine (#478)
* feat: add Wikipedia search engine * wikipedia * make format
This commit is contained in:
@@ -33,6 +33,7 @@ dependencies = [
|
|||||||
"mcp>=1.6.0",
|
"mcp>=1.6.0",
|
||||||
"langchain-mcp-adapters>=0.0.9",
|
"langchain-mcp-adapters>=0.0.9",
|
||||||
"langchain-deepseek>=0.1.3",
|
"langchain-deepseek>=0.1.3",
|
||||||
|
"wikipedia>=1.4.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class SearchEngine(enum.Enum):
|
|||||||
DUCKDUCKGO = "duckduckgo"
|
DUCKDUCKGO = "duckduckgo"
|
||||||
BRAVE_SEARCH = "brave_search"
|
BRAVE_SEARCH = "brave_search"
|
||||||
ARXIV = "arxiv"
|
ARXIV = "arxiv"
|
||||||
|
WIKIPEDIA = "wikipedia"
|
||||||
|
|
||||||
|
|
||||||
# Tool configuration
|
# Tool configuration
|
||||||
|
|||||||
@@ -5,9 +5,17 @@ import logging
|
|||||||
import os
|
import os
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
|
|
||||||
from langchain_community.tools import BraveSearch, DuckDuckGoSearchResults
|
from langchain_community.tools import (
|
||||||
|
BraveSearch,
|
||||||
|
DuckDuckGoSearchResults,
|
||||||
|
WikipediaQueryRun,
|
||||||
|
)
|
||||||
from langchain_community.tools.arxiv import ArxivQueryRun
|
from langchain_community.tools.arxiv import ArxivQueryRun
|
||||||
from langchain_community.utilities import ArxivAPIWrapper, BraveSearchWrapper
|
from langchain_community.utilities import (
|
||||||
|
ArxivAPIWrapper,
|
||||||
|
BraveSearchWrapper,
|
||||||
|
WikipediaAPIWrapper,
|
||||||
|
)
|
||||||
|
|
||||||
from src.config import SearchEngine, SELECTED_SEARCH_ENGINE
|
from src.config import SearchEngine, SELECTED_SEARCH_ENGINE
|
||||||
from src.config import load_yaml_config
|
from src.config import load_yaml_config
|
||||||
@@ -24,6 +32,7 @@ LoggedTavilySearch = create_logged_tool(TavilySearchResultsWithImages)
|
|||||||
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)
|
||||||
|
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
|
||||||
|
|
||||||
|
|
||||||
def get_search_config():
|
def get_search_config():
|
||||||
@@ -76,5 +85,19 @@ def get_web_search_tool(max_search_results: int):
|
|||||||
load_all_available_meta=True,
|
load_all_available_meta=True,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
elif SELECTED_SEARCH_ENGINE == SearchEngine.WIKIPEDIA.value:
|
||||||
|
wiki_lang = search_config.get("wikipedia_lang", "en")
|
||||||
|
wiki_doc_content_chars_max = search_config.get(
|
||||||
|
"wikipedia_doc_content_chars_max", 4000
|
||||||
|
)
|
||||||
|
return LoggedWikipediaSearch(
|
||||||
|
name="web_search",
|
||||||
|
api_wrapper=WikipediaAPIWrapper(
|
||||||
|
lang=wiki_lang,
|
||||||
|
top_k_results=max_search_results,
|
||||||
|
load_all_available_meta=True,
|
||||||
|
doc_content_chars_max=wiki_doc_content_chars_max,
|
||||||
|
),
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unsupported search engine: {SELECTED_SEARCH_ENGINE}")
|
raise ValueError(f"Unsupported search engine: {SELECTED_SEARCH_ENGINE}")
|
||||||
|
|||||||
34
uv.lock
generated
34
uv.lock
generated
@@ -393,6 +393,7 @@ dependencies = [
|
|||||||
{ name = "socksio" },
|
{ name = "socksio" },
|
||||||
{ name = "sse-starlette" },
|
{ name = "sse-starlette" },
|
||||||
{ name = "uvicorn" },
|
{ name = "uvicorn" },
|
||||||
|
{ name = "wikipedia" },
|
||||||
{ name = "yfinance" },
|
{ name = "yfinance" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -439,6 +440,7 @@ requires-dist = [
|
|||||||
{ name = "socksio", specifier = ">=1.0.0" },
|
{ name = "socksio", specifier = ">=1.0.0" },
|
||||||
{ name = "sse-starlette", specifier = ">=1.6.5" },
|
{ name = "sse-starlette", specifier = ">=1.6.5" },
|
||||||
{ name = "uvicorn", specifier = ">=0.27.1" },
|
{ name = "uvicorn", specifier = ">=0.27.1" },
|
||||||
|
{ name = "wikipedia", specifier = ">=1.4.0" },
|
||||||
{ name = "yfinance", specifier = ">=0.2.54" },
|
{ name = "yfinance", specifier = ">=0.2.54" },
|
||||||
]
|
]
|
||||||
provides-extras = ["dev", "test"]
|
provides-extras = ["dev", "test"]
|
||||||
@@ -974,10 +976,10 @@ name = "langgraph"
|
|||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "langchain-core", marker = "python_full_version < '4.0'" },
|
{ name = "langchain-core", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-checkpoint" },
|
{ name = "langgraph-checkpoint" },
|
||||||
{ name = "langgraph-prebuilt", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-prebuilt", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-sdk", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-sdk", marker = "python_full_version < '4'" },
|
||||||
{ name = "pydantic" },
|
{ name = "pydantic" },
|
||||||
{ name = "xxhash" },
|
{ name = "xxhash" },
|
||||||
]
|
]
|
||||||
@@ -995,11 +997,11 @@ dependencies = [
|
|||||||
{ name = "cryptography" },
|
{ name = "cryptography" },
|
||||||
{ name = "httpx" },
|
{ name = "httpx" },
|
||||||
{ name = "jsonschema-rs" },
|
{ name = "jsonschema-rs" },
|
||||||
{ name = "langchain-core", marker = "python_full_version < '4.0'" },
|
{ name = "langchain-core", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-checkpoint", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-checkpoint", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-runtime-inmem" },
|
{ name = "langgraph-runtime-inmem" },
|
||||||
{ name = "langgraph-sdk", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-sdk", marker = "python_full_version < '4'" },
|
||||||
{ name = "langsmith" },
|
{ name = "langsmith" },
|
||||||
{ name = "orjson" },
|
{ name = "orjson" },
|
||||||
{ name = "pyjwt" },
|
{ name = "pyjwt" },
|
||||||
@@ -1043,8 +1045,8 @@ wheels = [
|
|||||||
|
|
||||||
[package.optional-dependencies]
|
[package.optional-dependencies]
|
||||||
inmem = [
|
inmem = [
|
||||||
{ name = "langgraph-api", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-api", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-runtime-inmem", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-runtime-inmem", marker = "python_full_version < '4'" },
|
||||||
{ name = "python-dotenv" },
|
{ name = "python-dotenv" },
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -1067,8 +1069,8 @@ version = "0.0.11"
|
|||||||
source = { registry = "https://pypi.org/simple" }
|
source = { registry = "https://pypi.org/simple" }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "blockbuster" },
|
{ name = "blockbuster" },
|
||||||
{ name = "langgraph", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph", marker = "python_full_version < '4'" },
|
||||||
{ name = "langgraph-checkpoint", marker = "python_full_version < '4.0'" },
|
{ name = "langgraph-checkpoint", marker = "python_full_version < '4'" },
|
||||||
{ name = "sse-starlette" },
|
{ name = "sse-starlette" },
|
||||||
{ name = "starlette" },
|
{ name = "starlette" },
|
||||||
{ name = "structlog" },
|
{ name = "structlog" },
|
||||||
@@ -2235,6 +2237,16 @@ wheels = [
|
|||||||
{ url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" },
|
{ url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wikipedia"
|
||||||
|
version = "1.4.0"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
dependencies = [
|
||||||
|
{ name = "beautifulsoup4" },
|
||||||
|
{ name = "requests" },
|
||||||
|
]
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/67/35/25e68fbc99e672127cc6fbb14b8ec1ba3dfef035bf1e4c90f78f24a80b7d/wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2", size = 27748, upload-time = "2014-11-15T15:59:49.808Z" }
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xxhash"
|
name = "xxhash"
|
||||||
version = "3.5.0"
|
version = "3.5.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user