我试了试让AI自己生成工具,结果有点尴尬
摘要: 微软研究论文指出AI Agent自生成技能几乎无效,而人工设计技能可提升16.2%成功率。作者通过实验验证这一结论,设计了三种测试模式:纯LLM、人工工具(计算器、文本分析等)和LLM自生成工具定义。结果发现人工工具在精确任务中效果显著,但编写过程复杂,需精细调整参数、错误处理和描述文案;而自生成工具因无法绑定实际代码执行,难以闭环。实验表明技能设计需权衡精确性与灵活性,未来或需人机协作审
那天刷Hacker News,看到一篇论文火了:“Self-generated Agent Skills are useless”。
点进去一看,是微软研究院的人做的研究,说Agent自己生成的技能基本没用,但人工设计的技能能提升16.2%的成功率。
我当时就想:真的假的?我得试试。
核心问题:Agent到底需要什么样的工具?
以前我以为,让Agent自己根据任务生成工具不就完了?
但HN上那篇论文直接泼冷水:自生成技能平均提升0%。
我的实验设计
说干就干。我搭了个简单框架,想验证三个场景:
- 裸奔模式:纯LLM,不给任何工具
- 精装模式:我手工写的4个工具(计算器、文本分析、数据提取、JSON格式化)
- 自动生成模式:让LLM自己看任务描述,生成工具定义
测试任务选了5个,从简单计算到多步骤组合任务。
用的模型是gpt-4o-mini,主要是为了省钱——反正是个实验。
写工具的过程让我自闭了
先说说"精装模式"的工具编写体验。
我本来以为,写几个简单的工具函数能有多难?
结果花了整整两个晚上。
第一个坑:参数设计
比如计算器工具,最开始我想做成通用的,支持各种复杂表达式。
但后来发现,通用意味着参数难设计,Agent调用的时候容易搞错。
最后妥协了,只支持四则运算,参数就一个字符串:expression。
简单粗暴,反而效果好。
第二个坑:错误处理
Agent调用工具失败怎么办?
最开始的版本直接抛异常,结果整个任务链断了。
后来改成返回错误字符串,让LLM自己决定怎么处理。
这个设计其实挺有意思——有时候LLM看到错误,能自己修正参数再试一次。
第三个坑:描述文案
工具的描述(description)太重要了。
写得模糊,Agent不知道什么时候该用;写得太长,又容易分散注意力。
我调了大概十几次才满意。
这时候我突然理解论文的结论了:写一个Agent能正确使用的工具,真的不容易。
自动生成模式的困境
好,现在来到最尴尬的部分。
我的自动生成逻辑很简单:把任务描述丢给LLM,让它输出工具的JSON定义(name、description、parameters)。
生成这部分其实还行,LLM能输出像模像样的定义。
但有个致命问题:生成的工具只有定义,没有实际的handler函数。
我想了几个方案:
方案1:让LLM同时生成Python代码,然后exec执行。
太危险了,万一生成个rm -rf /怎么办。放弃。
方案2:做个通用handler,根据参数定义动态处理。
理论上可行,但复杂度飙升,我没时间做了。
方案3:只做对比实验,比较"预定义工具"和"生成工具定义"的效果。
这个相对现实,但也不是真正的"自生成技能"。
所以你看,论文说的"自生成技能没用"可能还有个隐藏前提:
即便生成了技能定义,怎么绑定实际可执行的代码,也是个未解难题。
初步测试结果
虽然我还没跑完完整的benchmark,但简单测试了几个case,发现一些有意思的现象。
简单计算任务(比如123 * 456 + 789):
- 裸奔模式:LLM有时候会算错,尤其是大数
- 精装模式:100%正确,工具直接算出结果
- 生成模式:还没完全跑通,但预计和裸奔差不多(因为没实际handler)
文本提取任务(从段落里提取邮箱):
- 裸奔模式:LLM能提取,但格式不统一,有时候会漏
- 精装模式:用正则精准提取,格式统一
组合任务(计算税后价格并格式化输出):
- 裸奔模式:计算+格式化,容易在中间步骤出错
- 精装模式:计算器工具 + JSON格式化工具,分步骤完成,成功率明显提升
这个发现其实挺符合直觉:当任务需要精确计算或标准格式处理时,工具的价值最大。
如果是开放式创意任务,工具反而可能限制发挥。
我现在的想法
跑完这个实验,我有几点感悟:
1. 技能设计是个手艺活
不是说随便包装个函数就叫技能。
参数怎么设计、错误怎么处理、描述怎么写,都影响Agent的使用效果。
论文里说精心设计的技能能提升16.2%,我觉得可能低估了——如果技能设计得烂,说不定还会降效。
2. 自生成技能的问题在于"闭环"
生成技能定义容易,但生成可执行的代码很难。
即便能生成代码,怎么保证安全、怎么验证正确性,都是问题。
也许未来的方向是:Agent生成技能定义,人为审核并补充实现。
3. 不是所有任务都需要技能
我测试下来发现,有些任务LLM裸奔就能做得很好,硬加工具反而增加复杂度。
关键是要识别:什么时候需要精确性,什么时候需要灵活性。
项目的局限
说实话,这个实验还有很多不足:
- 样本太少:只有5个任务,覆盖面不够
- 模型单一:只用了gpt-4o-mini,没有测试其他模型
- 生成模式不完整:因为handler绑定问题,没做到真正的"自生成"
- 没有多轮对话:都是单轮任务,没测复杂流程
但这正是实验项目的意义——发现问题,而不是假装完美。
代码我已经开源了(虽然有点糙):https://github.com/YaBoom/agent-skills-zyt
如果你有兴趣,可以clone下来试试,也欢迎提issue告诉我哪里设计得不合理。
📁 项目地址:https://github.com/YaBoom/agent-skills-zyt
参考
- SkillsBench论文: arXiv:2602.12670
- Claude Code: https://www.anthropic.com/claude-code
- Coinbase AI Wallet: https://www.coinbase.com/developer-platform/demos/ai-wallet
更多推荐

所有评论(0)