很多人已经开始被这个问题卡住了。
AI越来越强,但你让它做点具体的事——发一封邮件、整理一份周报、分析一组数据——它要么答非所问,要么步骤混乱,要么每次都要重新解释一遍。
你换个问法,它换个答法。结果不可控、流程不可复现、经验不可积累。
本质问题是:你在用“对话”驱动AI,而不是用“流程”驱动AI。
2025年10月,Anthropic发布了Agent Skills协议。两个月后,Agent Skills作为开放标准被发布,OpenAI、GitHub、VS Code、Cursor均已跟进。全栈测开岗位需求暴涨340%,懂AI的测试工程师比不懂的薪资高出30%到50%。
Skill正在成为2026年AI工程化最核心的抓手。
这篇文章,从零开始搓一个能用的Agent Skill。不讲概念堆砌,只讲动手路径。
目录
一、Skill是什么:给Agent的工作交接SOP
二、为什么需要Skill:从“对话”到“流程”
三、核心机制拆解:三层渐进式加载
四、手把手实战:从零搓一个邮件发送Skill
五、工程落地启示:Skill能帮你解决什么问题
六、一个值得你认真回答的问题
一、Skill是什么:给Agent的工作交接SOP
先说清楚概念。
Skill本质上是一个文件夹:
skill-name/
├── SKILL.md # 核心指令文件(必须)
├── reference.md # 详细参考资料(可选)
├── scripts/ # 可执行脚本(可选)
│ └── main.py
└── resources/ # 额外资源文件(可选)
SKILL.md是核心。它包含YAML格式的元数据(名称和描述)和Markdown格式的详细指令。
用更通俗的话说:Skill就像给Agent准备的工作交接SOP大礼包。你把自己的工作流程、判断标准、注意事项、可复用脚本——全部打包成一个文件夹。Agent遇到相关任务时,自动加载这个“说明书”,按你的方式执行。
核心在于:Skill把“隐性经验”变成了“显性资产”。 你不再需要每次重复解释“怎么做”,Agent自己会读。
MCP(模型上下文协议)解决的是“Agent怎么调用外部工具”的问题。Skill解决的是“Agent怎么按你的流程做事”的问题。MCP管“手”,Skill管“脑子里的流程”。
二、为什么需要Skill:从“对话”到“流程”
不用Skill的时候,你让AI发一封邮件:
“帮我写一封邮件,主题是项目进度同步,收件人是张三,内容说项目延期了……”
AI生成内容。你复制粘贴。打开邮箱。发送。
下次同样的任务,重新来一遍。换个问法,AI给你换个写法。
本质是:每次都在从零启动,每次都在消耗认知资源。
用Skill之后:你输入“发项目进度邮件给张三”。Agent自动加载邮件Skill,按你预设的模板生成内容、调用邮件API、发送。一次封装,永久复用。
Skill解决的核心问题有三个:
流程标准化。 同样的任务,每次执行方式一致。不会因为提问方式不同而产生不同结果。
知识可复用。 你的经验被封装成Skill后,团队所有人都能用。不用再口口相传“这个事儿应该怎么做”。
上下文优化。 Skill采用渐进式加载,不相关的技能不占上下文。你装100个Skill,Agent只加载当前任务需要的那个。
可截图传播的观点:Prompt是“对话”,Skill是“流程”。对话不可控,流程可复现。
三、核心机制拆解:三层渐进式加载
这是Agent Skills最精妙的设计。不理解这个,就不理解Skill为什么能装海量信息却不怕撑爆上下文。
第一层:元数据(Metadata)
每个SKILL.md文件开头的YAML部分,只有name和description。Agent启动时预加载所有已安装技能的元数据到系统提示中。不占多少token,但让Agent知道“我有这些技能可用”。
第二层:技能主体(SKILL.md内容)
Agent判断某个技能与当前任务相关时,才完整加载该技能的SKILL.md内容。包含详细指令、注意事项、示例。这时候才消耗上下文。
第三层:附加文件和脚本
更复杂的情况——需要运行Python脚本、读取参考文档——Agent按需加载或执行。SKILL.md通过Markdown链接引用这些文件,只有需要时才加载。

这套机制让Skill可以包含海量信息却不怕超出上下文窗口限制。无关任务时不占上下文,相关任务时逐步加载。传统方式是一次性把所有指令塞进Prompt,Skill是把指令做成“可检索的知识库”。
四、手把手实战:从零搓一个邮件发送Skill
理论够了。动手。
目标: 创建一个邮件发送Skill。用户说“发邮件给XX,内容是XXX”,Agent自动生成邮件、调用API发送。
Step 1:创建Skill目录
Agent Skills是开放标准,在不同平台放不同位置:
Claude Code:.claude/skills/
Cursor/Codex:.agents/skills/
GitHub Copilot:.github/skills/
这里以Cursor为例,在项目根目录创建:
mkdir -p .agents/skills/send-email
cd .agents/skills/send-email
Step 2:编写SKILL.md
创建SKILL.md文件:
name:send-email
description:SendemailsviaSMTPorGmailAPI.Usewhenuseraskstosendanemail,notifysomeone,orshareamessageviaemail.
version:1.0.0
Send Email Skill
触发条件
当用户请求发送邮件时触发,包括但不限于:
-"发邮件给[收件人]"
-"通知[某人]关于[某事]"
-"发送项目进度邮件"
执行流程
步骤1:提取邮件信息
从用户输入中提取:
-收件人(to):必填,邮箱地址
-主题(subject):可选,默认"来自AI助手的邮件"
-正文(body):必填,邮件内容
-抄送(cc):可选
步骤2:生成邮件内容
如果正文不完整,按以下模板补全:
-开头:问候语("您好"或"Hi")
-主体:用户提供的核心内容
-结尾:签名("此致\nAI助手")
步骤3:发送邮件
调用scripts/send.py脚本发送邮件。
-脚本路径:scripts/send.py
-参数格式:JSON{"to":"...","subject":"...","body":"..."}
注意事项
-邮件正文不超过1000字,超出则提示用户精简
-发送成功后返回邮件ID和发送时间
-发送失败则返回具体错误信息,不重试
示例
用户:"发邮件给zhangsan@example.com,说项目进度延期了"
→提取收件人、生成正文、调用脚本发送
→返回:"邮件已发送至zhangsan@example.com,邮件ID:xxx"
Step 3:编写发送脚本
创建scripts/send.py:
!/usr/bin/env python3
"""
邮件发送脚本 - 被Agent Skill调用
"""
import smtplib
import json
import sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email(to, subject, body):
"""
通过SMTP发送邮件
"""
# 配置(实际使用时从环境变量读取)
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587
SENDER_EMAIL = "your-email@gmail.com"
SENDER_PASSWORD = "your-app-password"
try:
msg = MIMEMultipart()
msg["From"] = SENDER_EMAIL
msg["To"] = to
msg["Subject"] = subject
msg.attach(MIMEText(body, "plain"))
server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
server.starttls()
server.login(SENDER_EMAIL, SENDER_PASSWORD)
server.send_message(msg)
server.quit()
return {"success": True, "message": f"邮件已发送至 {to}"}
except Exception as e:
return {"success": False, "error": str(e)}
if name == "main":
# 从命令行参数读取JSON
if len(sys.argv) < 2:
print(json.dumps({"error": "缺少参数"}))
sys.exit(1)
try:
params = json.loads(sys.argv[1])
result = send_email(
to=params.get("to"),
subject=params.get("subject", "来自AI助手的邮件"),
body=params.get("body")
)
print(json.dumps(result))
except Exception as e:
print(json.dumps({"error": str(e)}))
Step 4:测试Skill
在Cursor中打开Agent模式,输入:
“发邮件给test@example.com,测试一下我的邮件Skill”
Agent应该自动:
识别任务匹配send-email技能
加载SKILL.md获取执行流程
提取收件人和正文
调用scripts/send.py发送邮件
返回发送结果
如果没触发,检查两件事:
SKILL.md的description是否准确描述了触发场景
Skill目录是否放在正确位置(.agents/skills/)
Step 5:进阶——让Skill自我进化
Skill-Creator是一个“元Skill”,专门帮用户创建和优化Skill。在Agent中运行/skill-creator,它会引导你完成整个创建流程——起脚手架、写描述、组织脚本、打包。
更高级的是skill-creator-improvement技能。当Agent发现可复用的经验、修正过的命令模式、更快的操作路径时,它会直接更新Skill的## Gotchas章节。Skill会自我进化。
五、Skill能帮你解决什么问题
对测试工程师:把测试用例封装成Skill
你现在写100个测试用例,每次手工执行。换成Skill——把等价类划分、边界值分析、场景法这些测试设计方法封装成Skill。Agent接收需求文档,自动生成测试用例。从“小时级手撸”到“分钟级闭环”。
对开发工程师:把代码规范封装成Skill
团队有代码规范文档30页。新成员记不住,老成员也会忘。封装成Skill——Agent生成代码时自动加载规范,生成符合团队标准的代码。不用Review时一遍遍纠正。
对产品/运营:把重复工作流封装成Skill
每周发周报、每月写总结、每次上线发公告——全部封装成Skill。输入关键数据,Agent按你的格式输出完整文档。
Skill的本质是把“人的经验”变成“AI的肌肉记忆”。
六、一个值得你认真回答的问题
回到文章开头的场景。
你每天让AI帮你做的事情——写邮件、整理文档、生成用例、分析数据——如果全部封装成Skill,你的工作效率能提升多少?
但问题不是“怎么封装”,而是另一件事:
你现在的日常工作流程,能被清晰地写成一份“别人照着做就能完成”的SOP文档吗?
如果写不出来,那AI也学不会。Skill只是工具,真正稀缺的是“把隐性经验显性化”的能力。
评论区聊聊——你第一个想封装的Skill是什么?