LangChain调用Searx API遇Too Many Requests错误求助
解决Searx API请求超限(Too Many Requests)问题
以下是几种可行的解决方法:
1. 添加请求延迟与重试机制
公共Searx实例普遍有请求频率限制,通过在请求之间添加延迟,并对失败请求进行重试,可避免触发限流。使用tenacity库实现重试逻辑:
首先安装依赖:
pip install tenacity
然后修改工具调用逻辑,给Searx搜索工具添加重试装饰器:
from tenacity import retry, stop_after_attempt, wait_exponential_jitter from langchain.tools.searx_search.tool import SearxSearchTool from langchain.agents import initialize_agent, AgentType # 自定义带重试的Searx工具 class RetrySearxSearchTool(SearxSearchTool): @retry(stop=stop_after_attempt(3), wait=wait_exponential_jitter(jitter=1)) def _run(self, query: str) -> str: return super()._run(query) # 初始化工具 tools = [RetrySearxSearchTool(searx_host="https://search.bus-hit.me/")] # 后续agent初始化和调用不变 agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("What is the weather in Pomfret")
2. 更换公共Searx实例
不同公共Searx实例的限流策略不同,更换限制更宽松的实例即可。修改代码中的searx_host参数:
tools = load_tools(["searx-search"], searx_host="https://searx.be/", llm=llm)
3. 部署私有Searx实例
如果频繁使用搜索功能,建议自己部署Searx实例,完全不受公共实例的限流约束。通过Docker快速部署:
docker run -d -p 8080:8080 searx/searx
部署完成后,将searx_host设置为自己的实例地址(如http://localhost:8080/)即可。
4. 替换为其他搜索工具
如果不想在Searx上耗费精力,可改用LangChain支持的其他搜索工具,比如SerpAPI:
# 安装依赖 # pip install google-search-results from langchain.tools import load_tools from langchain.agents import initialize_agent, AgentType tools = load_tools(["serpapi"], serpapi_api_key="你的SerpAPI密钥", llm=llm) agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) agent.run("What is the weather in Pomfret")
内容的提问来源于stack exchange,提问作者aden_lin
相关产品推荐
相关产品推荐

