最近,我成功修复了Cherry的联网搜索功能,使得内置的搜索服务可以直接使用,无需再依赖其他搜索服务。这一改进对cherry-studio用户来说是一个利好消息。本文将简要记录这次捉虫过程,并探讨cherry-studio内置联网的原理。

在cherry中,用户常常遇到AI生成的问题通过调用联网搜索回答,但内置的bing、baidu、google搜索服务几乎无法使用的情况。经过查阅cherry的源代码,我发现了几个导致搜索服务难用的原因:

  1. 搜索关键词处理不当:cherry会在AI生成的查询关键词前添加日期信息和用户语言,导致搜索关键词变得复杂,从而缩小了搜索范围。
  2. 隐藏窗口获取网页信息:由于使用隐藏窗口获取网页信息,导致加载出来的网页信息与正常网页存在较大差异。
  3. 获取网页源码时机不合适:在页面尚未完全加载时尝试获取源码,有时会导致获取到空内容。

为了解决这些问题,我首先分析了cherry的搜索过程:搜索模块接收AI生成的关键词后进行处理,然后开启浏览器窗口访问处理后的搜索链接。页面加载完成后,获取整个网页内容并传递给搜索解析器进行数据提纯。完成后关闭浏览器窗口。问题的关键在于浏览器窗口的开启和源码获取时机。

我提交了一个pull request(#12305)来解决这个问题,通过启用离屏渲染并修改executeJavaScript执行时机,确保隐藏窗口时页面内容与显示窗口时一致,并改用ready-to-show事件确保页面完全加载后再获取完整的页面dom,从而解决了搜索的bug。

修复后的使用效果如图所示,展示了使用内置bing搜索的情况。不过,修复bug后也出现了新的问题:搜索获取到具体网站链接后会直接并发请求目标网站,容易受到知乎、豆瓣等网站的403拦截。我随后在pull request中添加了请求节流功能,以解决这个问题。

这次修复和改进不仅提升了用户体验,也展示了开源社区的力量,通过共同的努力可以解决复杂的技术问题。对于cherry-studio用户来说,这意味着更稳定、更高效的搜索体验。

标签: none

评论已关闭