跳转到内容

Serpex

SERPEX 工具用于 LlamaIndex。

Serpex工具规范 #

基类:EventBaseToolSpec

SERPEX 工具的网页搜索规范。

该工具允许您使用SERPEX API搜索网络,并从多个搜索引擎获取实时搜索结果,包括Google、Bing、DuckDuckGo、Brave、Yahoo和Yandex。

SERPEX 通过 API 提供快速可靠的搜索结果,非常适合 AI 应用、RAG 系统和数据分析。

参数:

名称 类型 描述 默认
api_key Optional[str]

SERPEX API密钥。如果未提供,将查找SERPEX_API_KEY环境变量。

None
engine str

默认使用的搜索引擎。选项:'auto'(默认)、 'google'、'bing'、'duckduckgo'、'brave'、'yahoo'、'yandex'。

'auto'

示例:

>>> from llama_index.tools.serpex import SerpexToolSpec
>>> tool = SerpexToolSpec(api_key="your_api_key")
>>> results = tool.search("latest AI news")
>>> for doc in results:
...     print(doc.text)
workflows/handler.py 中的源代码llama_index/tools/serpex/base.py
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
class SerpexToolSpec(BaseToolSpec):
    """
    SERPEX tool spec for web search.

    This tool allows you to search the web using the SERPEX API and get
    real-time search results from multiple search engines including Google,
    Bing, DuckDuckGo, Brave, Yahoo, and Yandex.

    SERPEX provides fast, reliable search results via API, perfect for
    AI applications, RAG systems, and data analytics.

    Args:
        api_key (Optional[str]): SERPEX API key. If not provided, will look
            for SERPEX_API_KEY environment variable.
        engine (str): Default search engine to use. Options: 'auto' (default),
            'google', 'bing', 'duckduckgo', 'brave', 'yahoo', 'yandex'.

    Examples:
        >>> from llama_index.tools.serpex import SerpexToolSpec
        >>> tool = SerpexToolSpec(api_key="your_api_key")
        >>> results = tool.search("latest AI news")
        >>> for doc in results:
        ...     print(doc.text)
    """

    spec_functions = ["search"]

    def __init__(
        self,
        api_key: Optional[str] = None,
        engine: str = "auto",
    ) -> None:
        """
        Initialize SERPEX tool.

        Args:
            api_key: SERPEX API key. If not provided, reads from
                SERPEX_API_KEY environment variable.
            engine: Default search engine ('auto', 'google', 'bing', etc.).

        Raises:
            ValueError: If API key is not provided and not found in environment.
        """
        self.api_key = api_key or os.environ.get("SERPEX_API_KEY")

        if not self.api_key:
            raise ValueError(
                "SERPEX_API_KEY not found. Please set it as an environment "
                "variable or pass it as an argument. "
                "Get your API key at: https://serpex.dev/dashboard"
            )

        self.base_url = "https://api.serpex.dev/api/search"
        self.engine = engine

    def search(
        self,
        query: str,
        num_results: int = 10,
        engine: Optional[str] = None,
        time_range: Optional[str] = None,
    ) -> List[Document]:
        """
        Search the web using SERPEX API.

        This function queries the specified search engine and returns structured
        results containing titles, URLs, and snippets.

        Args:
            query: Search query string.
            num_results: Number of results to return (default: 10, max: 100).
            engine: Override default search engine. Options: 'auto', 'google',
                'bing', 'duckduckgo', 'brave', 'yahoo', 'yandex'.
            time_range: Filter results by time. Options: 'day', 'week',
                'month', 'year'.

        Returns:
            List of Document objects, one per search result.
            Each document contains the title, URL, and snippet in its text,
            with metadata including search details.

        Examples:
            >>> tool = SerpexToolSpec(api_key="your_key")
            >>> results = tool.search("LlamaIndex tutorial", num_results=5)
            >>> for doc in results:
            ...     print(f"Title: {doc.metadata['title']}")
            ...     print(f"URL: {doc.metadata['url']}")
            ...     print(doc.text)

            >>> # Search with specific engine
            >>> results = tool.search(
            ...     "privacy focused browser",
            ...     engine="duckduckgo",
            ...     num_results=5
            ... )

            >>> # Search with time filter
            >>> results = tool.search(
            ...     "AI news",
            ...     time_range="day",
            ...     num_results=10
            ... )
        """
        params: Dict[str, Any] = {
            "q": query,
            "engine": engine or self.engine,
            "category": "web",
        }

        if num_results:
            params["num"] = min(num_results, 100)  # Cap at 100

        if time_range:
            params["time_range"] = time_range

        try:
            response = requests.get(
                self.base_url,
                params=params,
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                },
                timeout=30,
            )
            response.raise_for_status()

            data = response.json()

            # Extract results from the response
            results_list = data.get("results", [])

            if not results_list:
                return []

            # Get metadata
            api_metadata = data.get("metadata", {})
            num_results_total = api_metadata.get("number_of_results", 0)
            response_time = api_metadata.get("response_time", 0)

            # Create documents for each result
            documents = []
            for result in results_list[:num_results]:
                title = result.get("title", "No title")
                url = result.get("url", "")
                snippet = result.get("snippet", "No description available")

                text = f"{title}\nURL: {url}\n{snippet}"

                metadata = {
                    "title": title,
                    "url": url,
                    "snippet": snippet,
                    "number_of_results": num_results_total,
                    "response_time": response_time,
                    "query": query,
                    "engine": engine or self.engine,
                }

                documents.append(Document(text=text, metadata=metadata))

            return documents

        except requests.exceptions.RequestException as e:
            raise e

搜索 #

search(query: str, num_results: int = 10, engine: Optional[str] = None, time_range: Optional[str] = None) -> List[文档]

使用 SERPEX API 搜索网页。

此函数查询指定的搜索引擎并返回包含标题、URL和摘要片段的结构化结果。

参数:

名称 类型 描述 默认
query str

搜索查询字符串。

required
num_results int

返回结果数量(默认:10,最大:100)。

10
engine Optional[str]

覆盖默认搜索引擎。选项:'auto'、'google'、'bing'、'duckduckgo'、'brave'、'yahoo'、'yandex'。

None
time_range Optional[str]

按时间筛选结果。选项:'day', 'week', 'month', 'year'。

None

返回:

类型 描述
List[文档]

文档对象列表,每个搜索结果对应一个文档对象。

List[文档]

每个文档在其文本中包含标题、URL和摘要片段,

List[文档]

包含搜索详情的元数据。

示例:

>>> tool = SerpexToolSpec(api_key="your_key")
>>> results = tool.search("LlamaIndex tutorial", num_results=5)
>>> for doc in results:
...     print(f"Title: {doc.metadata['title']}")
...     print(f"URL: {doc.metadata['url']}")
...     print(doc.text)
>>> # Search with specific engine
>>> results = tool.search(
...     "privacy focused browser",
...     engine="duckduckgo",
...     num_results=5
... )
>>> # Search with time filter
>>> results = tool.search(
...     "AI news",
...     time_range="day",
...     num_results=10
... )
workflows/handler.py 中的源代码llama_index/tools/serpex/base.py
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
def search(
    self,
    query: str,
    num_results: int = 10,
    engine: Optional[str] = None,
    time_range: Optional[str] = None,
) -> List[Document]:
    """
    Search the web using SERPEX API.

    This function queries the specified search engine and returns structured
    results containing titles, URLs, and snippets.

    Args:
        query: Search query string.
        num_results: Number of results to return (default: 10, max: 100).
        engine: Override default search engine. Options: 'auto', 'google',
            'bing', 'duckduckgo', 'brave', 'yahoo', 'yandex'.
        time_range: Filter results by time. Options: 'day', 'week',
            'month', 'year'.

    Returns:
        List of Document objects, one per search result.
        Each document contains the title, URL, and snippet in its text,
        with metadata including search details.

    Examples:
        >>> tool = SerpexToolSpec(api_key="your_key")
        >>> results = tool.search("LlamaIndex tutorial", num_results=5)
        >>> for doc in results:
        ...     print(f"Title: {doc.metadata['title']}")
        ...     print(f"URL: {doc.metadata['url']}")
        ...     print(doc.text)

        >>> # Search with specific engine
        >>> results = tool.search(
        ...     "privacy focused browser",
        ...     engine="duckduckgo",
        ...     num_results=5
        ... )

        >>> # Search with time filter
        >>> results = tool.search(
        ...     "AI news",
        ...     time_range="day",
        ...     num_results=10
        ... )
    """
    params: Dict[str, Any] = {
        "q": query,
        "engine": engine or self.engine,
        "category": "web",
    }

    if num_results:
        params["num"] = min(num_results, 100)  # Cap at 100

    if time_range:
        params["time_range"] = time_range

    try:
        response = requests.get(
            self.base_url,
            params=params,
            headers={
                "Authorization": f"Bearer {self.api_key}",
            },
            timeout=30,
        )
        response.raise_for_status()

        data = response.json()

        # Extract results from the response
        results_list = data.get("results", [])

        if not results_list:
            return []

        # Get metadata
        api_metadata = data.get("metadata", {})
        num_results_total = api_metadata.get("number_of_results", 0)
        response_time = api_metadata.get("response_time", 0)

        # Create documents for each result
        documents = []
        for result in results_list[:num_results]:
            title = result.get("title", "No title")
            url = result.get("url", "")
            snippet = result.get("snippet", "No description available")

            text = f"{title}\nURL: {url}\n{snippet}"

            metadata = {
                "title": title,
                "url": url,
                "snippet": snippet,
                "number_of_results": num_results_total,
                "response_time": response_time,
                "query": query,
                "engine": engine or self.engine,
            }

            documents.append(Document(text=text, metadata=metadata))

        return documents

    except requests.exceptions.RequestException as e:
        raise e

选项: 成员:- SerpexToolSpec