AI 搜索智能体在演示中能正常工作,但在生产负载下可能失败:检索返回不完整的证据、重试重复不成功的动作,或执行超出时间和成本限制。为 AI 智能体提供 Web 基础设施的 TinyFish 发布了两份技术指南来应对这些挑战。第一份定义了生产级智能体搜索架构,第二份分享了构建深度研究系统的经验教训。两者共同探讨了自主搜索智能体如何规划检索、评估证据、处理失败,并管理模型推理与确定性执行之间的边界。
TL;DR
TinyFish 介绍了其智能体搜索架构,以及构建深度研究系统的关键工程经验。该系统基于四个 Web 原语(TinySearch、TinyFetch、TinyBrowser 和 TinyAgent),围绕基础模型通过一个七阶段控制循环运行。在 OpenBenchmarks 上,TinyFish 在编码任务上实现了 79.0% 的完成率,同时提供了最低的任务成本中位数($0.050)和 token 占用,凸显了刚性控制循环、针对特定失败的重试以及统一推理优于独立规划器的重要性。
什么是智能体搜索架构?
智能体搜索架构使 AI 智能体能够规划检索、访问来源、评估证据,并在新信息出现时调整其方法。模型提供推理,而外围应用管理状态、工具执行、证据处理、运行时策略和输出验证。这些组件共同使智能体能够处理不完整的结果、可恢复的失败以及不断变化的信息需求。
TinyFish 的架构从 2026 年 2 月的一篇架构预印本中汲取了基础概念,该预印本通过类型化工具接口将推理与执行解耦。该论文确立了必要的系统护栏,包括详细的追踪以及对 token、执行时间、总体成本和工具调用的严格上限。
生产级搜索运行是如何工作的?
TinyFish 将一次运行拆分为 7 个阶段:
定义任务:将目标转化为“证据契约”:必填字段、来源、时效性和完成规则。
规划检索:将独立需求与依赖需求分开。依赖查询需等待先前的答案。
选择第一条路径:根据系统对证据的了解程度选择工具。
发现、选择、检索:在页面内容到达之前,将搜索结果视为候选。
评估:将证据标记为充分、不完整、冲突、无法访问或预算耗尽。
恢复或升级:修改查询、重试、更换来源或更换访问方式。
停止并验证:返回已完成、不完整、失败、已取消或需要人工审核。
阶段 2 针对一个已知的失败情形。ChainRAG(ACL 2025)将其称为“检索丢失”(lost-in-retrieval)问题,即在多跳问题分解过程中关键实体消失。阶段 6 借鉴了 Search-R1,该工作展示了模型如何在推理过程中学习生成额外的搜索查询,以应对先前检索不足的情况。在 7 个问答数据集上,其学习到的多轮搜索比 RAG 基线分别高出 41%(Qwen2.5-7B)和 20%(Qwen2.5-3B)。
搜索智能体应如何路由工具?
路由应遵循信息缺口,而非固定的阶梯。
起始条件原始能力应用仍掌控的部分来源位置未知SearchQuery 规划、来源策略、停止URL 已知且可读Fetch完整性检查、声明验证应用必须控制页面操作Browser每一个操作、重试和检查点跨多个页面的决策Web Agent业务规则、预算、验证
升级并不总是解决办法。结果不佳需要更好的查询。来源冲突需要更强的证据。更重的工具两者都解决不了。
重试应基于失败类型,并保持在既定限制内。瞬时错误可能值得重复请求,而不完整或冲突的证据则需要不同的方法。浏览器重试还必须考虑已完成的动作,以避免意外后果,例如重复提交同一表单。
better',{'font-size':13,'font-weight':700,fill:G,'text-anchor':'start'});
D.sf.forEach(function(d){var tf=d[0]==='TinyFish',g=el('g',{},s4);
var ring=el('circle',{r:tf?17:0,fill:'none',stroke:G,'stroke-opacity':.4,'stroke-width':2},g);
var c=el('circle',{r:tf?10:8,fill:tf?G:'#6a6a6a',stroke:'#111','stroke-width':2},g);
var t=tx(g,0,0,'',{'font-size':13,'font-weight':700,fill:tf?G:TX,'text-anchor':'start'});
pts[d[0]]={g:g,c:c,t:t,ring:ring,x:sx(d[1]),y:sy(d[2])}});
pts['Exa fast']=pts['Exa deep'];boost(s4,1.2)}
var anim4=null,OFF={sf:{'TinyFish':[-16,-20,'end'],'Exa deep':[-14,-18,'end'],'Perplexity':[14,-12,'start'],'Firecrawl':[14,16,'start']},
so:{'TinyFish':[16,0,'start'],'Exa fast':[-14,0,'end'],'Perplexity':[14,0,'start'],'Firecrawl':[14,0,'start']}};
function drawScatter(fromZero){var data=D[cur],start={},t0=null;
data.forEach(function(d){var p=pts[d[0]];start[d[0]]=fromZero?{x:sx(0),y:Y0}:{x:p.x,y:p.y};p.tx=sx(d[1]);p.ty=sy(d[2]);
p.t.textContent=d[0]+' '+d[2].toFixed(1)+'% · $'+d[1].toFixed(3)});
anim4=function(ts){if(!t0)t0=ts;var f=Math.min(1,(ts-t0)/900),e=1-Math.pow(1-f,3);
data.forEach(function(d){var p=pts[d[0]],s=start[d[0]];p.x=s.x+(p.tx-s.x)*e;p.y=s.y+(p.ty-s.y)*e;p.g.setAttribute('transform','translate('+p.x+','+p.y+')');
var o=OFF[cur][d[0]];p.t.setAttribute('x',o[0]);p.t.setAttribute('y',o[1]);p.t.setAttribute('text-anchor',o[2])});
if(f>=1)anim4=null}}
build4();chips('c4','b',function(b){cur=b;drawScatter(false)});drawScatter(true);
function loop(ts){if(active==='p1'&&run1)run1.tick(ts);if(active==='p3')tick3(ts);if(anim4)anim4(ts);
if(pts.TinyFish)pts.TinyFish.ring.setAttribute('r',15+3*Math.sin(ts/220));requestAnimationFrame(loop)}
requestAnimationFrame(loop);
window.addEventListener('load',post);window.addEventListener('resize',post);setTimeout(post,300);
})();
</script>
</body></html>
">
TinyFish 在构建深度研究时学到了什么?
深度研究智能体会搜索、浏览并生成带引用的全面报告。大多数工程挑战集中在上下文管理、系统编排和产品设计上。
经验 #1:移除独立的规划器
最初的迭代使用一个每次重新创建的独立规划器。只有结构化状态会传入其中。对于像“只关注东南亚的定价风险”这样的后续查询,智能体会漂移回宽泛的市场研究。TinyFish 随后将规划移入编排器自身的统一推理循环中。
经验 #2:移除子智能体:
TinyFish 最初为每个搜索查询分配一个单独的子智能体,增加了上下文切换开销、延迟和成本。团队后来用工具调用替代了这些子智能体,用于排序搜索结果、分类来源和提取证据等可重复任务。这减少了传回编排器的信息量,使其能够专注于研究规划和决定下一步调查什么。
经验 #3——匹配研究者:
TinyFish 最初针对来源覆盖度优化其研究系统,但用户更看重支持证据的质量和相关性。团队调整了来源排序以考虑研究目标,并增加了对域名进行优先级排序、排除或限制的控制。它还开发了一个内部评估框架,使用 LLM 评判器来评估报告的相关性、证据强度、引用可信度和来源多样性。
成本和延迟是如何累加的?
TinyFish 按整个任务做预算,而不是按单次调用:
任务延迟 = 规划 + 搜索 + 检索 + 评估 + 重试 + 交互步骤 + 排队。
任务成本 = token + 工具调用 + 页面或浏览器使用 + 重试 + 基础设施。
SearchAgent-X(ICLR 2026)说明了原因。精确检索增加了开销,而粗粒度检索迫使额外的推理。与测试的基线相比,其修复实现了最高 3.4 倍的吞吐量和 5 倍的延迟降低。
TinyFish 在搜索和抓取方面表现如何?
OpenBenchmarks 固定模型(gpt-5.6-sol)、100 个任务和预算,仅改变提供商。分数为 3 次运行的平均值。
指标TinyFishExa deepPerplexityFirecrawlSearch + fetch 完成率79.0% ± 2.083.0% ± 1.077.7% ± 1.576.0% ± 1.0任务时间中位数24s37s22s34s任务成本中位数$0.050$0.127$0.083$0.082任务 token 数中位数12,84423,66020,06217,379仅搜索完成率59.3%66.3%(Exa fast)77.3%70.3%搜索标价$0$0.012$0.005$0.005
来源:OpenBenchmarks 榜单,更新于 2026 年 9 月 26 日。任务仅覆盖企业文档。
OpenBenchmarks 还单独报告了仅搜索的结果。在该配置下,TinyFish 的任务完成率为 59.3%,Perplexity 为 77.3%,Firecrawl 为 70.3%,Exa Fast 为 66.3%。这些结果不应与搜索加抓取的得分直接比较,因为可用的检索能力不同。
关键要点
控制整个轨迹,而不是 1 次搜索调用。
按信息缺口路由;仅在访问失败时升级。
将规划和执行保持在 1 个推理循环中。
将确定性步骤移入工具调用,而不是子智能体。
按研究目标对来源排序,而不是单一质量分数。
阅读架构指南、深度研究经验教训和 TinyFish 文档。
感谢 Tinyfish 团队为本文提供的思想领导力/资源。本文由 TinyFish 赞助。
文章《TinyFish Breaks Down Agentic Search Architecture for Production AI Agents》首次发布于 MarkTechPost。