写好 Agent Skills 的八条经验:描述即触发器,指令要短,负向用例不能省

林知秋AI 前沿2026-09-18302 阅读💛 18 收藏

Skills 已经成为智能体最常用的扩展点之一。它们灵活、容易做、分发也简单。

但正是这种灵活,让人很难判断什么是好的、什么真正有效。什么样的技能值得做?写好一个技能的秘诀是什么?什么时候才应该分享给别人?

作者大量使用 Skills,多个技能处于日常活跃状态。以下是他总结的八条经验。

一、先搞清 Skill 是什么

一个 Skill 就是一个文件夹,里面有 SKILL.md 文件和可选的辅助文件:

my-skill/
├── SKILL.md 唯一必需的文件
├── scripts/ 智能体可执行的复用代码
├── references/ 智能体按需阅读的文档
└── assets/ 模板、图片等输出用素材

Skill 由三层构成:

  • name 和 description 元信息:进入每一次提示词,告诉智能体何时启用这个技能;
  • SKILL.md 正文:元信息下方的 Markdown 指令,告诉智能体怎么做这件事;
  • 资产(可选):scripts/references/assets/ 三个文件夹。

技能永远分两类。

能力型技能(capability skills)帮智能体做好基础模型本来做不稳定的事,比如 PDF 表单填写;随着模型进步这类技能可能变得多余,评测会告诉你时机。

偏好型技能(preference skills)固化你的特定工作流,比如团队的代码审查步骤;这类技能更持久,但必须与实际流程保持同步。

二、把 description 写成精确触发器

SKILL.md 里的 description 就是触发机制。写模糊了,智能体不知道何时启用;写太宽泛,每次请求都会误触发。要同时写清”做什么”和”什么时候用”。技能正文只在触发之后才加载。

❌ 太模糊:“帮助处理文档”

✅ 具体可执行:“创建、编辑和分析 .docx 文件,用于修订追踪、批注、格式化或文本提取时使用”;“写调用 Gemini API 做文本生成、多轮对话、图像生成或流式输出的代码时使用”

作者见过只靠改进 description 就带来 50% 性能提升的案例。

三、写指令,不写论文

智能体足够聪明,你的职责是告诉它它还不知道的东西。研究表明,更长、更全面的技能反而伤害性能。

  • 用祈使句:“总是使用 interactions.create()“,而不是”The Interactions API 是推荐方案”。前者是指令,后者是智能体不会执行的知识。

  • 例子先行:一段五行代码胜过五段解释。

  • 解释原因:规则重要时说明为什么。“使用模型 X,模型 Y 已弃用会报错”帮智能体举一反三,而不是死记测试用例。

  • 别过拟合:避免只在你那三条测试提示词上生效的”精调”。要写能在上百万次调用中都正常工作的技能。

四、保持精简

别把所有东西塞进一个文件。智能体按层加载信息:

  • 始终加载SKILL.md 的元信息,即 name + description
  • 触发时加载SKILL.md 正文(控制在 500 行以内);
  • 按需加载:参考文件、脚本、资产。

如果技能覆盖多个主题(比如 AWS 和 GCP 部署),拆成独立的参考文件,智能体只读需要的那份,省下的上下文留给实际任务。

技巧:参考文件超过 500 行时,在文件头加一个带”行号提示”的目录,让智能体快速定位。这个做法在长参考文档里能显著减少无效读取。

五、给正确的自由度

写技能最常见的错误,是把它变成一步步的工作流:“第一步读文件,第二步解析 JSON,第三步提取字段……”当你规定每个步骤,就剥夺了智能体适应变化、从错误中恢复、寻找更优路径的能力。描述你要什么,而不是怎么到达。

告诉智能体要达成什么:

  • ❌ “第一步:读配置文件。第二步:找到数据库 URL。第三步:改端口号。第四步:写回文件。”
  • ✅ “把配置文件里的数据库端口改为用户指定的值。”

给约束,不给流程:

  • ❌ “第一步:建分支。第二步:改代码。第三步:跑测试。第四步:开 PR。”
  • ✅ “开 PR 之前必须跑测试。永远不要直接 push 到 main。”

如果步骤顺序真的生死攸关:那说明该写脚本。第 3 步必须在第 2 步之前否则全崩,这不是技能的问题,是脚本的问题。

六、别跳过负向用例

想清楚技能什么时候不该触发。描述写成”任何编程任务都用我”,会劫持每一个请求。

“处理 PDF 文件时使用。不要用于普通文档编辑、表格或纯文本文件。”

“应该触发”和”不该触发”两类用例都要测。不测负向用例,你的优化就只朝一个方向偏。

七、发布前先测试

不做评测就不发布技能。每次运行表现都可能不同,单次检查不够:

  • 手动跑几次:用不同提示词,观察哪里出错。它是否假设依赖已存在?是否跳步骤?

  • 把”成功”写可测量:输出能编译吗?用对 API 了吗?遵循步骤了吗?给结果打分,不给路径打分。

  • 准备 10–20 条测试提示词:混合该处理的、该忽略的和刁钻的边界用例,每条都有独立成功标准。

  • 多轮试验:智能体输出不确定。每条提示词跑 3–5 次,看分布而不是单次成败。

  • 隔离每次运行:每条用干净环境测试,运行间的上下文泄漏会掩盖真实失败。

  • 先修 description:大多数问题出在触发器,不在指令。

八、知道何时退役技能

跑一遍不带技能的评测。如果通过了,说明模型已经内化了技能的价值,技能不再必要,退役它。能力型技能尤其如此——模型在进步,差距在缩小。

怎么把这八条用起来

具体操作路径:先对照第一、二条审计你现有的每个 SKILL.md——description 是否同时写清”做什么”与”何时用”、有没有写负向排除项;再按第四条检查正文行数与分层结构,把超过 500 行的参考文件拆分并加行号目录;然后按第七条给技能建一个 10–20 条提示词的测试集,正负用例各半、每条跑 3–5 次记录通过率分布。改动之后重跑测试集对比前后数据,触发准确率与任务通过率的差值就是你的优化空间。最后每季度跑一次”无技能”对照评测,通过的技能及时退役,保持技能库精简。

原文信息

作者:Philipp Schmid(@_philschmid),AI 工程师

原文地址:

文章评论(5

星寻梦58 分钟前

不错不错,已加入书签。

回复
暮拾贝34 分钟前

这个比较实用,已转发给同事。

回复
空向阳27 分钟前

讲解得很细致,新手也能看懂。

回复
星寻梦20 分钟前

思路清晰,干货满满。

回复
风倚栏47 分钟前

赞同,实践出真知。

回复