那个谁也不敢从注册表里删掉的死工具
一个工具在你共享的 agent 目录里已经躺了十四个月。它是某位早已离职的工程师为两次组织重组前就被砍掉的工作流接上的,对接的后端服务的归属如今也没人说得清。这个工具定义占 380 个 token。它会出现在组织里每一个 agent、每一轮对话的系统提示中,因为没人能证明它没在被使用,而一旦证明错了,代价比永远扛着它还高。
这个工具就是那个没人敢删的数据库字段,就是那个日志早已轮转干净的定时任务,就是那条你 grep 不到任何引用、但因为 eval() 存在所以你不敢动的死代码。Agent 版本的这个问题更糟,因为持有成本不只是磁盘上的几个字节——它是用 token、用选择准确率、用安全攻击面付出的,而且是在你平台跑的每一次推理里付出。
大多数团队都是在目录跨过某个阈值之后才意识到这件事。大约在十五到二十个工具左右,选择准确率开始悬崖式下滑:近期的一系列研究测得,当 agent 的动作面超过这个数量时,准确率会跌到八成以下,而且失败模式不是大喊大叫的报错,而是悄无声息的错——模型挑了一个名字相近、看上去合理的工具,幻觉出一组能对上 schema 的参数,或者干脆漏掉了一次本该发起的调用。目录里的一个死工具不只占 token,它还在主动争夺被选中的机会。
棘轮只朝一个方向转
往共享 agent 目录里加一个工具,是某人周二下午一行代码的事。删一个,是几周的审计。这种不对称是结构性的,不是文化性的,在每一个跑得够久、攒下了足够库存的 agent 平台上都以同样的方式出现。
不对称的根源在于证据。加工具的论证要求是:有某个 agent 也许会从中受益;判错的最坏结果只是浪费 context、给动作面多塞一个没用的选项。删工具的论证要求则是:在今天的生产环境里,在任何合理的用户请求下,没有任何 agent 依赖它;判错的最坏结果是一个模型曾经用来调用的能力被悄无声息地打断。加错一个工具的代价摊到每一次推理上是几分钱,在数百万次调用里被稀释,落不到具体某个人头上。删错一条原来还在扛事的工具,代价是 Slack 里挂着你名字的那个线程。
于是目录越长越大。每个季度都会上一个新工具,但没有任何一个季度会退掉一个旧的。棘轮只朝一个方向转。这跟那种让 API 表面每年加二十个端点、减零个的病理是一回事。区别是,一个没人用的 REST 端点只让你多养一个 route handler 和一段文档;而一个没人用的工具,会从每一个模型的推理预算里切走一小片,直到有人付审计成本把它拔掉为止——永远地切。
