前言
大型语言模型(LLM)的知识受其训练数据截止日期的限制。例如,一个在2025年1月前训练的模型,将无法回答此后发生的事件,比如询问当前日期。为模型赋予联网搜索能力,使其能够基于实时信息进行回答,可以极大地扩展其应用场景并提高回答的准确性。 Cherry Studio
提供了一套联网搜索功能,旨在让任何模型都能连接互联网。
本文将详细介绍 Cherry Studio
的联网搜索功能,提供一份详尽的配置与实践指南。
功能配置
使用联网搜索前,需要进行相应配置。打开 Cherry Studio
的设置界面,右侧区域集中了所有网络搜索相关的选项。
搜索服务商
Cherry Studio
内置了多种搜索服务商。它们可以分为两大类:传统搜索引擎(如 百度
、谷歌
、必应
)和AI原生搜索引擎(如 Tavily
、Exa
)。
传统搜索引擎返回的是为人类视觉阅读设计的完整网页,其中包含了大量导航栏、广告、脚本等与核心内容无关的“噪音”。直接将这些信息喂给AI模型,不仅会急剧增加Token成本,还可能因为信息污染而降低回答质量。
AI原生搜索引擎则专门为大型语言模型服务。它们在后端已经对搜索结果进行了预处理和优化,返回的是干净、精炼、结构化的文本数据,更适合机器直接消费。
Tavily
Tavily
是一家专门为大型语言模型提供搜索API的服务商。它的核心优势在于能够返回高度相关、精炼且结构化的数据,过滤掉传统网页中的无关信息,从而减小输入给模型的上下文大小并降低成本。Tavily
的免费计划提供每月1000次API调用,无需绑定信用卡,在中国境内也可以直接访问。注册后,在后台获取API密钥并填入相应字段即可。
Searxng
Searxng
是一款开源的元搜索引擎(https://github.com/searxng/searxng
),它能聚合来自多个搜索服务的结果。用户可以参考其官方文档自行部署该服务,实现更高的隐私性和可控性。
Exa
Exa
(前身为 Metaphor)是另一家面向AI的搜索服务商,其最大特点是提供基于“语义”的神经搜索。与依赖关键词匹配的传统搜索不同,Exa
能更好地理解查询背后的真实意图(例如,当您搜索“未来的人工智能手机会是什么样子”时,它能理解这是一个开放性、概念性的问题),从而找到更深层次和更相关的结果。它还支持特定领域的搜索,如论文、Github
仓库和维基百科。新用户会获得10美元的免费额度。
Bocha
国内的 博查
也提供多模态AI搜索API服务,但其服务为纯付费模式,未设免费额度。
近期推出的 Bing 搜索 API 停服在即,秘塔 API 能否成为新选择?也是新的选择。
常规设置
建议开启 “搜索包含日期” 选项,以获取更具时效性的信息。搜索结果数量建议保持默认的5个。设置过多的结果不仅会增加Token消耗,还可能因为超出模型的上下文窗口(Context Window)而导致处理失败。
搜索结果压缩
此功能用于处理和精简搜索到的网页内容,以适应模型的上下文限制。理解这三个选项的差异,对于优化联网搜索的效果和成本至关重要。
压缩方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
不压缩 | 实现简单,处理速度快。 | 极易超出模型上下文限制,Token成本高,包含大量无关信息。 | 仅在模型上下文窗口极大且搜索结果页非常干净时偶尔可用。 |
截断 | 控制简单直接,能有效避免超限。 | 可能会在关键信息出现前就切断内容,导致信息丢失。 | 对上下文窗口有限的模型进行快速、低成本的搜索,但需接受信息不完整的风险。 |
RAG | 准确性最高,能精准定位并提供最相关的信息片段,有效降低“AI幻觉”。 | 配置和计算相对复杂,对Embedding模型有一定要求。 | 对回答质量要求高的严肃查询,是目前最先进和推荐的方式。 |
- 不压缩:将原始网页内容直接提供给模型。
- 截断:通过设定字符数或Token数,对超长的内容进行硬性截断。这是一种简单粗暴的控制方法,但风险在于关键信息可能恰好位于被截断的部分。
- RAG:此选项并非简单的“压缩”,而是代表 检索增强生成(Retrieval-Augmented Generation)。
RAG
是一种先进的AI框架,它首先从外部知识库中检索相关信息,然后将这些信息与用户的原始问题一同提交给模型,引导模型生成更准确、更可靠的回答。其工作原理可以简化为:首先利用 Embedding模型 将搜索到的所有文本块和用户问题都转换成数字向量,然后在向量空间中计算相似度,找出与用户问题最相关的文本片段。最后,只将这些高度相关的片段作为上下文提供给大模型。这好比让模型进行“开卷考试”并直接翻到正确答案所在的那几页,可以有效利用最新数据,并显著减少模型产生“幻觉”(即编造事实)的概率。选择RAG
压缩方法后,还需要配置Embedding
模型和嵌入维度等参数。
黑名单与订阅
- 黑名单:支持使用正则表达式过滤掉特定网站的搜索结果,例如屏蔽内容质量较低的网站。
- 黑名单订阅:通过订阅社区维护的黑名单链接(如
https://git.io/ublacklist
),可以批量屏蔽已知的低质量或垃圾信息网站,无需手动一一添加。
实战演练
Cherry Studio
的联网搜索分为两类:模型内置搜索和第三方搜索服务。
模型内置搜索
部分模型提供商(如 OpenRouter
)为其模型集成了内置的联网搜索能力。在模型设置中,可以直接开启此功能。
以 OpenRouter
提供的免费模型 Kimi K2
为例,关闭搜索时,它无法回答当前日期;开启后,则能正确回答并提供信息来源。需要注意的是,有些模型声称支持联网,但实际效果不佳或无法正常工作(例如某些 GitHub Models
)。
如果你没有找到合适的免费大模型API,可以在这选择:免费大模型API列表
第三方搜索服务
当模型不具备内置搜索能力时,第三方搜索服务成为关键。但使用它会面临两个主要问题:
- Token消耗增加
- 因搜索结果过长超出模型上下文限制而导致失败
Cherry Studio
的第三方搜索流程分为两个阶段:
阶段一:搜索关键词提取与内容获取
当用户发送问题后,系统不会直接将原始问题抛给搜索引擎。而是先调用一次大模型,利用一个精心设计的提示词(Prompt)模板,让模型分析用户的意图,并从中提取出最适合用于机器搜索的、简洁的关键词。这种做法被称为查询重写(Query Rewriting),能极大提升后续搜索的精准度。
以下是 Cherry Studio
用来提取关键词的 Prompt
模板。可以看到,它使用XML标签(如<websearch>
)来强制模型输出结构化的、可供程序直接解析的内容,这是一种常见的“结构化Prompt”技巧。
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:
阶段二:整合信息并生成回答
系统将第一阶段获取并经过“压缩”处理的网页内容,与用户的原始问题整合后,再次发送给模型,由模型基于这些实时信息生成最终的回答。
这个两阶段流程解释了Token消耗增加的原因:一次API调用用于提取关键词,一次API调用用于最终生成回答。总成本约等于两次独立对话的成本,并且第二次对话的输入中还包含了大量的网页搜索结果。
这就是为什么 “压缩方法” 设置至关重要。选择 “截断” 或 “RAG” 就是为了解决这一问题。
实践发现,搜索服务商的选择会显著影响失败率。使用 Google
、Baidu
等传统搜索引擎时,由于返回的是完整的、未经处理的HTML页面,即使模型上下文窗口很大,也容易发生超限。而使用 Tavily
或 Exa
这类专为AI设计的服务商,失败率则低得多,因为它们返回的数据经过了预处理,更加干净、简洁,天然适合模型处理。
例如,当搜索结果设置为20个,压缩方式为“不压缩”,并使用一个上下文窗口较小(如8000 Token)的模型时,联网搜索失败的概率会显著增加。
使用建议
经过测试,OpenRouter
和谷歌的 Gemini
提供了体验良好的内置联网搜索。若需使用第三方搜索服务,为确保稳定性和效率,可遵循以下建议:
- 优先使用模型内置搜索功能:如果模型本身支持,这是最简单直接的方式。
- 选择专为AI设计的搜索服务:使用
Tavily
、Exa
等服务商,而不是Google
或Baidu
。它们能提供更干净、更相关的结果,降低Token消耗和处理失败的风险。 - 合理配置搜索参数:根据所用模型的上下文窗口大小,谨慎设置 搜索结果个数 和 压缩方式(对质量有要求时,强烈推荐使用
RAG
),避免因内容超限导致搜索失败。