Open WebUI 使用 searXNG 联网搜索失败的一个可能缘故原由 ...

打印 上一主题 下一主题

主题 1753|帖子 1753|积分 5259

两句话总结:
不使用 /etc/searxng/settings.yml 配置,改用 /usr/local/searxng/searx/setttings.yml 指定配置。Open WebUI中不要填写 域名过滤列表 项。

近来基于Open WebUI v0.5.20 搭建了一个LLM前端,想要通过searXNG实现联网搜索,按照文档操作后始终无法实现搜索功能。报错有以下几类:


  • 找到0个效果
  • 搜索错误
检察日志并使用curl直接请求url进行测试
  1. curl 'http://localhost:8080/search?q=Apple+Today&format=json'
复制代码
返回内容显示没有获取到搜索效果,超时的引擎有xxx,xxx。大概是使用了无法毗连的引擎,根据官网文档,修改了/etc/searxng/settings.yml,但是无法见效,依然不能使用设置的引擎。检察searXNG的源码(GitHub),发现配置文件加载是先读取 searx下的settings.yml (在Docker镜像中就是 /usr/local/searxng/searx/settings.yml),再读取环境变量中指定的路径中的settings.yml(在Docker中是/etc/searxng/settings.yml),因此可能导致配置文件读取有误,因此不如直接修改searx下第一次读取的配置文件。
修改后能curl能成功使用配置文件中的搜索引擎搜索效果,大概如下
  1. {"query": "Apple Today", "number_of_results": 250000, "results": [{"url": "https://www.apple.com.cn/today/", "title": "Today at Apple - Apple (\u4e2d\u56fd)", "content": "\u5b66\u4e60\u3001\u521b\u4f5c\u3001\u83b7\u53d6\u7075\u611f\uff0c\u5c3d\u5728 Apple Store \u96f6\u552e\u5e97\u4e3e\u529e\u7684\u5b9e\u8df5\u8bfe\u7a0b\u91cc\u3002\u6765 Today at Apple \u770b\u770b\u4f60\u8eab\u8fb9\u90fd\u6709\u54ea\u4e9b\u7cbe\u5f69\u6d3b\u52a8\u3002", "engine": "bing", "template": "default.html", "parsed_url": ["https", "www.apple.com.cn", "/today/", "", "", ""], "engines": ["bing"], "positions": [1], "score": 1.0, "category": "general"},
  2. .............
  3. }
复制代码
但是Open WebUI中依然显示获取到0条搜索效果。
继续检察Open WebUI搜索相关的源码(searxng插件,域名过滤列表函数),在域名过滤列表的函数里
  1. def get_filtered_results(results, filter_list):
  2.     if not filter_list:
  3.         return results
  4.     filtered_results = []
  5.     for result in results:
  6.         url = result.get("url") or result.get("link", "")
  7.         if not validators.url(url):
  8.             continue
  9.         domain = urlparse(url).netloc
  10.         if any(domain.endswith(filtered_domain) for filtered_domain in filter_list):
  11.             filtered_results.append(result)
  12.     return filtered_results
复制代码
发现紧张内容:
  1. if any(domain.endswith(filtered_domain) for filtered_domain in filter_list):
  2.     filtered_results.append(result)
复制代码
这里的逻辑是保留并返返来自下面Open WebUI截图中 域名过滤列表 的效果,并不是常规意义上的去除掉过滤列表中的内容。而且当列表为空值时,这个过滤函数不执行,返回所有效果。

因此最终解决办法是删除过滤列表的内容,大概填写需要保留的内容,即可正常使用联网搜索功能。
 
 

附言:

  • 如果 searXNG需要在境内使用bing,需要为bing项配置base_url项,因为境内bing会自动跳转cn网站导致搜索失败。
  • Open WebUI中设置searXNG服务地址时填的是 searXNG相对于Open WebUI服务端的地址
  1. - name: bing
  2.   engine: bing   
  3.   shortcut: bi
  4.   disabled: false
  5.   base_url: "https://cn.bing.com/search"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表