快速结论:使用 Open WebUI 的 searchapi 网络搜索提供程序(尤其是 SEARCHAPI_ENGINE=google_news)时,如果出现搜索结果为空、新闻结果丢失或返回 Google 跳转链接,通常是因为该提供程序只读取 organic_results、未检查 HTTP 状态码、也未请求解析后的链接。
适用环境:Open WebUI dev 分支,涉及文件 backend/open_webui/retrieval/web/searchapi.py,已针对 searchapi.io 线上 API 验证(报告时间为 2026-09-21)。Issue 未提供操作系统、Python、CUDA、显卡等环境信息。
最快修复方案:暂无确认的一步修复方案(Issue 中的补丁为作者建议,未标记为已合并)。可优先尝试的临时规避方式:将 SEARCHAPI_ENGINE 改为非 google_news 的引擎(例如返回 organic_results 的引擎),以避免新闻结果被丢弃。
注意事项:上述规避方式只能绕开新闻结果丢失的问题,无法解决 API 密钥失效被静默吞掉、Google 跳转链接、缺少超时等问题;同目录下的 serpapi.py 可能存在同类错误处理、超时、日志和 KeyError 问题,但 Issue 未对其展开验证。
问题场景
管理员在 Open WebUI 中将 Web Search 提供程序设为 searchapi,并通过 SEARCHAPI_ENGINE 选择 google_news 引擎后,执行搜索(例如查询 premier league)返回 0 条结果;而实际 API 响应在 top_stories 字段中包含 20 篇文章。此外,当 SEARCHAPI_API_KEY 配置为无效值时,搜索返回空结果而不报错;返回的新闻链接为 Google 跳转地址,Web 加载器无法抓取。
报错原文
searchapi.io search failed: Invalid API key.
ValueError: ...
Issue 中提供的复现输出:
>>> search_searchapi('bad-key', 'google', 'test', 3)
[] # the API replied 401 {"error": "Invalid API key."}
原因分析
问题集中在 backend/open_webui/retrieval/web/searchapi.py,Issue 列出以下几点(均为已观察到的行为):
- 新闻结果被丢弃:提供程序只读取
organic_results。google_news引擎会把结果拆分到organic_results和top_stories,很多查询在前者下返回极少或为空。Issue 实测num=5时,premier league在organic_results为 0、top_stories为 20,最终返回 0 条。 - API 错误被当成“无结果”:代码没有调用
raise_for_status(),而错误响应没有organic_results键,因此.get('organic_results', [])返回空列表,管理员看到的是空搜索结果而非认证错误。 - 新闻链接是 Google 跳转地址:未加
link=resolved参数时,google_news返回https://www.google.com/goto?url=...形式,而非文章原始 URL。Issue 实测 10 条链接全部为跳转地址。 - 其他小问题:无链接的行会导致
result['link']抛出KeyError;请求无超时,连接挂起会阻塞工作线程;每次搜索都在 INFO 级别记录完整响应体;调用方的count未传给 API,结果先在服务端拉取再在客户端截断(Issue 作者测试中未影响 Google 网页搜索结果的数量,属于正确性而非结果数问题)。
环境排查
- 确认 Open WebUI 分支/版本是否为
dev,以及backend/open_webui/retrieval/web/searchapi.py是否为当前内容。 - 确认 Web Search 提供程序是否设置为
searchapi。 - 确认
SEARCHAPI_ENGINE的取值(google_news会触发新闻结果丢失和跳转链接问题)。 - 确认
SEARCHAPI_API_KEY是否有效(无效密钥会命中静默吞错问题)。 - Issue 未提供 Python、CUDA、PyTorch、显卡、依赖版本等信息,无需据此排查。
解决步骤
- 先按 Issue 的复现路径确认问题:将 Web Search 设为
searchapi,设置SEARCHAPI_ENGINE=google_news,搜索premier league,观察是否返回 0 条而 API 响应中top_stories有 20 条。 - 验证错误静默问题:将
SEARCHAPI_API_KEY改为任意无效值并执行搜索,确认返回空结果而非错误提示。 - 若只是希望尽快恢复可用结果,可优先尝试将
SEARCHAPI_ENGINE改为非google_news的引擎,避开只读organic_results带来的新闻结果丢失。此项为依据 Issue 分析得出的规避思路,未在 Issue 中明确验证。 - 若需要根治,Issue 作者提供了参考补丁,其思路包括:同时读取两个结果块并按链接去重、发送请求的
count和link=resolved、使用 API 自身的错误信息抛出异常、跳过无链接行、增加超时、将响应体输出降为 DEBUG。该补丁未确认已被合并,应用前需自行验证。 - Issue 作者还指出
serpapi.py是该文件的近似副本,共享错误处理、超时、日志和KeyError问题,但响应结构不同,Issue 未给出对应修复。如需处理,建议单独跟进。
验证方法
若按 Issue 补丁思路修改,可对照作者给出的验证结果:google_news 下 premier league 的结果从 0 变为 5;跳转链接从 10/10 变为 0/10;使用无效密钥时会抛出 searchapi.io search failed: Invalid API key.。若采用切换引擎的规避方式,则确认搜索能正常返回结果即可。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。

![[Bug]: Batch runner misclassifies a successful diarized transcription as streaming](https://www.chat-gpts.plus/wp-content/uploads/2026/09/57944-9da86baa-768x403.jpg)
![[Perf] SM8x sparse-MLA prefill fallback re-reads the shared MLA latent once per head (~64x redundant KV traffic)](https://www.chat-gpts.plus/wp-content/uploads/2026/09/57971-715139ff-768x403.jpg)