你有没有发现,我们手头那个号称能"自动化一切工作流"的 AI 代理,怎么有时候聪明得像个博士后,有时候又蠢得像个铁憨憨?
让它"总结一下昨天的会议纪要,然后发给项目组",它能给你整出个花来。但让它"找到上个月跟 A 客户的所有合同附件,打包发我",它就开始装死,要么找不到文件,要么发错人。
我一度怀疑是不是我用的模型不行,或者我的 Prompt 写得不够"咒语化"。
直到我刷到 Anthropic 那帮人发的一篇技术博客,我一下就悟了。

问题根本不在 AI 本身,而在我们给它的"工具"太烂!
这就好比,你给了个绝世天才一把生锈的锤子,让他去造火箭。他不是不会,是手里的家伙事儿根本不对。有句俗语叫做,巧妇难为无米之炊,恐怕说的就是这个道理。
我们正处在一个奇妙的节点。Agent不再是玩具,它们开始成为我们真正的"数字员工"。但怎么给这位新员工配一套好用的"办公用品",直接决定了它是个"神助攻"还是"猪队友"。
那篇博客,就是 Anthropic 交出的"Agent装备采购指南"。我啃完之后,也感觉醍醐灌顶。今天就把我的思考和一些"偷学"来的心法,跟你唠唠。
写代码,是给机器看;写工具,是给"人"看
我们平时写代码,是给机器看的,指令要清清楚楚,1 就是 1,2 就是 2。getWeather("NYC")
就必须是纽约的天气,不能有二话。
但给 AI 写工具,完全不是一回事。
这更像是在给一个"聪明但有点随性"的同事写工作手册。你跟他说:"帮我看看今天要不要带伞",他可能会:
- 老老实实调用天气工具,然后告诉你"要带"。
- 凭常识跟你说"最近老下雨,带上吧"。
- 甚至反问你一句:"你在哪个城市?"
他可能看懂了你的工具,也可能没看懂,甚至可能脑补出一些你没想到的用法。
这就是所谓的"非确定性"。我们写工具,不再是建立一个冷冰冰的"函数约定",而是在和一个有自己想法的"智能体"沟通。
这个认知转变,是所有一切的开始。我估计你还没看懂我再说啥,别着急,继续看。你肯定能明白
我"偷学"到的几条"工具心法"
Anthropic 的工程师们搞了大量的内部测试,对比了"人类专家写的工具"和"AI 自己优化后的工具",发现后者性能居然更好。

这说明什么?说明我们人类对 AI 的"脑回路"有太多想当然了。
他们总结了几条原则,我觉得特别接地气,直接拿来就能用:
1. 工具不是越多越好,要"少而精"
这是个反常识的点。我们总觉得给 AI 的工具越多,它能力越强。大错特错!
想象一下,你要在通讯录里找"张三"。如果你的工具是 list_all_contacts()
,返回几千个联系人,让 AI 自己一个一个去看,它得把"脑容量"(上下文窗口)全耗在这上面,跟大海捞针一样。
正确的做法是什么?直接给它一个 search_contact_by_name(name)
的工具。
Anthropic 的建议是,把多个步骤合并成一个"高级工具"。比如,别搞什么 list_users
、find_free_time
、create_event
,直接来一个 schedule_meeting_with(participants, topic)
,让它自己搞定所有事。把复杂的逻辑封装在工具内部,而不是让 AI 在外面瞎折腾。这似乎和我们一贯提倡的单一职责原则
是相违背的,这正是我们应该转变的思路之一,因为 我们要应对 AI 的非确定性
,所以我们在提供工具给他获取上下文时,尽量的做到能够一个工具给的就别让他组合,我想稍微有点概率论尝试的人都在懂得我说什么,连续几次做对,对于 AI 太难了,但是做对一次,相对来讲还算简单。
2. 给工具分个"家",别让它们"打架"
未来一个 AI 可能会对接几十个服务,几百个工具。如果你的工具都叫 search
、create
,AI 直接就懵了,不知道该用哪个。
所以,命名空间很重要!asana_search_tasks
,slack_search_messages
,github_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.
我们到底是在创造一个更听话、更高效的"工具",还是在培养一个更独立、甚至有点不可预测的"伙伴"?
如果它真的变得很"聪明",聪明到能自己优化工具,甚至自己创造工具... 那我们这些"工具制造者",又该何去何从?