支持私有云部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型联网搜索的短板与突破之路

发布日期:2025-03-24 08:36:10 浏览次数: 1639 来源:阿里云开发者
推荐语

大模型联网搜索功能的现状与未来,深度解析与实用指南。

核心内容:
1. 大模型联网搜索功能的必要性与工作原理
2. 实际应用中的问题与挑战分析
3. 解决方案与工具函数设计实例

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家


一、背景和原理

大模型联网搜索的功能,是指大模型通过实时的进行互联网搜索来获取实时信息,然后做出更准确和合理的回复;联网搜索的功能,主要是为了弥补大模型预训练知识库存在时效性导致实时知识滞后性的问题,可以认为是一种额外的工具,帮助大模型获取实时信息后,作为输入传入给大模型,大模型再结合额外的信息做出回复;比较常见的联网搜索功能的场景有当前时间、天气、新闻、商品价格等受实时因素影响大的场景,这些细节凭大模型本身的知识库无法回答或是回答不准确,就需要借助外部工具-联网搜索;

例如以下是一个大模型用联网搜索实时天气的典型例子:



在这一“当天天气”的问答中,这个问题可以拆分成两个子问题,“今天是什么日期,星期几”和“杭州这个日期的天气情况”;很明显,这两个实时性问题凭大模型自己的知识库无法回答,大模型会使用联网搜索进行回答;

联网搜索,本质上是一个工具函数,而工具函数是大模型智能体(Assistant API)中重要的大模型外部知识能力,用户可以通过自定义的工具函数,让大模型实现用户想要实现的自定义操作,只需通过用户输入的指令,大模型会选择合适的工具执行,例如以下的这个简单的翻译工具函数,我自定义一个实现翻译功能的工具函数translate_text,然后封装成大模型tool的形式,其中包括函数名(name)、描述(description)、入参数(properties),其中描述是大模型选择是否使用这个工具的标准;然后当输入大模型的提问中包含了翻译相关的指令,大模型认为输入指令和这个翻译工具的描述相近,就会启用这个tool,实际执行translate_text的结果,输出翻译后的文本;

##定义一个工具函数def translate_text(text, target_language):    """    将文本翻译成指定的目标语言。    这是一个使用预定义翻译的简单演示。
   参数:        text (str): 需要翻译的文本        target_language (str): 目标语言代码(例如:'zh'、'es'、'ja')
   返回:        str: 翻译后的文本或错误信息    """##定义工具的调用方式和参数规范translation_tool = {    "type": "function",    "function": {        "name": "translate_text",        "description": "将文本翻译成指定的目标语言",        "parameters": {            "type": "object",            "properties": {                "text": {                    "type": "string",                    "description": "需要翻译的文本"                },                "target_language": {                    "type": "string",                    "description": "目标语言代码(例如:'zh'、'es'、'ja')"                }            },            "required": ["text", "target_language"]        }    }}# 创建 Assistantassistant = Assistants.create(    model='qwen-plus',    name='翻译助手',    description='一个能够在不同语言之间进行文本翻译的助手',    instructions='你是一个翻译助手。当用户请求翻译时,使用 translate_text 函数来帮助他们。',    tools=[translation_tool])

从流程角度来考虑,用户输入一个问题,大模型会先根据问题和工具描述的相似度判断是否需要调用工具,如果判断无需工具,那么直接根据大模型本身的知识库去回答问题;如果判断需要调用工具,那么会从问题中提取出工具函数的入参数,然后执行工具函数,得到函数结果再整合进大模型中,在给出回答;



再回到联网搜索的工具,逻辑类似,联网搜索本质上也是一个工具,这个工具要实现的功能就是把输入的内容通过互联网搜索引擎搜索,获取搜索的topk个结果链接,然后再返回这些链接中的内容;整体流程是用户输入一个原始问题,大模型判断后使用网络搜索工具,传入搜索引擎关键词来搜索相关网址内容,然后对返回结果做相似度排序,重排结果后再整合进提示词输入大模型,最后给出回复,如下:



把这个定义好的搜索工具封装成tool,实现大模型的联网搜索功能;以下用谷歌搜索引擎(需要谷歌云api key和id)为例,展示一个大模型实现谷歌搜索的工具:

from langchain_core.tools import Toolfrom langchain_google_community import GoogleSearchAPIWrapper
##定义一个工具函数def google_search(text):    search = GoogleSearchAPIWrapper()    tool = Tool(    name="google_search",    description="Search Google for recent results.",    func=search.run    )    result = tool.run(text)    return result
##定义工具的调用方式和参数规范search_tool = {    "type": "function",    "function": {        "name": "google_search",        "description": "当需要搜索实时性信息时,使用此搜索工具",        "parameters": {            "type": "object",            "properties": {                "text": {                    "type": "string",                    "description": "提问的问题"                },            },            "required": ["text"]        }    }}# 创建 Assistantassistant = Assistants.create(    model='qwen-plus',    name='搜索助手',    description='一个能够在谷歌搜索的助手',    instructions='你是一个搜索助手。当用户输入的内容需要搜索时,使用 google_search 函数来帮助他们。',    tools=[search_tool])

在这个谷歌搜索工具中,当输入的问题涉及实时性信息时,大模型会调用这个搜索工具进行谷歌搜索,把谷歌中搜索到的网址取topk个链接,获取其中的内容,这就是联网搜索的参考来源,然后这些参考来源会和问题一起输入大模型,大模型然后给出最终回复。

二、当前问题

联网搜索本身是一个很有用的功能,是对大模型知识能力的强大补充,但实际的使用通义模型中发现联网搜索的结果存在一些问题,让搜索的结果看起来不太靠谱,影响搜索本身的可信度,下面我会比对当前主流的通义千问、deepseek和豆包的联网搜索实际效果,来展示当前联网搜索的问题;

在这一实验中,三种模型对比情况如下:

三种模型全部采用当前主力系列模型,在性能上互相对标,qwen-max, doubao-1.5-pro-256k,deepseek-v3;全部在本地的python sdk环境测试,qwen直接调用基模,并开启enable_search=True,doubao调用应用bot,并开启应用里的search_tool开关,deepseek直接调用基模;为保证答案的确定性,temperature全部设置为0.01;

全部采用两个测试问题新闻搜索和天气情况,以下是输入大模型的指令:

新闻搜索

##角色你是一个搜索专家,能快速从互联网上搜索信息
##任务,搜索新闻用互联网搜索引擎搜索20251月的前3个重大民生新闻,给出新闻的来源网站
##输出格式标准json,{"news1":"xx","link1":"xx","news2":"xx","link2":"xx", "news3":"xx","link3":"xx" }

天气情况

##角色你是一个搜索专家,能快速从互联网上搜索信息
##任务,搜索天气用互联网搜索引擎搜索今天杭州市西湖区的天气情况,给出天气的来源网站
##输出格式标准json,{"weather":"xx","link":"xx" }

在实际测试的过程中,发现qwen-max如下的明显问题:


2.1 搜索来源不可查证

在新闻搜索的测试中,qwen-max暴露了一个最明显也是最常见的问题:给出的来源网站看似真实有效实际却是无效链接;

我经过10轮测试提问,总共让大模型返回30条新闻和对应链接,结果如下所示:

有效链接指的是返回的链接能直接访问,而不是无法访问的404链接;真实链接指的是该链接不仅能有效访问,而且其中的内容和对应的新闻文本能对应上;从结果中看出qwen-max的网址有效率只有1/3,而真实率只有0,这从用户的角度来说,网络搜索完全“不靠谱”,而相对的doubao和deepseek能做到很准确的结果;

例如以下是第一轮测试中三大模型的对比结果:

qwen-max



链接1跳转至官网,但官网无任何中国GDP相关新闻;链接2和链接3无法访问;



doubao



链接1、2、3全部是真实有效的链接



deepseek



链接1、2、3全部是真实有效的链接



原因分析:

通义为什么出错:从技术角度看,大模型的生成过程本质是一个迭代式的生成过程,当前词的生成是根据前文序列的语义特征生成的,深入去分析通义给出的网站,比如https://www.caixin.com/2025-01/gdp-growth; 首页的地址caixin.com是可信的,但后面2025-01/gdp-growth, 相比一个真实链接(可能包含哈希码、数字校验等),此处更像一个对新闻内容的翻译,而编造出来的简单网址,从大模型生成特征看,输入给大模型的内容是我的原始问题(查找2025年1月新闻)+网络搜索到的新闻,新闻的长文本内容的序列特征会影响后文网址的生成,因为要拟合前文的特征而产生了编造的虚假链接,但是我们通过搜索工具搜索出的新闻不仅包含新闻文本,同时也会返回网址链接,那么大模型为什么不直接回复这个查询到的链接而是自己编造一个虚假的链接,这个问题涉及到基础模型的指令遵循能力;大模型在进行网络搜索时,应该直接返回搜索到的来源网址,而不应该自己编造,这需要在预训练阶段做好强化,需要产研同学进一步支持;另外我还尝试了在通义的C端界面做网络搜索,给出的来源是有效的,说明网址结果在C端做过处理,在前端呈现一个好的效果,但b端调用百炼基模结果不太靠谱,还要对基模的指令遵循做优化;

为什么豆包和deepseek表现好:豆包的结果明显好于通义最大的原因在于字节的内容生态和大模型是捆绑的,在测试的30个搜索结果中,大部分的链接都来自今日头条(字节的内容应用),说明今日头条在豆包大模型的联网搜索工具里是一个权重很高的内容来源,所以豆包的全网搜索更近似一种“对自己内容生态的搜索”;deepseek的结果则体现了基模能力的更优表现,其实大模型的联网搜索工具的功能性差不多,本质上是一个调用搜索引擎搜索+整理搜索结果的工具函数,产生差异的原因在于基模对于这些搜索结果是怎么处理的,前面讲到的通义指令遵循能力导致模型没有直接输出搜索到的网址而是编造虚假网址,而deepseek能直接给出搜索到的网址,这是基模在指令遵循的差异


2.2 搜索内容胡编乱造

qwen-max在测试中还有一个输出的文本编造的问题,这个情况一般和“来源无法查证”同时出现;当来源网址是404无效链接时,大模型回复的内容也存在编造的情况;

以下是在天气查询的测试中,大模型生成虚假内容的结果,总共10轮测试:

模型

虚假内容数

虚假内容率

qwen-max

5

50%

doubao-1.5-pro-256k

1

10%

deepseek-v3

0

0%

虚假内容指的是大模型的回复和实际情况不符;从结果上看,qwen的虚假内容率明显比其他两个模型高,以下是3月5日杭州市天气的实际例子:

qwen



不仅天气和实际情况完全不同,给出的来源链接也并非杭州市的天气,而是吉林省某地的天气情况;

doubao



给出的来源有效且真实



deepseek



给出的来源有效且真实



原因分析:

造成虚假回复天气的情况从根本上说是大模型理解和搜索策略的问题,无论是哪种大模型,能够使用的搜索来源和搜素引擎都是固定的,搜索3月5日杭州的天气从理论上说各个搜索引擎都会获取到差不多的结果,那么唯一的区别就在于大模型的内容理解差异和搜索策略差异

内容理解差异是指大模型传给搜索引擎的内容是根据用户输入的内容生成的,比如提问大模型“今天杭州的天气”,大模型会理解这个问题,然后生成“今天的日期是几月几日,杭州在x月x日的天气情况”,再把这个输入进搜索引擎搜索,那么这个理解的过程会因为基模语义理解能力的差异而产生不同的结果,比如qwen犯错的这个问题中,我推测大模型没有正确的生成“今天是3月5日”的结果,导致后面天气直接错误;

搜索策略差异是指大模型对搜索结果的召回策略,大模型会对搜索结果做一个相似性判断,比如返回10个搜索结果,大模型会判断结果和原始问题的相似性,然后重排序,把相似性高的结果放在前面,然后再整合起来做答复;这个重排的计算逻辑不同的模型不一样,会导致召回的顺序也不一样,比如在上述问题中,大模型的召回结果中包含三个结果:1“今天的天气是10-15C”,2“3月5日的天气是6-8C”,3“2月5日的天气是0-2C”,原始提问是“今天杭州的天气”,如果重排后结果2放在最前面,那么大模型会回复正确的天气结果,如果结果1放在前面,就会产生虚假回复;


2.3 搜索指令难以遵循

在实际测试过程中,对于搜索相关的指令遵循能力也做了测试,设计了限定搜索来源的指令,限制大模型只能搜索新浪新闻、新华网、凤凰新闻的新闻来源平台,对比不同模型的表现,在提示词中加入了##限制:只能搜索新浪新闻平台,严禁搜索其他平台的新闻;

新闻搜索

##角色你是一个搜索专家,能快速从互联网上搜索信息
##任务,搜索新闻用互联网搜索引擎搜索20251月的前3个重大民生新闻,给出新闻的来源网站
##限制只能搜索新浪新闻平台,严禁搜索其他来源;
##输出格式标准json,{"news1":"xx","link1":"xx","news2":"xx","link2":"xx", "news3":"xx","link3":"xx" }

以下是模型的结果:

qwen



qwen在提示词中明确限定了搜索来源的条件下,仍然存在返回其他来源的情况;

doubao



所有来源全部来自新浪新闻;

deepseek



所有来源全部来自新浪新闻;

原因分析:

对于模型无法从指定来源搜索的情况,本质和基础模型的指令遵循能力有关,在上述的新浪新闻的例子中,大模型应该在搜索结果召回阶段,对不属于新浪新闻的网址链接过滤,保留sina.com的结果;那么最终给出的回复只会保留新浪新闻,但在qwen的表现中,显然大模型在搜索召回策略中对新浪新闻的搜索结果不敏感,原本来自新浪的链接应该和原始问题非常相似,但模型的相似度匹配没有把新浪链接重排在前面,未来可能需要模型进一步提升网址本身的域名在相似度匹配中的权重,而不是仅对网站的文本内容做匹配;

三、优化方向

针对上述测试中,qwen-max表现出来的问题,经过原因分析,其实要从根本上来解决这些联网搜索的问题,还需要基础模型的语义理解和指令遵循能力的进一步提升,以及对联网搜索工具函数、召回策略的优化;

那么站在客户角度的应用侧,如何在模型调用时尽量的减少联网搜索内容和来源的“不靠谱”,让结果更具有可信度,我根据测试和相关项目中的经验,从优化提示词、内容后处理、优化搜索工具的几个方面总结了联网搜索的优化方法;


3.1 提示词强化输出概要网站

我在测试实验中发现,qwen会存在根据内容编造虚假的来源网址的情况,这类编造的网址例如https://www.caixin.com/2025-01/gdp-growth有个特点,前面的域名www一般是可信的,但后面的具体路径开始编造,针对这一特点,可以对查询来源做一个取舍,牺牲一些精确性,但要保证可信度,那么可以让大模型在输出时尽量输出前面的域名www,这样点击来源链接一般会进入域名首页官网,绝大部分是可访问的,首先保证链接不是一个404的无效链接,然后用户可以在这个首页官网在根据大模型的生成内容去手动搜索,操作上更加复杂,为了提升可信度做出的优化;

具体可以在提示词里给大模型做输出指令的限制,让大模型在网址中查询不到实际信息时,输出官网域名首页,严禁自己编造网址,例如以下是对提示词做的改进,增加了限制要求;

新闻搜索

##角色你是一个搜索专家,能快速从互联网上搜索信息
##任务,搜索新闻用互联网搜索引擎搜索20251月的前3个重大民生新闻,给出新闻的来源网站
##限制如果实际网址中没有信息,输出实际网址对应的可访问的域名首页,严禁自己编造来源;
##输出格式标准json,{"news1":"xx","link1":"xx","news2":"xx","link2":"xx", "news3":"xx","link3":"xx" }

对提示词做改进后,qwen-max的表现有了明显改进,同样做了30次新闻搜索的测试,因为现在我们限制了输出官网域名,93.3%的来源都是可访问的新闻官网,虽然官网上会展现大模型搜索到的内容的概率较低,只有10%,但至少保证了绝大多数情况下用户得到的是有效链接,增加了可信度,后续可能需要用户手动在官网上搜索相关内容;

模型

有效链接数(非404网址)

网址有效概率

真实链接数(网址内容和新闻对应上)

网址真实率

qwen-max

28

93.3%

3

10%

以下是一个实际的例子:

qwen



给出的三个来源全部是官网域名,并且全部有效访问;




3.2 对输出内容作后处理

在测试中,基于qwen编造虚假来源的问题,前面讲到新闻官网首页一般是有效的,但整体的链接是无效的,针对这一情况,我们可以添加一个工具脚本,对输出的网址做后处理,提取网址域名首页的地址,替换原有结果;同时可以对域名做校验,检查首页域名是否有效;

#从大模型返回的结果,一个json,包含三个新闻text和来源linkres=response.output.choices[0].message.content#对域名做后处理,替换为首页域名links=[res['link1'],res['link2'],res['link3']]for link in links:    if 'http' in link or 'https' in link or 'www' in link:        temp=link.split('/')        if len(temp)>=3:            new_link='/'.join(temp[:3])            new_links.append(new_link)#校验域名import requestsdef check(url):    try:        response = requests.get(url)        if response.status_code ==200:            return True        else:            return False    except requests.RequestException:        return Nonefor new_link in new_links:    if check(new_link):        print(new_link)

经过上面脚本的处理,像之前编造的网址例如https://www.caixin.com/2025-01/gdp-growth会替换成https://www.caixin.com,这是可访问的有效链接;这个脚本会过滤掉一些可能无效的网址,需要大模型返回更多的文本和链接来保证输出数量;


3.3 自定义搜索工具函数

除了上述两种方法来改进大模型输出的来源网站外,还可以从搜索策略层面直接优化,让大模型搜索到的内容保证真实有效,那么大模型输出的内容和来源也一定是真实有效的,这可以从搜索工具函数入手,不用qwen内置的搜索工具,我自己定义一个召回搜索结果的工具函数,来实现比内置工具更强的搜索效果,从而提升大模型的回复质量;

根据大模型联网搜索的原理,整体流程是用户输入一个原始问题,大模型判断后使用网络搜索工具,传入搜索引擎关键词来搜索相关网址内容,然后对返回结果做相似度排序,重排结果后再整合进提示词输入大模型,最后给出回复;这个过程中可以优化的地方在重新自己设计相似度排序算法并引入网址校验机制来提升排序的精确性,保证大模型给出回复的真实有效,以下是示例的优化工具函数,采用gte-rank模型来对搜索结果重排和验证链接有效性和网址内容中包含原始query的优化策略;

from llama_index.core.data_structs import Nodefrom llama_index.postprocessor.dashscope_rerank import DashScopeRerankfrom langchain_core.tools import Toolfrom langchain_google_community import GoogleSearchAPIWrapperimport requests##定义一个工具函数def google_search(text):    #获取top20搜索引擎结果    search = GoogleSearchAPIWrapper()    tool = Tool(    name="google_search",    description="Search Google for recent results.",    func=search.run,    topk=20    )    result = tool.run(text)    #校验网址    new_result=[]    keywords=text.split(',')    for each in result:        content=each['content']        link=each['url']        response = requests.get(link)        if response.status_code ==200:            find=True            for key in keywords:                if key not in content:                    find=False                    break            if find:                new_result.append((content,link))    #相似度排序    nodes=[]    for content,link in new_result:        nodes.append(Node(text=link+'&'+content))    dashscope_rerank = DashScopeRerank(top_n=3)    results = dashscope_rerank.postprocess_nodes(nodes, query_str=text)    temp_res=[]    for res in results:        temp_res.append(res.node.get_content(),res.score)    temp_res.sort(key=lambda x:x[1],reverse=True)    return temp_res
##定义工具的调用方式和参数规范search_tool = {    "type": "function",    "function": {        "name": "google_search",        "description": "当需要搜索实时性信息时,使用此搜索工具",        "parameters": {            "type": "object",            "properties": {                "text": {                    "type": "string",                    "description": "提问的问题"                },            },            "required": ["text"]        }    }}# 创建 Assistantassistant = Assistants.create(    model='qwen-plus',    name='搜索助手',    description='一个能够在谷歌搜索的助手',    instructions='你是一个搜索助手。当用户输入的内容需要搜索时,使用 google_search 函数来帮助他们。',    tools=[search_tool])

重新优化后的搜索工具让qwen的输出精确性进一步提升,在30次新闻搜索的测试中,返回的来源网址全部有效,提升到100%,真实链接的概率也提升到90%,这个自定义的搜索工具比qwen内置的搜索工具效果更优;

模型

有效链接数(非404网址)

网址有效概率

真实链接数(网址内容和新闻对应上)

网址真实率

qwen-max

30

100%

27

90%



53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询