AgentSearchBench:在 1 万个真实 Agent 里挑一个能干活的,到底有多难?

核心摘要

你做过一件挺费劲的事吗——在 GPT Store 里翻找一个"能帮你写 Java 代码"的 GPT。搜索框里输入"java code",跳出来几十个看上去都一样的助手:JAVA Code Guide、Java Helper、Code Master Java……描述都是"擅长 Java 编程,遵循最佳实践",截图都漂亮,评分也都 4.5+。你随便点进去几个,发现真正能用的可能就一个,剩下的要么答非所问,要么生成一堆看似规范实则报错的代码。

UCL 这篇论文就是死磕这个问题:Agent 多到泛滥的时候,怎么从近 1 万个真实 Agent 里挑一个真的能完成任务的? 他们做了一个叫 AgentSearchBench 的 benchmark——9,759 个从 GPT Store、Google Cloud Marketplace、AgentAI Platform 抓来的真实 Agent,3,211 个任务,66,740 次真实执行评测。最扎心的发现是:语义相似度和实际性能之间存在持续的、显著的 gap——top 1 的 reranker 给出的排名和"上帝视角"的最优排名相比,依然差着十万八千里。BM25 在他们合成 query 上 NDCG@5 是 0.236,搬到真实 HLE benchmark 上直接掉到 0.022——93%的衰减。这不是某个方法的问题,是整个"靠描述匹配 Agent"范式的问题。论文给了一个轻量级补救方案——执行感知 probing,让 Agent 先跑几个探针 query,再用执行结果辅助排序。效果有但不大,更像是在告诉社区:这个方向才是对的,descriptive matching 已经撞墙了。

值不值得看?如果你正在做 Agent 路由、Multi-Agent Orchestration、或者类似 Agent Hub 之类的产品,这篇论文应该当作一个警告而不是一个解法来读。


论文信息

  • 标题:AgentSearchBench: A Benchmark for AI Agent Search in the Wild
  • 作者:Bin Wu, Arastun Mammadli, Xiaoyu Zhang, Emine Yilmaz
  • 机构:Centre for Artificial Intelligence, University College London (UCL)
  • arXiv:2604.22436
  • 代码:github.com/Bingo-W/AgentSearchBench

为什么 Agent 搜索是一个全新的问题

先承认一件事——我第一次看到"Agent 搜索"这个 framing 的时候,第一反应是"这不就是 Tool Retrieval 换了个壳吗?" ToolBench、ToolRet 这条线已经卷了很久了,从 BM25 一直卷到 7B 的 Decoder-Only retriever,难道 Agent 不就是 Tool 加了个 LLM 包装吗?

但坐下来读完前两节,我承认作者把问题厘清楚了。Tool 和 Agent 在搜索这件事上,差别其实挺本质:

维度 Tool Agent
功能边界 明确(API schema 定义清楚) 模糊(一个 GPT 可能既能写代码又能讲笑话)
描述与能力关系 文档基本反映了真实能力 描述夸大、能力重叠是常态
评估方式 输入输出可枚举 必须执行才知道行不行
候选规模 ToolBench 1.6w,ToolRet 4.3w GPT Store 一家就 1w+

更关键的是查询本身的形态。Tool retrieval 大多是"给定一个具体可执行的 query,找能完成它的工具"——这是一种有标准答案的搜索。但用户找 Agent 的时候,往往说的是"我想做个理财助手"、"帮我处理数据分析"——这是高层级、不可直接执行的目标。这种 query 在 ToolBench 那套 setup 里根本不存在。

论文用一张表把这个差异讲得很直接:

Benchmark 类型 候选数 真实场景 Query 类型
ToolBench Tool 16,464 ✓ 仅可执行
ToolRet Tool 43,215 ✓ 仅可执行
TREC 2025 LLM 1,131 ✓ 仅可执行
AgentSquare Agent 16 ✗ 仅可执行
OKC Bench Agent 127 ✗ 仅可执行
AgentSearchBench Agent 9,759 ✓ 可执行+不可执行

看到 AgentSquare 候选 16 个、OKC Bench 候选 127 个我有点想笑——这种规模哪叫"搜索",叫"模型选择"差不多。在真实开放生态里,候选池是 4 位数起步的,AgentSearchBench 把这个数量级补齐了。

怎么造出这 1 万个 Agent + 3000 个任务

这部分是工程量最重的活,我重点讲讲他们怎么避免几个常见的坑。

Agent 池:直接爬真货

9,759 个 Agent 来自三个真实平台:GPT Store(chatgpt.com/gpts)、Google Cloud Marketplace、AgentAI Platform。其中 7,867 个有可执行接口——可以真的调用、真的测能力。

为了把不同平台的异构 Agent 喂给同一个 retriever,作者设计了一个统一 schema,把每个 Agent 拆成四组语义信息:

Schema 组 字段示例
Agent 元信息 版本化 ID、名称、官方 URL、平台来源
能力描述 功能描述、分类标签、支持模态
使用指引 quick-start 指令、示例输入输出
可用性约束 价格、可访问性、底层模型、更新时间

举个例子:GPT Store 上的 "JAVA Code Guide" 在他们的 schema 里是这样:

ID:          agt:openaiagents:2518c1@v1.1
Source:      openaiagents
Name:        JAVA Code Guide
Description: A JAVA development assistant focusing on coding standards and quality.
Tools:       developer, browser, dalle, python
Model:       GPT-5.2
Quick start: Explain JAVA exception handling standards.
             How can I improve this MySQL query?
             Review my JAVA code snippet.
Access:      free
URL:         https://chatgpt.com/g/g-EYiFThMtQ

注意 quick-start 这一栏——这是 GPT Store 上每个 GPT 都会自带的"几个使用建议"。这玩意儿不是普通描述,是开发者实际验证过 GPT 能完成的事。后面的实验里,把 quick-start 一起喂给 retriever(叫 full-document indexing),效果有显著提升。这点我后面会展开。

任务和 relevance 的生成 pipeline

图1:AgentSearchBench 的任务与相关性标签生成 pipeline

图1:AgentSearchBench 的核心 pipeline。绿色路径是单 Agent 任务查询的构造,蓝色路径是高层任务描述的构造,红色路径是基于执行的 relevance 标签生成。整个 pipeline 的核心思想是 "任务和标签都从 Agent 出发,再用真实执行去验证"。

这张图基本浓缩了整篇论文的工程亮点,我拆开讲讲:

第一阶段:Task Query 构造(绿色路径)

不是凭空写 query,而是 grounded in agent documentation——从随机抽样的 Agent 出发,让 LLM 看着 Agent 的描述生成一个该 Agent 应该能完成的具体任务。然后过滤掉"闭卷任务"(不需要执行就能答的、纯知识问答类)。这一路下来产出了 2,452 个单 Agent 任务 + 500 个多 Agent 任务。

多 Agent 任务怎么造?把语义相关但不冗余的子任务用 LLM 拼成一个长 query,然后用 NLI(自然语言推理)验证:拼出来的复合 query 是否真的语义包含每一个子任务。论文里的例子很有代表性:

"I'm trying to reset my health and routine, so first ask me 5 questions about my schedule... then build a 2-week productivity plan... plus a 7-day Mediterranean meal plan at 1,800 kcal/day... and a 7-day English study plan..."

这种 query 显然不是一个 Agent 能搞定的——你需要规划助手、健康饮食助手、英语学习助手。多 Agent 检索就是要找出这些能配合完成 query 的 Agent 组合。

第二阶段:Task Description 构造(蓝色路径)

这是论文的真正贡献之一。task description 不是从某个 Agent 描述衍生出来的,而是从一簇语义相关的 query 抽象出来的高层目标。比如把"总结新闻"、"对比新闻源"、"监控网站更新"这些 query 聚类,抽象出一个 description:"Monitor, summarize, and compare news and web sources."

然后用 rubric-based judge(5 个维度评分),每个维度选 top-2 query 和这个 description 关联起来,最终每个 description 配 10 个具体 query。Agent 对 description 的相关性,等于它在这 10 个 query 上的平均执行表现。这个设计挺漂亮——它把"我能不能完成抽象目标"这件无法直接评估的事,转化成"我在这 10 个具体子目标上的命中率"。

第三阶段:Relevance 标签生成(红色路径)

每个 Agent 在 query 上的执行结果用 GPT-5.2 当 judge 打 1-5 分。≥4 分算 relevant。为什么用 LLM 当 judge?因为这个量级的标注(66,740 次执行)人工根本搞不定。

但 LLM judge 靠不靠谱?作者拉了 3 个 PhD 级别的标注者,对 500 个执行实例做人工评估。Cohen's kappa = 0.93,准确率 96.67%。这个一致性已经接近"两个人工标注者之间的一致性"了,说明在这个相对简单的 binary 判断(4-5 vs 1-3)上,LLM judge 是可信的。

还有个细节我得夸一下——doc-performance alignment 折扣。如果一个 Agent 文档里没声明能做某事,但执行起来居然能做,作者会给它打折(relevance × 0.5)。这是为了防止"瞎猫碰死耗子"型的 Agent 拉高指标——你要是文档写得清楚、执行能力也匹配,才算真正"相关"。

Benchmark 长什么样

数字层面:

统计项 数值
Agent 总数 9,759
任务总数 3,211
- 单 Agent 任务 2,452
- 多 Agent 任务 500
- 任务描述 259
每个描述对应的平均 query 数 10
每个 query 评估的平均 Agent 数 20
总执行次数 66,740

6.7 万次真实 Agent 执行——这个工程量我得说一句,是真烧钱。GPT-5.2 当 judge 又跑这么多 query,光 API 费用就是天文数字。

Agent 的能力分布是典型的长尾:

图2:AgentSearchBench 的 Agent 类别分布

图2:Agent 多样性。Data Analytics(11.3%)、Customer Support(10.1%)、Visual Content(9.9%)、Professional Advisory(9.6%)这四类占了 40% 以上。但长尾里也有 Career Services、Social Platforms、Creative Writing 这种小众但真实存在的类别。这种分布反映了一个真实问题——你想找 Customer Support 类 Agent,候选池里就有近千个,怎么选?

更关键的是 每个 query 对应多少个 relevant Agent:

图3:每个 query 对应的相关 Agent 数量分布

图3:上图——单 Agent 任务的 relevant agent 数集中在 1-20 个,多 Agent 任务集中在 10-40 个;下图——任务描述的 relevant agent 数中位数在 80 左右,分布更宽。这意味着仅靠"召回"是远远不够的,必须能 rank——在同样相关的几十个 Agent 里挑出真正最强的那几个。

这个分布是论文的核心 motivation——单纯的 retrieval 不解决问题,必须做精排。Task description 一查就能查出 80+ 个相关的 Agent,你怎么从里面挑出最能干的 5 个?这是 AgentSearchBench 真正要 benchmark 的事。

实验结果:所有方法都和 oracle 差出几个身位

Retrieval:在 1 万 Agent 里召回 top-K

下面是 retrieval 阶段的核心结果(NDCG @5/10/20,越高越好):

类型 模型 Task Query NDCG@5 Task Description NDCG@5
Sparse BM25 32.41 16.35
Sparse SPLADE v2 4.09 12.02
Dense BGE-Large v1.5 31.78 23.08
Dense MiniLM-L6 v2 29.02 20.67
Tool ToolRet 37.52 21.15
Tool Tool-Embed 34.02 21.15
Decoder Qwen-Embed 8B 25.25 20.67
Decoder E5-Mistral 7B 19.57 15.87

几个让我皱眉的事:

第一,Decoder-Only 的 7B/8B retriever 全面落后。E5-Mistral 7B 在 Task Query 上 NDCG@5 只有 19.57,比 BM25(32.41)还差一大截。这不是 Decoder retriever 不能用,而是它们没有在 Agent/Tool 这种异构、短描述、长尾分布的语料上训练过。这是个挺重要的工程信号——通用 LLM-based retriever 不会自动迁移到 Agent 检索任务上。

第二,Task Description 的绝对分数明显低于 Task Query。ToolRet 在 Task Query 上 NDCG@5=37.52,到 Task Description 直接掉到 21.15。原因不难理解——抽象目标里能力需求是隐含的,靠语义匹配自然吃亏。

第三,Completeness 极低。在 Task Description 上 @20 的 Completeness(即 top-20 至少覆盖每个子任务有一个相关 Agent 的比例)大多数方法都不到 5%。意思是说:就算你把 top-20 都召回出来,也极少能凑齐覆盖所有子任务的 Agent 组合。这对多 Agent 编排是个噩耗。

Reranking:top-20 已经给你了,请精排

reranking 假设 retrieval 已经把 top-20 召回出来(用执行结果做的 ground truth),现在你要在这 20 个里排序:

类型 模型 Task Query NDCG@1 Task Description NDCG@1
- Random Shuffle 51.43 53.00
Cross-Encoder BGE Reranker v2 63.09 54.31
Cross-Encoder MXBAI Reranker Large 52.09 52.84
Tool Tool-Rank 4B 63.84 52.24
Tool Tool-Rank 8B 66.67 53.92
Decoder Qwen Reranker 4B 64.67 58.00
LLM RankGPT GPT-5.2 63.59 66.00
LLM RankGPT Qwen-3 32B 61.00 53.95

注意一个特别有意思的细节:Random Shuffle 的 NDCG@1 居然有 51.43。这说明什么?top-20 里大部分都是相关 Agent(毕竟 retrieval 已经过滤过一遍),随便挑一个都不至于太差。这才是 reranking 的真实场景——不是从噪音里挑金子,而是从一堆金子里挑最大那块。

在这个语境下,看具体的 lift:

  • Task Query 上 Tool-Rank 8B 比 Random 高 15.24 个点
  • Task Description 上 RankGPT GPT-5.2 比 Random 高 13.00 个点

是有提升,但没有那种"碾压"的感觉。说实话,看到 GPT-5.2 在 Task Description 上能拿到 66.00 而其他模型基本卡在 53-58,我反而担心一件事——这是不是 GPT-5.2 当 judge 自带的偏向? GPT-5.2 既是评分员,又是 RankGPT 的 backbone,多少有点既当裁判又当运动员的味道。论文没怎么讨论这个潜在 bias,是个小遗憾。

最扎心的图:Oracle Gap

图4:Single-Agent 任务上的 Oracle Gap

图4:单 Agent 任务上各类方法的 accumulated golden score vs Oracle。蓝色虚线(Oracle)就是上帝视角——top-K 完美按真实性能排序的累计得分。下面四条线(Dense / Sparse / Decoder-Only / Tool-Specific)是各类方法的实际表现,互相之间贴得很近,但跟 Oracle 的距离始终在 2-3 倍——top-20 里加起来才 4.x,而 Oracle 已经 10+。这是整个领域的天花板距离。

这张图比所有数字都有说服力。所有方法离 Oracle 都有持续 2-3 倍的 gap,并且这个 gap 不集中在 top-K,而是均匀分布在整个排名上。意思是:好 Agent 不是被排到了第 6 位(你可以再多召回几个挽救一下),而是被埋在了第 15 位、第 18 位。这种 misalignment 不是召回数量能补救的,是排序能力的根本缺失。

为什么会这样?作者的判断是 semantic-performance gap——Agent 的描述质量参差不齐,有的 Agent 写得花里胡哨但实际能力一般,有的低调内敛但实际很能打。基于文本相似度的 retrieval/reranking 很难穿透这层包装。

论文的两个我特别欣赏的细节

细节一:合成 query 与真实 query 的差距

作者很坦诚地承认:他们的 query 是合成的(LLM 从 Agent 描述生成的),不是真实用户提的。会不会因此高估了所有方法的性能?

他们做了一个验证实验——把同样的 retriever 拉到 HLE(Humanity's Last Exam)和 Finance Agent Benchmark 这两个真实 query 上跑:

图5:Synthetic vs Realistic 对比

图5:同样的 BM25/BGE/ToolRet 在合成 query 和真实 query 上的 NDCG@5 对比。BM25 衰减最严重(0.236 → 0.022 / 0.047),跌了 80-93%;BGE 衰减相对温和(0.251 → 0.191 / 0.166);ToolRet 最稳定(0.285 → 0.194 / 0.147)。绝对值都掉了不少,但相对排序保持一致——这才是 benchmark 设计者最关心的事。

这个图我必须给个掌声。它说明两件事:

  1. 合成 benchmark 是高估的——真实场景的难度远高于 LLM 生成的 query
  2. 方法之间的相对优劣关系是保留的——你在合成 benchmark 上比赢了,在真实场景下大概率还是赢

这种"先承认局限,再证明 benchmark 至少能区分出方法优劣"的研究态度,是一篇严谨论文的标志。

细节二:Full-document indexing 的免费午餐

图6:Full-document indexing 几乎全方位胜过 Description-only

图6:x 轴是只用 description 做索引的 NDCG@5,y 轴是把 quick-start usage examples 也加进索引的 NDCG@5。基本上所有点都在 y=x 上方——加入使用示例之后效果普遍更好。其中 Tool-Rank、Qwen Reranker、RankGPT GPT-5.2 提升最明显。

这其实是一个挺反直觉的发现——与其换一个更强的 retriever,不如把 indexing 内容拓宽。为什么 quick-start 这种使用示例能帮上忙?回顾前面提到的——quick-start 是开发者实际验证过 Agent 能干的事,相当于 Agent 自带的"行为证据"。把这些行为证据并入索引,等于把 retriever 从"只能看简介"升级成"还能看履历"。

工程上这是个几乎免费的优化——你不需要换模型,不需要 fine-tune,只要在索引时多塞几行 usage example 就能拿到几个点。我觉得任何在做 Tool/Agent 检索的同学都应该立刻试一下。

细节三:Execution-Aware Probing 的小尝试

还有一个实验是 probing——让 LLM 生成一些 probing query,让候选 Agent 真的去跑,再用执行结果做额外排序信号。

图7:Probing 效果与方差的关系

图7:横轴是不同 reranker,纵轴是 win rate(probing 比不 probing 好的比例)。绿色(高方差 probe)的 win rate 普遍最高,bge 在高方差下达到 50%、tool-8B 达到 53.1%;蓝色(低方差 probe)在大多数模型上效果一般。一个反例是 rankgpt-gpt 在高方差下反而下降到 34.4%。

具体数字:

Model NDCG@5(无 probing) NDCG@5(有 probing) 变化
BGE Reranker v2 57.93 58.16 +0.40%
Tool-Rank 8B 60.82 61.71 +1.46%
Qwen Reranker 4B 60.96 61.91 +1.56%
RankGPT GPT-5.2 61.25 59.60 -2.69%

我得说实话——这个提升幅度其实不大。1.46%、1.56%,在 paper 里能写一段,但拿到工业落地是值不值得多做一轮额外执行(每次 probing 都要真的调 Agent,成本不低)的成本,是个开放问题。

更让我皱眉的是 RankGPT GPT-5.2 反而下降了 2.69%。这个负向效果作者没有给出充分解释。我的猜测是 GPT-5.2 自己已经"懂"得足够多,再喂给它一些 probing response 反而是干扰信号——大模型不需要这种额外的行为证据,它的 prior 已经够强。如果是这样,那 probing 这条路对小模型才有意义,对前沿大模型可能用处不大。

不过 probing 这个方向我是认的——未来 Agent 检索一定会从"描述匹配"走向"执行验证",只是怎么做得更轻量、更便宜,是要继续探索的。


我的判断:这篇论文值得读吗

值得,但要带着批判去读。

它的真正贡献是什么

不是某个新算法,是第一次在真实开放生态规模上把 Agent 搜索这个问题严肃地提出来。9,759 个真实 Agent、66,740 次真实执行、3 个真实平台、合成 query + 真实 query 双重验证——这种 setup 之前没人做过。AgentSquare 那种 16 个候选的"benchmark"在这种数据面前根本不算 benchmark。

更重要的是它揭示了一个集体的失败——目前所有 retrieval/reranking 方法(包括最新的 LLM-based RankGPT)在执行驱动的 ground truth 面前,离 oracle 都差着 2-3 倍的 gap。这不是某个 baseline 没做对的问题,是整个范式的 ceiling。这种"全员卡顶"的论文比"我提出一个新方法 SOTA"的论文有价值得多——它告诉社区:这条路要换新方向了。

它的局限和我的疑虑

第一,LLM-as-judge 的循环问题。GPT-5.2 既是相关性 judge、又是 RankGPT 的 backbone、又是 task generation 的 backbone。这种"裁判 = 选手"的 setup 多少有 self-bias。κ=0.93 的人工一致性证明了 judge 在 binary 任务上是可靠的,但在更精细的 ranking score 上呢?没有验证。

第二,合成 query 的局限。虽然作者用 HLE 和 Finance Agent 验证了相对趋势保留,但绝对分数的差距太大了——BM25 从 0.236 掉到 0.022,掉了 90%。这说明真实场景下的难度被严重低估,论文的乐观结论("reranker 可以达到 60+ NDCG")在真实业务里可能要打骨折。

第三,Probing 的成本被淡化。论文展示了 probing 有 1-1.5% 的提升,但没有讨论 probing 的成本——每次 probing 要真的调 Agent,对 GPT Store 这种闭源 Agent 还可能有 API 限流。如果你要给一个 query 里 top-20 候选 Agent 都跑 probing,那成本可能比直接让用户挨个试还高。这个成本-收益比的真实账论文没有算清楚。

第四,没有覆盖动态能力变化。Agent 是会更新的,今天的 GPT 明天就可能换底层模型、改 prompt。AgentSearchBench 是一个 snapshot benchmark,动态语义漂移这个问题完全没碰。但在真实场景里,这恰恰是 Agent 比 Tool 更难管理的地方。

工程启发

如果你正在做 Agent 路由、Agent Marketplace、Multi-Agent Orchestration 之类的产品,我从这篇论文里能拿走的几个具体动作:

  1. 不要相信 Agent 的自我描述。准备一个内部的执行记录池,定期跑一些 probing query 验证候选 Agent 的真实能力。
  2. Indexing 时把 usage examples / 历史调用样本一起塞进去。这是免费的提升。
  3. 不要指望 Decoder-Only retriever 直接迁移。如果你要做 Agent retrieval,专门 fine-tune 一个领域内的 retriever(比如 ToolRet 风格的),效果远好于通用大模型。
  4. 多 Agent 编排不要只看召回。Completeness 这个指标比 Recall 更重要——你需要的是覆盖所有子任务的 Agent 组合,不是 top-K 里有几个相关的。
  5. 执行成本是真实约束。execution-aware probing 这条路要走,必须配合 caching、subset sampling、cheap-model probing 等手段才划算。

一句话评价

这是一篇Benchmark > 方法的论文,价值在于把"从 1 万真实 Agent 里挑一个能干活的"这个问题扎实地 setup 起来,并且诚实地告诉社区:"你们现在都在 30-60 分挣扎,oracle 是 90 分以上,你们的路还远着呢。" 这种 honest paper 在卷 SOTA 的浪潮里挺珍贵的。

Agent 时代的搜索问题,远比我们想象的复杂。这篇论文是个开始,不是终点。


觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我