跳到主要内容

规模化工具发现:为何纯嵌入检索在超过 20 个工具后开始失效

· 阅读需 11 分钟
Tian Pan
Software Engineer

大多数构建 AI 智能体的团队,都会在第五个迭代周期发现同一个问题:智能体再也无法可靠地选对工具了。十个工具时,基本还能用。二十个时,准确率开始下滑。五十个时,你会亲眼看着智能体在应该调用 update_record 的时候调用了 search_documents,而日志毫无解释。常见的反应是调整工具描述——加更多上下文、写得更明确、重写示例。这偶尔有效,但它绕开了根本原因:平面嵌入检索在大型工具库中架构上就是错的,更好的描述无法修复一个架构问题。

工具选择本质上是检索,而检索有已知的扩展上限。理解这些上限——以及绕过它们的结构化元数据模式——是让智能体系统在生产中稳定运行与需要持续人工维护之间的分水岭。

为何纯嵌入检索会随规模退化

基于嵌入的工具检索,将用户查询和所有工具描述编码到共享向量空间,然后返回最接近查询的工具。这种方式快速、通用,在工具库较小时效果出奇地好。问题出在数学层面。

近期的理论研究揭示了一个根本性限制:嵌入模型能够返回的不同 top-k 子集数量,受其输出维度的约束。一旦工具库规模超过相对于该约束的临界阈值,模型就无法区分相似工具了。两个仅在输入契约上有所不同的工具——比如 create_usercreate_service_account——如果描述中共享足够多的词汇,嵌入结果将趋于一致。模型会选择在训练数据中出现频率稍高的那个,而不是用户真正需要的那个。

失败模式是可以预测的:

词汇重叠压缩了距离。 当工具共享领域术语——任何真实 API 都不可避免如此——嵌入相似度便成为功能区分的糟糕代理。一个更新用户账单地址的工具和一个更新收货地址的工具,即便下游影响完全不同,嵌入距离也会很近。

模型更新导致嵌入漂移。 当嵌入模型升级时,用旧模型生成的索引就会失准。团队往往将随之而来的质量下降归咎于提示词漂移或数据问题,在错误的方向上排查数周。

代码混用造成不相交的聚类。 在技术/自然语言混合的工具库中,用开发者术语表达的查询("POST 到端点")和用用户术语表达的查询("保存我的修改")会落在嵌入空间的不同区域,即便它们本应指向同一个工具。

基准测试用数字印证了这一直觉。在 Composio 基准测试中——该测试在 8 个函数模式下的 50 道题中评估工具选择——准确率从无优化时的约 33% 提升到应用多种策略后的 74%。在已发表研究中,结构化工具调用任务的平均准确率约为 69%,标准差超过 20 个百分点。这个方差告诉我们,问题对实现方式非常敏感,不只取决于模型能力。

自描述工具究竟是什么样子

检索退化时,第一反应是改进工具描述。这没有错,但不够。散文描述针对人类可读性优化;检索系统需要的是机器可解析的结构,能够编码远超意图的信息。

有效的能力元数据包含四个组成部分:

意图类别。 一个受控词汇表标签——不是散文摘要——将工具放入分类体系中。例如:{domain: "identity", action: "mutate", entity: "user-role"}。意图类别可以在语义搜索运行之前就实现精确匹配路由。被分类为 {action: "read"} 的查询永远不会到达 {action: "mutate"} 的工具。

输入契约。 必填和可选参数的类型化模式,包括 JSON 类型系统无法表达的语义约束。"此字段接受用户 ID,而不是邮件地址"——这类信息应该存在于结构化元数据中,而不是 LLM 在推理时读取的散文描述字段里。

前置条件。 此工具成功执行前,世界状态必须满足哪些条件。create_invoice 要求客户记录存在且账单周期开放。将前置条件显式化,使智能体——或路由层——能够在调用工具前验证资格,并在前置条件不满足时优雅恢复。

副作用档案。 工具是只读、幂等还是破坏性的;是否触发下游工作流;是否可逆。不知道 archive_record 是不可逆操作的智能体,会毫不犹豫地在 soft_delete 才是正确选择时使用它。

一个填写了这四个字段的工具,其自描述程度足以让路由器无需 LLM 解读散文就能做出路由决策。"将新员工注册进合规培训"这样的查询,可以以 92.8% 的准确率匹配到 workday_create_learning_enrollment——即便两者之间没有任何关键词重叠——因为起作用的是意图分类,而不是字符串相似度。

分层路由优于平面检索

一旦拥有结构化元数据,你就可以构建一个随库存增长仍能可预测运行的两阶段发现架构。

第一阶段:意图路由。 一个快速分类器(不需要是大模型)将用户请求映射到意图类别或聚类。这将 200 个工具的库存缩减为 10–15 个共享相关领域和动作类型的候选工具。分类器基于受控词汇表标签训练,而非散文,因此随着库存增长会优雅降级。

第二阶段:聚类内的语义选择。 在小候选集上,嵌入相似度效果良好。检索系统现在比较的是上下文已经相关的工具,词汇重叠的失败模式基本消除。

动态方法进一步拓展了这一思路。动态工具依赖检索不在初始查询时选取所有工具,而是根据不断演进的计划来条件化工具选择:每步之后,根据已完成的内容和仍需完成的内容重新查询工具库。一个三步工作流不在开始时加载全部三个工具;而是在智能体推理到需要某工具的节点时才加载。这减少了大型工具库在多服务器部署中带来的上下文开销——每轮 10,000–60,000 个 Token 的"MCP 税"——同时提升了多步任务的选择准确率。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates