技能装了却从没被调用:description 与可移植性

作者:程序员白大力 · 2026-09-28 09:13
技能装了却从没被调用:description 与可移植性

封面

技能写完、装好,然后发现:它从来没有被自动触发过。 每次都得手动点名才想起来用。

这不是模型的问题,九成出在两处——description 写得不像触发条件,或者技能里藏着换台机器就废的东西。

一、description 是唯一的入口

技能的第一层加载(常驻上下文)只有 name 和 description 两项。也就是说:模型判断"该不该用这个技能"时,它手里只有这两行字。

正文写得再好,description 没写对,就等于这个技能不存在。

官方对 description 的要求很明确:必须同时说清"做什么"和"什么时候用"。对比一下:

# 差的写法
description: 处理文章相关任务

# 好的写法
description: 为已完成并落盘的 Markdown 文章生成封面图,并把本地相对路径引用写回 md。
  必须先运行 gate.py 校验文章确实写完,不通过一律禁止出图。
  当用户要求"生成封面"、"配图"、"封面图"、"补封面"时使用本技能。

好的写法有三个要素:

1.
做什么:一句话说清输入和输出
2.
关键约束:把最容易出错的硬性条件写进去(比如"必须先校验")
3.
触发词:把用户可能的说法列全——包括口语化的叫法

第三点最容易被忽略。用户不会照着你的专业术语说话,他会说"配个图""补一下封面"。把用户真实的叫法写进 description,命中率会明显不一样。

二、可移植性:换台机器还能不能用

第二个高频问题是技能在本机跑得好好的,发给别人就废。原因通常藏在两处:

绝对路径。 技能里写着某个具体目录,换台机器那个路径根本不存在:

# 有问题
- 交付目录:/Users/<某人>/workspace/articles/<系列名>

# 正确
- 交付目录:第 1 次运行时向用户确认;未指定时默认当前工作目录下的 articles/<系列名>

更隐蔽的是写 ~/Desktop/... 这类看着通用、其实仍然绑定个人习惯的路径。

环境专属工具。 从别的环境照搬技能时,里面可能引用了本机没有的工具。技能一旦调用了不存在的工具,整个流程直接断在第一步。

发布前跑这三条检查,都必须为空:

grep -rn "/Users/\|/home/\|C:\\\\" <技能目录>/
grep -rni "browser use\|<某环境专属工具名>" <技能目录>/
grep -rni "封面\|出图" <写作类技能目录>/     # 跨职责引用

第三条是解耦的验收:写作技能不该出现配图相关的内容(这一点在上一篇展开过)。

三、工具不可用时要写兜底

不要只写"用 X 工具打开某页面",要写清拿不到时怎么办:

- 首选:某某榜单页(网页抓取工具读取榜单文本)
- 补充:其他榜单(多为 JS 渲染,抓不到就只读可见部分)
- 兜底:都抓不到时,改用搜索引擎检索「今日热搜 + 当天日期」,
        按权威报道还原,并在结果里注明用了兜底方式

已知做不通、不要再试:
- 某某 JSON 接口(Forbidden)
- 某某榜单页(返回空)

"已知做不通"清单非常值钱。 把踩过的死路写进去,能省掉下一轮的大量无效尝试——模型不知道哪些路是死的,它只会一遍遍重试。

四、路径相关的替代方案:问一次,别写死

需要外部信息(存哪儿、发给谁)时,两种极端都错:写死会失效,每轮都问会烦人。

好用的句式是三句话成套:

- 第 1 次运行时向用户确认…
- 用户未指定时,默认 X(相对路径)
- 同一会话后续沿用,不反复问

但在无人值守的自动化场景里要反过来:没人回答问题,所以必须把答案一次性写进任务描述。同一条规则,交互式问一次,自动化喂全——这点很容易搞混。

五、定期复查:技能会随时间失效

技能不是写完就一劳永逸的。有三类东西会过期:

外部工具变了。 你依赖的接口可能下线、返回结构可能调整、鉴权方式可能更换。这就是为什么要把"已知做不通"的清单维护下去——每遇到一条新的死路就补进去,能省掉下一轮的大量重试。

环境变了。 本机升级了运行时、换了默认包管理器、项目迁移了目录,都可能让技能里的示例命令失效。建议每隔一段时间在干净环境里跑一遍(上一节提到的两条测试)。

需求变了。 用户开始用新的说法叫它(比如从"配图"变成"出个头图"),description 里的触发词就要补。判断方法很简单:如果最近几次都是你手动点名才用上它,八成是触发词没覆盖到。

复查的节奏不用很重,一个实用做法是:每次技能被手动调用时,顺手问一句"这次它为什么没被自动触发",然后把答案补回 description。

六、触发设计的自检清单

description 同时写了"做什么"和"什么时候用"

description 里列全了口语化触发词

技能内零绝对路径

技能内零环境专属工具

工具不可用时有兜底路径 + "已知做不通"清单

需要外部信息的环节:要么"问一次",要么"自动化时喂全"

跨职责引用已清空
七、结尾

技能被不被调用,跟它写得好不好是两件事。description 是入口,可移植性是寿命——入口没写对,再好的内容也进不了上下文;换台机器就废,再常用的技能也传不出去。

写完技能之后,不妨做两个测试:把 description 单独拿出来,自问"看到这句话,能立刻判断什么时候该用吗";再把整个目录拷到一台干净的机器上跑一遍。这两步过了,技能才算真的能用。

参考文章
■
Anthropic 官方文档《Agent Skills》:description 是触发匹配依据,须说明"做什么 + 何时用"
■
Anthropic Engineering《Equipping agents for the real world with Agent Skills》
■
《learn-agentic-coding》Step 07:项目规则与跨工具复用

#智能体 #AgentSkills #AI工程 #可移植性 #技术实践

本文由 AI 辅助生成并经人工审核发布,内容仅供参考,不构成法律意见。