李锋镝的博客

  • 首页
  • 时间轴
  • 说说
  • 系列文章
  • AI工具集
  • 论坛
  • 左邻右舍
    • 左邻右舍
    • 朋友圈
    • 游客中心
  • 留言
    • 留言
    • 走心评论
  • 关于
    • 关于本站
    • Now
    • 每日心情
    • 网站地图
    • 网站统计
    • 赞助
  • 星球穿梭
  • 🚇开往
白雪成红
惟坚韧者始能遂其志
  1. 首页
  2. AI
  3. 正文

Agent & Skill 编写技巧完全指南

2026年9月1日 约 2,895 字10 分钟 207 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可调用技能
本文摘要

本文介绍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. ✅ 是否在迭代中追求泛化而非过拟合?
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
分享到

Agent & Skill 编写技巧完全指南

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

微信扫一扫分享

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

岁月同一天 10 月 16 日

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

  • 后端
    1 年前 2025年10月16日
    6个高频设计模式深度解析(附完整案例与避坑指南)

    很多Java开发者都有过这样的困惑:明明背过23种设计模式的定义,写代码时却还是习惯性new 对象()、堆多层if-el…

  • 中间件
    1 年前 2025年10月16日
    Redis实例CPU飙高至90%:从根源排查到彻底解决的全攻略

    在高并发业务场景中,Redis作为高性能缓存中间件,其CPU使用率直接影响业务响应速度。当Redis实例CPU飙高至90…

  • 5 年前 2021年10月16日
    试了下壁挂炉供暖

    国庆节刚换了房子,新租的房子是自供暖,之前还没用过,趁着这波寒潮,刚好试下看看能耗咋样。 昨天晚上9点开的,开到今天早上…

  • 6 年前 2020年10月16日
    SpringBoot整合Elasticsearch游标查询(scroll)

    游标查询(scroll)简介 scroll 查询 可以用来对 Elasticsearch 有效地执行大批量的文档查询,而…

  • 其他
    7 年前 2019年10月16日
    【收藏】从面试官角度观察到的程序员技能瓶颈,同时给出突破瓶颈的建议

    我在做技术面试官的时候,面试对象大多数是初级开发和高级开发,偶尔也会面试架构师。我发现,IT人的工资固然和相关技术的使用…

  • 7 年前 2019年10月16日
    【收藏】Java问题排查相关工具工具箱

    问题排查除了最重要的解决思路和逻辑推导能力外,工具也是不可缺少的一部分,一个好用的工具可以事半功倍,甚至在某些情况下会因…

相关文章
  • Springboot接入DeepSeek API2025年2月16日
  • 本地部署 DeepSeek 模型并进行 Spring Boot 整合2025年2月16日
  • DeepSeek本地部署全攻略:从环境搭建到高级应用,打造专属 AI 助手2025年11月7日
  • 零成本玩转 Gemini 3 Pro:普通人的全场景免费使用指南(2025 最新)2025年11月24日
  • LangChain 1.0 智能体实战:MCP 协议赋能工具标准化调用(从开发到落地)2025年11月13日

李锋镝

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

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

文章评论

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

醉后不知天在水,满船清梦压星河。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Markdown 的前世今生 讨论下XXL-JOB GLUE模式的安全问题 心气没了,干什么都不得劲 Kratos-plus v1.1.26版本更新说明 我觉得是时候公布我的导航网站了 代码是 AI 写的,生产事故谁背锅?
给主题增加了游客中心功能心气没了,干什么都不得劲我觉得是时候公布我的导航网站了游本昌去世关于主题加载速度优化的一点儿小演进给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能
Coze 创意实战:AI 让历史人物“开口说话”,一键生成自述视频全流程指南 一线技术人的成长思考总结 多层嵌套map对象转扁平化map Navicat Premium数据库账号密码解密 关于Elasticsearch文档的描述以及如何操作文档的详细总结 来来来,用python画一个冰墩墩儿
最近评论
李锋镝 发布于 49 分钟前(10月16日) 其实语法很好记,而且也有很多markdown的文本编辑器
李锋镝 发布于 50 分钟前(10月16日) Typecho就是太轻量了,导致很多功能都没有
沐阳 发布于 1 小时前(10月16日) 换了Markdown,好多代码都要重新记
不凡 发布于 4 小时前(10月16日) 我搭建临时站点看了下,是有个预览,然后发现是主题对markdown编辑器做了“二开”加了一些自定义按...
不凡 发布于 4 小时前(10月16日) 我开发的插件替代了原生附件管理,在附件管理显示最近上传的文件,点击缩略图就直接插入了,不过插入的仍然...
标签聚合
MySQL 日常 AI JAVA WordPress Spring SQL Claude K8s IDEA 数据库 架构 ElasticSearch SpringBoot 分布式 AI编程 JVM 多线程 Redis Theme
友情链接
  • 彬红茶日记
  • Serendipity
  • 搬砖日记
  • sssr7844的博客
  • 哥斯拉
  • 林羽凡
  • 韩情脉脉
  • lijie blog
  • 懋和道人
  • Honesty
  • 九仞之行
  • 刘永博客
  • 志文工作室
  • 韩小韩博客
  • 皮皮社
  • 老张博客
  • Mr.Sun的博客
  • 知向前端
  • 瓦匠个人小站

COPYRIGHT © 2016-2026 lifengdi.com. ALL RIGHTS RESERVED.

lifengdi.com 十年之约虫洞

Domain age badge for lifengdi.com

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号