Cherry Studio 联网搜索,全网最全教程!

Cherry Studio 联网搜索,全网最全教程!

DeBill Lv3

前言

大模型都是基于过去的知识训练出来的,例如一个模型是基于 2025 年 1 月 1 号之前的所有知识训练出来的,那么他就无法回答用户询问 1 月 1 号之后发生的事情(例如询问当前日期)

查询时间

如果能给模型添加联网搜索的能力,模型基于搜索的结果回答用户,就可以让模型能力大大增强,结果也更具实时性。Cherry Studio 提供了联网搜索功能,支持让任何模型实现联网搜索

本文给带大家介绍 Cherry Studio 的联网搜索功能全网最全教程!帮助大家避坑少走弯路!

配置

要使用联网搜索功能,需要先进行配置,下载最新的 Cherry Studio 后我们进入如下设置界面。如果还不了解 Cherry Studio 的朋友可以查看我的这篇文章 🍒 Cherry Studio 开源全能AI客户端!功能多到炸!,最右侧就是网络搜索相关的所有设置,下面详细介绍每一项配置。

Websearch Settings

搜索服务商

Cherry Stdio 已经给我们内置了常见的搜索服务商,例如百度、谷歌、必应,同时还集成了第三方搜索服务商例如 Tavily、Exa 等。使用谷歌搜索的时候必须能科学上网,主要给大家介绍第三方搜索服务商的配置

Websearch Providerlist

Tavily

Tavily 是专门给大语言模型提供搜索服务的服务商,免费计划提供每月 1000 次 API 调用,且无需绑定信用卡,境内也能使用。登录网站后台获取 API KEY 之后填入API 密钥

Tavily

Tavily Settings

Searxng

Searxng 是一款开源(https://github.com/searxng/searxng)免费的互联网元搜索引擎,它聚合了来自各种搜索服务和数据库的结果。如果你想使用该服务可以参考官方文档自部署该服务,这里不做重点介绍

SearXNG

Exa

Exa 是跟 Tavily 类似的提供搜索 API 服务的公司,但是提供更加丰富的搜索功能,除了有常规的网页搜索,还有论文搜索、Github 仓库搜索、维基百科搜索等等,同样境内也能使用。首次登录提供 $10 的免费使用额度,登录后台获取 API KEY 之后填入API 密钥

Exa

Exa Settings

Bocha

国内博查也提供多模态 AI 搜索 API 服务,但是每次调用都需要付费,没有免费调用的额度,这里就不做重点介绍,感兴趣的朋友可以自行充值尝试

bocha

常规设置

搜索包含日期 选项建议开启,搜索结果个数选择默认的 5 个,这里也是建议设置为 5 个结果,设置太多会有很多问题,后文实战部分我讲到。

General Settings

搜索结果压缩

这个功能是 Cherry Studio 最近开发的,一共有三个选项 不压缩、截断、RAG,初次看到这三个选项的朋友估计是一头雾水,这里我们选择默认的不压缩,后文实战部分再解释后面两个选项。

Result Compress Settings

黑名单

支持正则表达式形式过滤搜索结果,例如博主不希望获取 CSDN 相关的结果,进行了如下配置。至于正则表达式怎么写,对于不懂编程的朋友可以让 AI 给你写,例如:“给我一个正则表达式,用于匹配 csdn 的所有 url”。

Blacklist

黑名单订阅

黑名单订阅可以屏蔽一大堆垃圾网站的的内容,这样我们就不用在上面的黑名单设置中一个个手输,我们将 https://git.io/ublacklist 添加到订阅源中,直接访问这个网址能看到所有订阅要屏蔽的网站地址。

Blacklist Subscribe

实战演练

做好上面的设置后,我们就可以进入实战环节。我将 Cherry Studio 里的联网搜索功能分为两大类,一类是模型自带搜索功能,另一类是使用第三方搜索服务,我们之前所有的设置都是跟第三方搜索服务相关

模型内置搜索

我们在设置模型的界面可以看到有些模型支持联网搜索,例如 OpenRouter 全系支持联网搜索,不知道怎么获取免费 API KEY 的朋友可以看我上一篇文章

Buildin Websearch Model

进入模型聊天框,我们以 OpenRouter 免费的Kimi K2模型为例,演示模型内置搜索功能。当我不打开联网搜索功能询问 AI 当天的日期时,模型的回答明显是错误的。

开启模型内置联网搜索功能后模型可以正确回答日期,并且给出回答的来源

虽说有些模型显示支持联网搜索,但实际是不支持、输出内容都是错误的(例如 GitHub Copilot、 GitHub Models)

第三方搜索服务

为了解决绝大多数模型无法联网搜索的问题(或者是假联网搜索),我们可以选择使用第三方搜索服务。

使用第三方搜索服务会有以下问题:

  • token 消耗增多
  • 模型上下文窗口太小导致联网搜索失败

为什么使用第三方搜索可能出现上面的问题?这跟 Cherry Studio 的联网搜索设计有关,博主已经把相关源码看过一遍,帮大家把联网搜索流程梳理在下方。

当用户开启第三方搜索服务开关,并且点击发送按钮时,会经历下面两个阶段

阶段 1:提取用户提问内容

将提问发送给大模型 –> 从模型获取格式化响应–> 解析格式化响应提取关键词 –>根据关键词搜索网页 –> 保存网页内容

Websearch Phase1

什么意思呢?系统是先做搜索再跟模型对话,但是搜索要怎么做呢?如果用户的提问有好几百字,总不能一股脑地把用户提问都用来搜索吧,用过搜索引擎的各位都知道这样做搜出来的结果很糟糕。所以这里需要靠大模型帮我们提取内容关键词,Cherry 用了以下的 prompt 来提取关键词

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
You are an AI question rephraser. Your role is to rephrase follow-up queries from a conversation into standalone queries that can be used by another LLM to retrieve information through web search.

**Use user's language to rephrase the question.**

Follow these guidelines:

1. If the question is a simple writing task, greeting (e.g., Hi, Hello, How are you), or does not require searching for information (unless the greeting contains a follow-up question), return 'not_needed' in the 'question' XML block. This indicates that no search is required.

2. If the user asks a question related to a specific URL, PDF, or webpage, include the links in the 'links' XML block and the question in the 'question' XML block. If the request is to summarize content from a URL or PDF, return 'summarize' in the 'question' XML block and include the relevant links in the 'links' XML block.

3. For websearch, You need extract keywords into 'question' XML block.

4. Always return the rephrased question inside the 'question' XML block. If there are no links in the follow-up question, do not insert a 'links' XML block in your response.

5. Always wrap the rephrased question in the appropriate XML blocks: use <websearch></websearch> for queries requiring real-time or external information. Ensure that the rephrased question is always contained within a <question></question> block inside the wrapper.

6. *use websearch to rephrase the question*

There are several examples attached for your reference inside the below 'examples' XML block.

<examples>

1. Follow up question: What is the capital of France

Rephrased question:\`
<websearch>
<question>
Capital of France
</question>
</websearch>
\`

2. Follow up question: Hi, how are you?

Rephrased question:\`
<websearch>
<question>
not_needed
</question>
</websearch>
\`

3. Follow up question: What is Docker?

Rephrased question: \`
<websearch>
<question>
What is Docker
</question>
</websearch>
\`

4. Follow up question: Can you tell me what is X from https://example.com

Rephrased question: \`
<websearch>
<question>
What is X
</question>
<links>
https://example.com
</links>
</websearch>
\`

5. Follow up question: Summarize the content from https://example1.com and https://example2.com

Rephrased question: \`
<websearch>
<question>
summarize
</question>
<links>
https://example1.com
</links>
<links>
https://example2.com
</links>
</websearch>
\`

6. Follow up question: Based on websearch, Which company had higher revenue in 2022, "Apple" or "Microsoft"?

Rephrased question: \`
<websearch>
<question>
Apple's revenue in 2022
</question>
<question>
Microsoft's revenue in 2022
</question>
</websearch>
\`

7. Follow up question: Based on knowledge, Fomula of Scaled Dot-Product Attention and Multi-Head Attention?

Rephrased question: \`
<websearch>
<question>
not_needed
</question>
</websearch>
\`

</examples>

Anything below is part of the actual conversation. Use the conversation history and the follow-up question to rephrase the follow-up question as a standalone question based on the guidelines shared above.

<conversation>
{chat_history}
</conversation>

**Use user's language to rephrase the question.**

Follow up question: {question}

Rephrased question:

根据上面的提示词可知,系统将用户的提问分了好几类,有些情况就不会触发后续的联网搜索(例如用户提问“嗨,你好吗?”),篇幅原因这里就不深入解析这几种情况,感兴趣的朋友可自行了解。

提取完关键词后,解析响应再进行联网搜索。例如你问模型:“根据网络结果,苹果和微软哪家公司在 2022 年收入更高?”,模型响应的结果是这样的,然后系统就会解析这个响应,分别进行两次联网搜索,一次搜苹果 2022 年的年入收入,一次搜微软 2022 的年收入然后再整合

1
2
3
4
5
6
7
8
<websearch>
<question>
Apple's revenue in 2022
</question>
<question>
Microsoft's revenue in 2022
</question>
</websearch>

阶段 2:

向大模型提问 –> 将用户提问和之前保存的网页内容一并发送给模型 –>模型响应

Websearch Phase2

阶段 1 成功结束后会将搜索结果暂存,然后在阶段 2 的时候将结果连同提示词一并发给模型

根据上面的流程可知,token 消耗比一般提问要更多的原因有两点:

  • 正式跟模型对话前,又跟模型对话一次来提取联网搜索所需的关键词
  • 正式跟模型对话时,会将用户提问 + 网页搜索结果添加在预设好的提示词模板中,发送给大模型。问题是系统是无法控制获取网页内容的长度,如果获取的网页内容很多,会导致发送给模型的内容非常多

那么我们再回到之前的联网搜索设置, 压缩方法这个参数就是为了解决联网搜索的结果过长超过模型上下文的问题,你可以选择根据字符数或者 token 数截断联网搜索结果

Websearch Result Truncate

压缩方法选择RAG还要设置 embedding 模型,嵌入维度等参数,更加复杂,而且如果模型上下文太短,依旧无法避免联网搜索的失败

Websearch Rag

举个例子:我将搜索结果设置为20 个、压缩方法设置为不压缩,对话模型选择 GitHub Models(免费计划中上下文窗口只有 8000 input token),就有一定概率出现联网搜索失败的情况,因为超了上下文窗口

Token Limit

而且我发现,搜索服务商选择的不同导致联网搜索的失败率不同,如果你使用 Google、Baidu 等搜索引擎作为第三方服务商,即便模型的上下文长度很长,也会出现超出上下文限制的情况,相反如果你选择 Tavily 等专门做搜索的服务商就几乎不会出现超出模型上下文导致联网搜索失败的事情,猜测这些服务商对搜索结果已经压缩处理过了。

总结

测试过那么多模型厂商,只有 OpenRouter 和谷歌的 Gemini 内置联网搜索做得不错,OpenRouter 甚至全系模型内置联网搜索,只要开启一个开关就可以使用。如果要使用第三方搜索服务,token 消耗更多且要注意搜索设置是否得当,以免出现联网搜索失败的问题。

总之一个简单的联网搜索功能其实可以做得很复杂,每家厂商的实现方式也不同。如果你要使用 Cherry Studio 的联网搜索功能我总结以下三点建议:

  • 使用自带搜索服务的模型
  • 使用第三方搜索服务时,最后使用 Tavily、Exa 等专门做搜索的服务商,而不是直接使用搜索引擎
  • 根据模型上下文窗口大小设置合理的搜索个数、压缩方式,以免联网搜索失败

更多相关文章,可以参考下方链接 👇 如果有任何的疑问,也欢迎下方留言

推荐阅读

  • 标题: Cherry Studio 联网搜索,全网最全教程!
  • 作者: DeBill
  • 创建于 : 2025-07-27 09:00:00
  • 更新于 : 2025-07-31 13:09:40
  • 链接: https://debill.me//ai/cherry-studio/websearch/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论