李锋镝的博客

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

Agent & Skill 编写技巧完全指南

2026年9月1日 约 2,678 字9 分钟 8 0 0
合集:Skills第 4 篇 / 共 4 篇
  1. 1Taste Skill 说明与使用
  2. 2踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发
  3. 3Everything Claude Code 详细使用文档
  4. 4Agent & Skill 编写技巧完全指南当前

一、什么是 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 AI Claude Skill
最后更新:2026年9月1日
相关文章
  • AI时代,个人技术博客的出路在哪里?2026年1月23日
  • WorkBuddy介绍2026年8月12日
  • 工程师专属 AI 自学路线:从入门到实战,避开90%的坑(2025 最新版)2025年11月18日
  • LangChain 1.0 智能体实战:MCP 协议赋能工具标准化调用(从开发到落地)2025年11月13日
  • 踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发2026年4月27日

李锋镝

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

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

文章评论

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

人类一思考,上帝就发笑。

听点儿音乐吧 朋友~
文章目录
最新 热点 随机
最新 热点 随机
Agent & Skill 编写技巧完全指南 宝塔面板NGINX开启http3 快速习得技能的十个方法(关键20小时,快速学会任何技能) 记录一下PHP升级8.5遇到的坑 本来想把主题上传到WordPress官方主题商店的,结果懵逼了…… 英伟达 H100 是啥,到底好在哪?
给主题增加了Now、每日心情、年度回顾、岁月同一天、随机漫步等功能Kratos+ v1.1.16版本更新说明AI时代,个人技术博客的出路在哪里?增加了两套复古皮肤-牛皮纸、千禧网页写了一个订阅每日新闻的WP插件WordPress缓存插件WP Fastest Cache、WP Rocket 、FlyingPress对比
什么是Meta Server? 配置Jackson使用字段而不是getter/setter来序列化和反序列化 PHP版本怎么更新啊…… 了解一下Spring中用了哪些设计模式 封控、封控、再封控,居家、居家、再居家 还不懂Redis?看完这个故事就明白了!
最近评论
blank
李锋镝 发布于 2 天前(08月30日) 一切都要从升级数据库开始说起~折腾上瘾了
blank
Hary 发布于 2 天前(08月30日) 用8.0感觉都很新了,没必要随时更新最新的吧,不过或者就是折腾,遇见问题解决问题
blank
李锋镝 发布于 3 天前(08月29日) 很中肯的建议了~
blank
不凡 发布于 4 天前(08月29日) 当前运行环境无任何问题,能不升级就不要升级,我的网站除了主题,好久没升级了。
blank
李锋镝 发布于 4 天前(08月28日) 那你很幸运了~
标签聚合
Redis MySQL 架构 AI编程 数据库 JAVA MQ SpringBoot AI SQL Spring IDEA JVM 分布式 K8s ElasticSearch WordPress Claude 多线程 日常
友情链接
  • 林羽凡
  • 彬红茶日记
  • 志文工作室
  • 临窗旋墨
  • 知向前端
  • 搬砖日记
  • 韩小韩博客
  • 皮皮社
  • 蜗牛工作室
  • 懋和道人
  • 老张博客
  • sssr7844的博客
  • Honesty
  • Serendipity
  • 若梦博客
  • 哥斯拉
  • Mr.Sun的博客
  • 九仞之行
  • 韩情脉脉
  • 瓦匠个人小站

COPYRIGHT © 2026 lifengdi.com. ALL RIGHTS RESERVED.

正在博友圈履约中

域名年龄

Theme Kratos-plus By Dylan Li

津ICP备2024022503号-3

京公网安备11011502039375号