那天刷Hacker News,看到一篇论文火了:“Self-generated Agent Skills are useless”。
点进去一看,是微软研究院的人做的研究,说Agent自己生成的技能基本没用,但人工设计的技能能提升16.2%的成功率。

我当时就想:真的假的?我得试试。

核心问题:Agent到底需要什么样的工具?

以前我以为,让Agent自己根据任务生成工具不就完了?
但HN上那篇论文直接泼冷水:自生成技能平均提升0%


我的实验设计

说干就干。我搭了个简单框架,想验证三个场景:

  1. 裸奔模式:纯LLM,不给任何工具
  2. 精装模式:我手工写的4个工具(计算器、文本分析、数据提取、JSON格式化)
  3. 自动生成模式:让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裸奔就能做得很好,硬加工具反而增加复杂度。

关键是要识别:什么时候需要精确性,什么时候需要灵活性。


项目的局限

说实话,这个实验还有很多不足:

  1. 样本太少:只有5个任务,覆盖面不够
  2. 模型单一:只用了gpt-4o-mini,没有测试其他模型
  3. 生成模式不完整:因为handler绑定问题,没做到真正的"自生成"
  4. 没有多轮对话:都是单轮任务,没测复杂流程

但这正是实验项目的意义——发现问题,而不是假装完美。

代码我已经开源了(虽然有点糙):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
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐