李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 每日心情
  • Now
  • 系列文章
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 博友圈
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于我
    • 网站地图
    • 网站统计
    • 另一个网站
    • 我的导航站
    • 赞助
  • 🚇开往
Destiny
自是人生长恨水长东
  1. 首页
  2. AI
  3. 正文

Agent & Skill 编写技巧完全指南

2026年9月1日 约 2,895 字10 分钟 89 0 0
合集:Skills第 4 篇 / 共 5 篇
  1. 1Taste Skill 说明与使用
  2. 2踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发
  3. 3Everything Claude Code 详细使用文档
  4. 4Agent & Skill 编写技巧完全指南当前
  5. 5book-to-skill:GitHub2.7万star开源项目,将书籍蒸馏为Agent可调用技能
AI摘要

本文介绍Claude可复用指令集Skill的编写与优化方法:结构上采用元数据、正文、资源文件三级加载机制,控制各层大小以高效利用上下文;写作核心为解释规则原因而非堆砌强制命令,触发描述需明确“强势”且含排除条件;测试需用贴近真人表达的边界用例,还涵盖迭代流程、Agent编写技巧与常见反面模式。

结构层面——Skill 的三级加载机制(元数据 → 正文 → 资源文件),以及如何控制各层大小让上下文窗口高效使用。

写作层面——最核心的一条是「解释 why,而不是堆 MUST」。LLM 足够聪明,理解原因后能泛化到新场景;全大写命令只会导致机械执行和边界崩溃。

触发层面——Description 是决定 Skill 是否被调用的关键,当前 Claude 倾向于「触发不足」,所以要写得稍微"强势"一点,同时包含明确的排除条件防止误触发。

测试层面——评估 query 要像真人说话(带路径、背景、口语),重点放在边界情况和「近似干扰项」,而非显而易见的正反例。

一、什么是 Skill?

Skill 是一组可复用的指令集,让 Claude 在特定任务场景下表现更好。它本质上是一个文件夹,核心是一个 `SKILL.md` 文件,外加可选的脚本、参考文档和资源文件。

skill-name/
├── SKILL.md          ← 必须:YAML 元数据 + Markdown 指令
├── scripts/          ← 可选:确定性/重复性任务的脚本
├── references/       ← 可选:按需加载的参考文档
└── assets/           ← 可选:模板、图标、字体等资源

二、SKILL.md 的结构

2.1 YAML Frontmatter(必填)

---
name: my-skill
description: "一句话说明做什么 + 什么时候触发。要具体、要'强势'。"
compatibility: "claude.ai, Claude Desktop, Cowork"  # 可选
---

关于 description 的关键原则:

  • 这是触发机制的核心——Claude 根据 description 决定是否启用该 Skill
  • 不仅要说「做什么」,更要说「什么时候用」
  • 倾向于写得"强势"一点,因为 Claude 目前有「触发不足」的倾向
  • 包含正面触发词和反面排除条件

好的 description 示例:

description: >
  Use this skill whenever the user wants to create, read, edit, or
  manipulate Word documents (.docx). Triggers include: any mention of
  'Word doc', '.docx', or requests to produce professional documents.
  Do NOT use for PDFs, spreadsheets, or Google Docs.

2.2 Markdown 正文

正文就是给 Claude 的详细指令,用 Markdown 写。


三、核心编写原则

3.1 解释「为什么」,而不是堆「必须」

这是最重要的一条。今天的 LLM 足够聪明,当你解释清楚原因时,它能举一反三;当你只是堆砌 MUST/NEVER/ALWAYS,它只会机械执行,遇到边界情况就崩。

# ❌ 坏写法
ALWAYS use `python-docx` library. NEVER use any other library.
MUST set font size to 12pt.

# ✅ 好写法
Use python-docx because it's the only library pre-installed in this
environment that handles .docx reliably. Other libraries (like docxtpl)
aren't available and will cause import errors.

Default to 12pt body text — this is the standard for business documents
and ensures readability when printed.

如果你发现自己在写全大写的 ALWAYS/NEVER,这是一个黄色警告——试着换成解释推理的方式。

3.2 用祈使句

指令用祈使句("Read the file first"),而不是描述句("The file should be read first")。祈使句更直接,消耗更少 token。

3.3 追求泛化,而非过拟合

Skill 可能被使用无数次。不要为了修复某个测试用例加入过于狭窄的规则,而是思考背后的通用规律。

# ❌ 过拟合
If the user's CSV has a column named "Revenue_Q3", put it in column C.

# ✅ 泛化
Detect numeric columns automatically and place them after text/ID columns,
preserving the original order within each group.

3.4 保持精简

  • SKILL.md 正文控制在 500 行以内
  • 如果内容更多,拆分到 references/ 子目录,在 SKILL.md 中用指针引导
  • 大型参考文件(>300 行)加目录
  • 移除没有产生实际效果的指令(看测试转录记录来判断)

3.5 「无惊讶原则」

Skill 的行为不应让用户感到意外。如果把 Skill 的内容描述给用户听,他们不应该觉得不对劲。


四、三级加载机制(Progressive Disclosure)

这是 Skill 系统的核心架构思想:

层级内容何时加载大小建议
L1 元数据name + description始终在上下文中~100 词
L2 正文SKILL.md bodySkill 被触发时<500 行
L3 资源scripts/, references/, assets/按需读取无限制

关键点: 脚本可以不被读入上下文就直接执行。所以重型逻辑放脚本里,SKILL.md 只写「何时调用」和「怎么调用」。


五、Description 优化(触发率调优)

5.1 评估集设计

准备 ~20 条评估 query,分为「应该触发」和「不应该触发」两类:

[
  {"query": "帮我把这个 xlsx 加一列利润率,收入在C列成本在D列", "should_trigger": true},
  {"query": "解释一下什么是利润率", "should_trigger": false}
]

评估 query 的要求:

  • 要像真人说话:包含文件路径、个人背景、口语化表达、缩写、错别字
  • 长度混合:有长有短
  • 重点放在边界情况,而非显而易见的场景
  • 不要写太简单的否定例子("写个斐波那契函数"作为 PDF 技能的否定样本没有测试价值)

好的评估 query:

"我老板刚发了个 xlsx 文件(在下载文件夹里,叫什么 'Q4 sales final FINAL v2.xlsx'),她让我加一列利润率百分比。收入在C列成本好像在D列"

差的评估 query:

"Format this data"(太泛)、"Extract text from PDF"(太明显)

5.2 优化循环

通过自动化脚本进行迭代:

1. 把评估集分为 60% 训练 / 40% 测试
2. 评估当前 description 的触发率(每个 query 跑 3 次取均值)
3. 根据失败样本让 Claude 提出改进
4. 在训练集和测试集上重新评估
5. 迭代最多 5 轮
6. 以测试集得分选最优(避免过拟合训练集)


六、测试与迭代流程

6.1 完整循环

明确意图 → 写草稿 → 设计测试用例 → 运行测试 → 评估输出 → 改进 → 重复

6.2 测试用例设计

  • 2~3 条起步,模拟真实用户的真实说法
  • 保存为 evals/evals.json
  • 先只写 prompt,不写断言——在测试运行期间再补
{
  "skill_name": "my-skill",
  "evals": [
    {
      "id": 1,
      "prompt": "用户的真实任务描述",
      "expected_output": "期望结果的描述",
      "files": []
    }
  ]
}

6.3 断言设计

好的断言是:

  • 客观可验证的(不是主观判断)
  • 有描述性名称(看名字就知道测什么)
  • 可编程检查的优先用脚本(比人工判断更快、更可靠、可复用)

主观质量(写作风格、设计美感)更适合人工定性评估,不要强塞断言。

6.4 改进时的思维框架

  1. 从反馈中泛化——不是修单个样本,而是找通用规律
  2. 保持精简——删掉没起作用的指令(看转录记录判断)
  3. 解释为什么——比全大写命令更有效
  4. 提取重复模式——如果每次测试 Agent 都独立写了类似的辅助脚本,说明应该把脚本预置到 scripts/ 里

七、多领域/多框架 Skill 的组织

当一个 Skill 需要支持多个变体(比如多云部署),用引用文件按领域分组:

cloud-deploy/
├── SKILL.md            ← 工作流 + 选择逻辑
└── references/
    ├── aws.md
    ├── gcp.md
    └── azure.md

Claude 只读取相关的参考文件,节省上下文窗口。


八、Agent 编写技巧

Agent 是 Skill 的高阶应用场景——它不仅是指令集,还涉及多步编排、工具调用、状态管理。

8.1 给 Agent 明确的角色定位

在 SKILL.md 开头就建立角色框架:

Approach this as the design lead at a design studio known for
giving every client a distinct visual identity.

这不是角色扮演,而是调整 Claude 的决策框架和审美标准。

8.2 定义清晰的工作流程

用分阶段的结构组织复杂任务:

## Gather(收集信息)
检查可用连接,分类工具角色:日历 · 邮件 · 聊天 · 其他

## Sort(分类处理)
每条候选项归入「需要关注」或「已解决」,或静默丢弃

## Write(生成输出)
按模板生成 HTML 页面...

8.3 处理缺失和异常

好的 Agent Skill 会预设降级策略:

A missing role is skipped; the page adapts.
(缺失的角色被跳过,页面自动适配。)

而不是在缺少某个工具时报错停止。

8.4 上下文管理

  • Agent 在每次调用之间没有记忆——所有相关状态必须在每次请求中完整传递
  • 对于需要多轮交互的任务,设计好状态序列化方案
  • 利用文件系统做持久化(工作目录 → 迭代目录结构)

8.5 搭配 MCP 工具

Agent 可以通过 MCP (Model Context Protocol) 连接外部服务。设计 Skill 时:

  • 检查可用的 MCP 连接
  • 对缺失的连接提供建议(connector suggestion cards)
  • 在无法提供建议时,优雅降级

九、写作风格的反面模式(Anti-patterns)

反面模式为什么不好替代方案
堆砌 MUST/NEVER/ALWAYS机械执行,边界崩溃解释原因,让模型理解
过度具体的硬编码规则只对特定案例有效泛化为通用策略
超长 SKILL.md (>500行)上下文膨胀,重点淹没拆分到 references/
Description 写得太保守Skill 不被触发写得"强势"一点,覆盖更多触发词
没有排除条件误触发其他领域的请求明确写"Do NOT use for..."
没解释 why,只写 what模型无法应对新场景解释每条规则背后的原因
评估 query 太简单/太明显无法检测真实性能用边界情况和近似干扰项

十、一个完整 Skill 的最小示例

---
name: commit-message
description: >
  Generate conventional commit messages from diffs or descriptions.
  Use whenever the user asks to write, format, or improve a commit
  message, or pastes a git diff and asks what to write. Do NOT use
  for general git help or branch management.
---

# Commit Message Generator

Write commit messages following the Conventional Commits spec because
most CI/CD tools and changelog generators depend on this format.

## Format

`<type>(<scope>): <subject>`

Types: feat, fix, docs, style, refactor, test, chore
Scope: the module or area affected (optional but encouraged)
Subject: imperative mood, no period, under 72 chars

## How to decide the type

Look at what changed, not how it was described:
- New behavior users can observe → feat
- Broken behavior now fixed → fix
- Only .md or comment changes → docs
- Formatting/whitespace only → style

## Examples

**Example 1:**
Input: Added user authentication with JWT tokens
Output: feat(auth): implement JWT-based authentication

**Example 2:**
Input: Fixed the bug where login page crashes on Safari
Output: fix(auth): resolve Safari crash on login page

总结:核心检查清单

在发布 Skill 之前,过一遍:

  1. ✅ Description 是否足够具体且"强势",包含触发条件和排除条件?
  2. ✅ 正文是否解释了「为什么」而非只有「做什么」?
  3. ✅ 是否控制在 500 行以内,大内容是否拆到了 references/?
  4. ✅ 是否有 2~3 个真实场景的测试用例?
  5. ✅ 重复出现的辅助代码是否已提取到 scripts/?
  6. ✅ 是否处理了缺失工具/输入异常的降级场景?
  7. ✅ 评估 query 是否包含边界情况和近似干扰项?
  8. ✅ 是否在迭代中追求泛化而非过拟合?
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/ren-gong-zhi-neng/4958

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Agent & Skill 编写技巧完全指南

也可使用浏览器菜单中的「分享」功能

微信扫一扫分享

标签: Agent AI Claude Skill
最后更新:2026年9月2日

岁月同一天 9 月 12 日

回望过去的今天,你在写什么

  • 7 年前 2019年9月12日
    SpringBoot使用注解的方式构建Elasticsearch查询语句,实现多条件的复杂查询

    背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能。这样不仅开发…

  • 7 年前 2019年9月12日
    MySQL数据库查看执行计划以及名词解释

    MySQL 使用 explain + sql 语句查看 执行计划,该执行计划不一定完全正确但是可以参考。 EXPLAIN…

相关文章
  • Claude-HUD 使用文档2026年6月12日
  • 企业级 RAG 系统进阶实战:基于 Qwen Agent 构建 GB 级智能知识库(从架构到落地)2025年11月20日
  • 手把手教你在 KubeSphere 上构建自托管 AI 助手:基于 Open WebUI 实现企业级私有智能平台2025年10月27日
  • WorkBuddy介绍2026年8月12日
  • 本地部署 DeepSeek 模型并进行 Spring Boot 整合2025年2月16日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 合集上一篇
合集下一篇 >
1234567891112131415161718192021222324252627282930313233343536373839404142434446474849505152535455575859606162636465666769727476777879808182858687909293949596979899
取消回复

文章评论

还没有评论,快来抢沙发吧~

曾伴浮云归晚翠,犹陪落日泛秋声。
世间无限丹青手,一片伤心画不成。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
市场主流AI编程大模型横向深度分析(2026-09-11) 一款节省token的利器:RTK(Rust Token Killer) RAG太难学?LLM Wiki了解一下 推荐一个SVG 矢量小图标免费下载网站 关于使用AI的一些思考 book-to-skill:GitHub2.7万star开源项目,将书籍蒸馏为Agent可调用技能
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?关于使用AI的一些思考增加了两套复古皮肤-牛皮纸、千禧网页
WordPress网站换了个字体,差点儿把样式换崩了 妹妹的画【2019.09.26】 网站升级到http/2 IntelliJ IDEA 2020.3.x永久白嫖(Windows/Mac) 什么是Helm? 为什么同样是分布式架构的Kafka需要Leader而Redis不需要?
最近评论
blank
李锋镝 发布于 6 小时前(09月11日) 哈哈哈~
blank
李锋镝 发布于 6 小时前(09月11日) DS算是AI里面的良心价了
blank
paddy 发布于 7 小时前(09月11日) UI有梁神模式那味了
blank
Huo 发布于 7 小时前(09月11日) 菜鸟使用 Deepseek,前段时间涨价明显感觉有点贵了,还好现在降了
blank
李锋镝 发布于 16 小时前(09月11日) 这个也是个神仙网站~
标签聚合
分布式 JVM AI 数据库 AI编程 MySQL ElasticSearch WordPress SpringBoot Spring JAVA 日常 Redis IDEA Claude SQL 架构 MQ 多线程 K8s
友情链接
  • 知向前端
  • 彬红茶日记
  • 皮皮社
  • 瓦匠个人小站
  • 临窗旋墨
  • Serendipity
  • 蜗牛工作室
  • 志文工作室
  • 韩小韩博客
  • 老张博客
  • 搬砖日记
  • 懋和道人
  • 九仞之行
  • Mr.Sun的博客
  • 哥斯拉
  • Honesty
  • 韩情脉脉
  • 若梦博客
  • sssr7844的博客
  • 林羽凡

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号