AI Agent 干不好活,不是它笨,告诉你一个残忍的现实,是你给他的工具太难用了

你有没有发现,我们手头那个号称能"自动化一切工作流"的 AI 代理,怎么有时候聪明得像个博士后,有时候又蠢得像个铁憨憨?

让它"总结一下昨天的会议纪要,然后发给项目组",它能给你整出个花来。但让它"找到上个月跟 A 客户的所有合同附件,打包发我",它就开始装死,要么找不到文件,要么发错人。

我一度怀疑是不是我用的模型不行,或者我的 Prompt 写得不够"咒语化"。

直到我刷到 Anthropic 那帮人发的一篇技术博客,我一下就悟了。

问题根本不在 AI 本身,而在我们给它的"工具"太烂!

这就好比,你给了个绝世天才一把生锈的锤子,让他去造火箭。他不是不会,是手里的家伙事儿根本不对。有句俗语叫做,巧妇难为无米之炊,恐怕说的就是这个道理。

我们正处在一个奇妙的节点。Agent不再是玩具,它们开始成为我们真正的"数字员工"。但怎么给这位新员工配一套好用的"办公用品",直接决定了它是个"神助攻"还是"猪队友"。

那篇博客,就是 Anthropic 交出的"Agent装备采购指南"。我啃完之后,也感觉醍醐灌顶。今天就把我的思考和一些"偷学"来的心法,跟你唠唠。


写代码,是给机器看;写工具,是给"人"看

我们平时写代码,是给机器看的,指令要清清楚楚,1 就是 1,2 就是 2。getWeather("NYC") 就必须是纽约的天气,不能有二话。

但给 AI 写工具,完全不是一回事。

这更像是在给一个"聪明但有点随性"的同事写工作手册。你跟他说:"帮我看看今天要不要带伞",他可能会:

  1. 老老实实调用天气工具,然后告诉你"要带"。
  2. 凭常识跟你说"最近老下雨,带上吧"。
  3. 甚至反问你一句:"你在哪个城市?"

他可能看懂了你的工具,也可能没看懂,甚至可能脑补出一些你没想到的用法。

这就是所谓的"非确定性"。我们写工具,不再是建立一个冷冰冰的"函数约定",而是在和一个有自己想法的"智能体"沟通。

这个认知转变,是所有一切的开始。我估计你还没看懂我再说啥,别着急,继续看。你肯定能明白


我"偷学"到的几条"工具心法"

Anthropic 的工程师们搞了大量的内部测试,对比了"人类专家写的工具"和"AI 自己优化后的工具",发现后者性能居然更好。

这说明什么?说明我们人类对 AI 的"脑回路"有太多想当然了。

他们总结了几条原则,我觉得特别接地气,直接拿来就能用:

1. 工具不是越多越好,要"少而精"

这是个反常识的点。我们总觉得给 AI 的工具越多,它能力越强。大错特错!

想象一下,你要在通讯录里找"张三"。如果你的工具是 list_all_contacts(),返回几千个联系人,让 AI 自己一个一个去看,它得把"脑容量"(上下文窗口)全耗在这上面,跟大海捞针一样。

正确的做法是什么?直接给它一个 search_contact_by_name(name) 的工具。

Anthropic 的建议是,把多个步骤合并成一个"高级工具"。比如,别搞什么 list_usersfind_free_timecreate_event,直接来一个 schedule_meeting_with(participants, topic),让它自己搞定所有事。把复杂的逻辑封装在工具内部,而不是让 AI 在外面瞎折腾。这似乎和我们一贯提倡的单一职责原则是相违背的,这正是我们应该转变的思路之一,因为 我们要应对 AI 的非确定性,所以我们在提供工具给他获取上下文时,尽量的做到能够一个工具给的就别让他组合,我想稍微有点概率论尝试的人都在懂得我说什么,连续几次做对,对于 AI 太难了,但是做对一次,相对来讲还算简单。

2. 给工具分个"家",别让它们"打架"

未来一个 AI 可能会对接几十个服务,几百个工具。如果你的工具都叫 searchcreate,AI 直接就懵了,不知道该用哪个。

所以,命名空间很重要!asana_search_tasksslack_search_messagesgithub_search_repos... 一目了然。这就像给工具贴上了明确的标签,AI 一看就知道该去哪个工具箱里拿东西。别说是 AI,就是人,清晰的命名也很重要。

3. 别扔给 AI 一堆乱码,要说"人话"

这一点我踩过无数坑。工具返回一堆 user_id: "a1b2c3d4-e5f6-7890-abcd-ef1234567890"file_uuid: "x7y8z9..."

你让 AI 怎么记?它哪知道 a1b2c3d4 是张三还是李四?

直接返回自然语言!名字、描述、关键信息... 让 AI 能直接理解。如果实在需要 ID,可以加个参数,让 AI 选择要"简洁版"还是"详细版"的回复。就像这样:

  • 简洁版:"张三,产品经理,负责XX项目。"
  • 详细版:"{id: 'a1b2c3d4', name: '张三', role: '产品经理', project: 'XX项目'}"

AI 需要的时候再要 ID,平时就给它看人话。这能省下大量宝贵的"脑容量"。

4. AI 的"脑容量"是有限的,别浪费

AI 的上下文窗口就像我们的短期记忆,记不住太多东西。所以你的工具返回结果,一定要"减肥"。

分页、过滤、截断... 这些功能必须安排上。如果结果太长,就给它个提示:"结果太长被截断了,你可以缩小搜索范围再试试"。

错误信息也要写得"有用"。别动不动就抛个 Error 500,或者一长串代码堆栈。直接告诉它:"你输入的日期格式不对,请用 'YYYY-MM-DD' 的格式,比如 '2025-09-11'。" AI 看了才能改。

5. 这是最最最重要的一点:把工具描述当成"说明书"来写!

工具的描述和参数定义,就是 AI 唯一能看懂的"说明书"。你必须把它写得像给一个新员工培训一样。

  • 别用缩写user 不如 user_id 清晰。
  • 讲清楚上下文:这个工具是干嘛的?在什么场景下用?和其他工具有什么关系?
  • 给个例子:在描述里直接给一个正确的调用示例,效果拔群。

Anthropic 甚至说,他们仅仅通过优化工具描述,就让 Claude 在一个专业编程基准测试(SWE-bench)上达到了 state-of-the-art 的水平。你说这玩意儿重不重要?


写在最后,一些不成熟的思考

我们以前写软件,追求的是稳定、可控、逻辑严密。现在给 AI 写工具,追求的却是"易用"、"启发"、"符合直觉"。

这感觉就像从造一台精密的钟表,变成了培养一个有点个性的孩子。你不能完全控制它,但你可以通过给它好的"玩具"(工具)和好的"教育"(描述),引导它往更聪明的方向成长。

Anthropic 说了,要搞评估,要反复迭代,让 AI 自己优化自己的工具... 听着就头大,这工作量可不小。

这些道理听起来都挺对的,但实际操作起来呢?我的小项目,真有必要搞得这么复杂吗?还是说,这只是巨头们的"军备竞赛"?

我有点不确定。我只是觉得,合理就好,现在做事情,首先,凡事得讲就一个 ROI.

我们到底是在创造一个更听话、更高效的"工具",还是在培养一个更独立、甚至有点不可预测的"伙伴"?

如果它真的变得很"聪明",聪明到能自己优化工具,甚至自己创造工具... 那我们这些"工具制造者",又该何去何从?

相关推荐
brzhang3 小时前
一文说明白为什么现在 AI Agent 都把重点放在上下文工程(context engineering)上?
前端·后端·架构
reembarkation3 小时前
自定义分页控件,只显示当前页码的前后N页
开发语言·前端·javascript
Roye_ack3 小时前
【项目实战 Day9】springboot + vue 苍穹外卖系统(用户端订单模块 + 商家端订单管理模块 完结)
java·vue.js·spring boot·后端·mybatis
gerrgwg3 小时前
React Hooks入门
前端·javascript·react.js
ObjectX前端实验室3 小时前
【react18原理探究实践】调度机制之注册任务
前端·react.js
汉字萌萌哒4 小时前
【 HTML基础知识】
前端·javascript·windows
罗亚方舟4 小时前
微服务故障排查
微服务·云原生·架构
ObjectX前端实验室4 小时前
【React 原理探究实践】root.render 干了啥?——深入 render 函数
前端·react.js
深度学习实战训练营4 小时前
MnasNet:NAS 自动架构搜索
架构