给 Agent 接联网搜索补实时信息的实操
先说结论:想让一个 Agent 答出"今天""最新""最近一周"这类问题,光靠大模型自己是不行的,必须挂一个能联网搜索的工具,让模型在回答前先去查一遍。下面是我自己跑通的步骤,照着配基本不会翻车。
我做的是一个内部用的资讯问答小助手。一开始我图省事,直接拿模型裸答,结果用户一问"某框架最新版本号是多少",模型张口就来一个早就过时的数字,还答得特别自信。这种幻觉在实时类问题上特别要命。后来我给它补了联网搜索,问题才算解决。
整体思路
模型本身不知道现在几点、外面发生了啥。联网搜索的作用就是在模型生成答案之前,先用它去抓一批实时结果回来,塞进上下文,让模型基于这些新鲜材料来组织回答。流程是这样的:
-
用户提问
-
模型判断这个问题要不要查实时信息(要不要触发搜索工具)
-
触发的话,把查询词交给搜索工具
-
工具返回若干条带时间戳的结果
-
模型把结果当上下文,生成最终回答
关键在第 2 步和第 4 步。
具体配置
我用的是那种零代码就能拖节点的搭智能体平台,搜索工具是平台里现成的一个 MCP 组件,配置时主要填三个东西:触发条件、返回条数、结果裁剪长度。
工具描述我是这么写的(这段很重要,直接决定模型肯不肯调):
工具名:web_search
描述:当用户问题涉及"最新/今天/近期/实时价格/当前状态"等
时效性信息,或问到模型训练截止后可能发生的事件时,
必须调用本工具获取实时网页结果。返回 JSON 数组,
每条含 title / snippet / url / publish_time。
入参:query (string) 检索关键词,建议 8 字以内
伪代码大概长这样:
def answer(question):
if need_realtime(question): # 模型自己判断
results = web_search(extract_query(question))
results = results[:5] # 只取前 5 条,多了噪声大
context = format_with_time(results)
return llm(question, context)
return llm(question)
format_with_time 我特意把每条结果的发布时间拼进去了,像 [2026-06-20] 标题:xxx。因为模型看不到时间的话,会把三年前的旧闻和昨天的新闻一视同仁,排序全乱。加上时间戳后,它会明显倾向引用更近的来源。
两个踩过的坑
第一个是返回条数。我一开始贪多设了 10 条,结果上下文被搜索结果撑得老长,token 蹭蹭涨,回答延迟从一秒多飙到三四秒,而且模型还容易被边角料带跑偏。砍到 5 条后又快又准。
第二个是触发判断不稳。有些明明不需要联网的问题(比如"帮我把这段话翻译一下"),模型偶尔也去搜一圈,纯属浪费。我在工具描述里把"什么时候该调"写得越具体,误触发就越少。这块没有银弹,得拿一批真实问题反复试,把描述磨准。
效果
补上联网搜索后,实时类问题的准确率肉眼可见地上去了,幻觉基本压住。代价是每次要查实时信息的回答都会慢个一两秒,还有就是搜索结果质量参差,偶尔会引到内容农场那种低质页面,这个目前只能靠提高返回结果的筛选阈值缓解,没法根治。
模型那一层我直接走的讯飞星辰 MaaS,现成 API 调过去就行,没自己折腾算力部署,省了不少事。
更多推荐


所有评论(0)