feat: add Serper search engine support (#762)

* feat: add Serper search engine support

* docs: update configuration guide and env example for Serper

* test: add test case for Serper with missing API key
This commit is contained in:
Willem Jiang
2025-12-15 23:04:26 +08:00
committed by GitHub
parent 93d81d450d
commit 2a97170b6c
5 changed files with 47 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ class SearchEngine(enum.Enum):
ARXIV = "arxiv"
SEARX = "searx"
WIKIPEDIA = "wikipedia"
SERPER = "serper"
class CrawlerEngine(enum.Enum):

View File

@@ -8,6 +8,7 @@ from typing import List, Optional
from langchain_community.tools import (
BraveSearch,
DuckDuckGoSearchResults,
GoogleSerperRun,
SearxSearchRun,
WikipediaQueryRun,
)
@@ -15,6 +16,7 @@ from langchain_community.tools.arxiv import ArxivQueryRun
from langchain_community.utilities import (
ArxivAPIWrapper,
BraveSearchWrapper,
GoogleSerperAPIWrapper,
SearxSearchWrapper,
WikipediaAPIWrapper,
)
@@ -33,6 +35,7 @@ LoggedTavilySearch = create_logged_tool(TavilySearchWithImages)
LoggedInfoQuestSearch = create_logged_tool(InfoQuestSearchResults)
LoggedDuckDuckGoSearch = create_logged_tool(DuckDuckGoSearchResults)
LoggedBraveSearch = create_logged_tool(BraveSearch)
LoggedSerperSearch = create_logged_tool(GoogleSerperRun)
LoggedArxivSearch = create_logged_tool(ArxivQueryRun)
LoggedSearxSearch = create_logged_tool(SearxSearchRun)
LoggedWikipediaSearch = create_logged_tool(WikipediaQueryRun)
@@ -102,6 +105,14 @@ def get_web_search_tool(max_search_results: int):
search_kwargs={"count": max_search_results},
),
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.SERPER.value:
return LoggedSerperSearch(
name="web_search",
api_wrapper=GoogleSerperAPIWrapper(
k=max_search_results,
serper_api_key=os.getenv("SERPER_API_KEY", ""),
),
)
elif SELECTED_SEARCH_ENGINE == SearchEngine.ARXIV.value:
return LoggedArxivSearch(
name="web_search",