当给 agent 增加工具越来越多时,它开始调用错误的工具。让模型自己写代码来调用它们,是解决办法。
摘要
文章认为,随着 agent 的工具集不断膨胀,直接调用工具的方式会逐渐失效。更稳健的解决方案是让模型在沙箱中编写代码,把工具当作函数来调用——这能减少上下文中的 schema 噪音、降低错误调用率,代价则是需要关注沙箱安全问题。
当 agent 只有少量工具时,直接调用它们毫无问题。但随着工具列表变长,问题就来了。每个工具的 schema 都会在 agent 开始真正工作之前全部塞进上下文,模型开始伸手去拿错误的工具,或者以混乱的顺序调用它们。常规的补救办法只能争取一点空间,之后就不管用了:缩短工具描述、将相关工具分组、在系统提示词中更严格地规定什么场景用什么工具——每种都有一点效果,但一旦任务需要连续使用多个工具,这些办法全都撑不住了。
真正站得住脚的做法,是不再把每个工具直接暴露给模型。给它一个小沙箱,让它写几行代码、把工具当作函数来调用,然后由它在代码中循环、过滤、链式组合这些调用,而不是每一步只做一次工具调用。
这带来两个变化。第一,上下文不再堆满一墙的 schema,每次运行的 token 消耗随之下降。第二,模型的错误调用变少了,因为编写一段短脚本本来就是它擅长的事情。
代价也是实实在在的:你现在运行的是模型写出的代码,所以这个沙箱能 import 什么、能访问什么,就成了必须严加管控的关键。如果你正在运行一个重度依赖工具的 agent,那么保留直接工具调用和让模型写代码调用工具之间,那条界线应该划在哪里?
相似文章
智能体的工具调用部分远比我们通常指向的模型简单
本文介绍了一个专为AI智能体工具调用设计的48M参数模型的开发。该模型使用语法确保有效的JSON输出,并且开源,可在特定API目录上进行定制。
当工具数量达到多少时,你的代理开始变笨?
作者讨论了AI代理的推理能力如何因工具过多而下降,指出Genie Code将MCP工具数量限制在20个,并邀请社区讨论解决方案。
给一个代理30个工具后,它在关键工具的使用上表现更差了。
作者观察到,给AI代理添加更多工具会增加分类复杂度,从而降低其选择正确工具的准确性;并且发现使用多个工具集更窄的小型代理可以提高可靠性。
为什么这么多智能体工具只是1:1的API封装?
这篇文章认为,许多AI智能体工具只是1:1的API封装,将分支逻辑推给大语言模型,导致失败。作者推荐任务形态的工具,比如upsert_contact,将搜索/创建/更新逻辑封装在代码中,传递已知上下文,校验输入,并返回结构化错误。
我见过的最严重的智能体错误,都是我的工具造成的,而不是模型的错。
一位 MCP 服务器开发者分享了从智能体失败案例中总结的经验,指出许多看似是模型犯下的错误,实际上源于设计不佳的工具输出、含糊不清的选项,以及放错位置的指令。每一项修复都落实在工具中,而不是提示词中。