一个AI Agent每次调用工具都要额外等2到3秒。
不是模型推理慢。同样的模型,同样的prompt,不用工具时响应流畅得像聊天。一旦进了工具调用流程——选工具、填参数、等模型确认——整个节奏就卡住了。之前写过一个🔗用AI Agent搭工具链的完整实践[1],那次是搭起来能用,这次是搭起来好用。
我一开始以为是工具太多了。Agent注册了20多个工具,每次都要从列表里挑,模型得多花时间理解每个工具是干嘛的。这是我第一个直觉。
于是我做了第一件事:砍工具。从20砍到12,再把剩下的按使用频率排序,高频的放前面。测试了一下——没变化。
第二件事:简化工具描述。原来每个工具的description写得很详细,一两百字,把参数、边界条件、返回格式全写进去了。我把它们砍到30字以内,只保留核心用途。还是没变化。
说到这你可能猜到了——问题不在工具数量,也不在描述长度。
后来我跟进了一下每次工具调用的完整时间线,发现卡点不在模型理解工具,而在模型确认工具选择那一步。大部分LLM的工具调用流程是两阶段:先选工具→再填参数。但有些模型实现里,选完工具后还要回头check一遍——"我选的这个对吗?"——这一步消耗掉了大部分额外时间。
怎么发现的?我给每个工具调用加了计时日志,精确到毫秒级。发现选工具这一步耗时不到200ms,但从选完到进入参数填充,中间有个接近2秒的空窗期。这不是模型推理时间,是框架层在等模型的"二次确认"。
改法其实很简单:关掉二次确认机制。我们用的Agent框架有一个recheck_tool_selection的配置项,默认是true。设成false之后,模型选完工具直接进入参数填充阶段,跳过了那个确认环节。
改了之后,单次工具调用耗时从平均3.2秒降到了800毫秒。
事后想想这件事,问题不在于框架有这个配置,而在于我默认它开着是对的。在很多场景下,二次确认确实能减少错误调用。但我们的场景是:工具定义清晰、参数规范严格、每次调用都带完整的上下文——模型选错的概率本来就低。为那1%的错误率,让99%的调用多等2秒,不合理。
这个取舍不是技术问题,是场景理解问题。
后来我在另外两个项目里也发现了类似的配置项:
一个叫 tool_choice_confidence_threshold,默认0.7,调低到0.3之后延迟降了60%一个叫 parallel_tool_calls,默认false(串行调用),改成true后快了40%
每个框架都有自己的默认值,但默认值是为通用场景设计的。如果你的场景不一样,不改就是白交学费。
上周跟一个朋友聊,他说他的Agent每次调用工具要等4秒,一直以为是模型太慢,准备换模型。我让他查了一下框架配置,关了二次确认之后,直接好了。
所以如果你也在用AI Agent做工具调用,感觉响应不够快——第一步不是换模型,是先查配置。
引用链接
[1]🔗用AI Agent搭工具链的完整实践: https://mp.weixin.qq.com/s/TSBOgzD20DuS7G0DtYkK5g
夜雨聆风