ValueError: + pass

使用 Open WebUI 的 searchapi 网络搜索提供程序(尤其是 SEARCHAPI_ENGINE=google_news )时,如果出现搜索结果为空、新闻结果丢失或返回 Google 跳转链接,通常是因为该提供程序只读取 organic_results 、未检查 HTTP 状态码、也未

快速结论:使用 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_resultsgoogle_news 引擎会把结果拆分到 organic_resultstop_stories,很多查询在前者下返回极少或为空。Issue 实测 num=5 时,premier leagueorganic_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、显卡、依赖版本等信息,无需据此排查。

解决步骤

  1. 先按 Issue 的复现路径确认问题:将 Web Search 设为 searchapi,设置 SEARCHAPI_ENGINE=google_news,搜索 premier league,观察是否返回 0 条而 API 响应中 top_stories 有 20 条。
  2. 验证错误静默问题:将 SEARCHAPI_API_KEY 改为任意无效值并执行搜索,确认返回空结果而非错误提示。
  3. 若只是希望尽快恢复可用结果,可优先尝试将 SEARCHAPI_ENGINE 改为非 google_news 的引擎,避开只读 organic_results 带来的新闻结果丢失。此项为依据 Issue 分析得出的规避思路,未在 Issue 中明确验证。
  4. 若需要根治,Issue 作者提供了参考补丁,其思路包括:同时读取两个结果块并按链接去重、发送请求的 countlink=resolved、使用 API 自身的错误信息抛出异常、跳过无链接行、增加超时、将响应体输出降为 DEBUG。该补丁未确认已被合并,应用前需自行验证。
  5. Issue 作者还指出 serpapi.py 是该文件的近似副本,共享错误处理、超时、日志和 KeyError 问题,但响应结构不同,Issue 未给出对应修复。如需处理,建议单独跟进。

验证方法

若按 Issue 补丁思路修改,可对照作者给出的验证结果:google_newspremier league 的结果从 0 变为 5;跳转链接从 10/10 变为 0/10;使用无效密钥时会抛出 searchapi.io search failed: Invalid API key.。若采用切换引擎的规避方式,则确认搜索能正常返回结果即可。

参考来源

open-webui/open-webui #30305

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24788

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注