最近GitHub上带skills标签的仓库肉眼可见地多了起来,"skills"这个词从原本模糊的"技能"含义,迅速收敛成了一个具体的技术概念:给AI agent打包好的工作技能。Claude、Codex这些主流产品都把它做成了官方能力,社区里也冒出了大量可以直接下载的skills库,从前端开发规范、论文润色、数据分析到分镜脚本生成,什么方向都有。
这篇内容我想从实操角度把skills聊透:它到底是什么,和function calling有什么区别,怎么写一个自己的skill,安装调试会踩哪些坑,以及怎么在项目里安全地用起来。不管你是想给AI配个"岗位说明书"的产品经理,还是想把重复劳动交给agent的前端、数据分析师,看完应该都能直接上手。
1. skills是什么,为什么突然成了Agent圈的焦点
你可以把skill理解成"打包好的职业技能说明书+工具箱":一份Markdown文档说明操作流程和规范,一两个脚本或资源文件负责具体执行。AI agent接到相关任务时,自己会去翻这份说明书,按里面写的规则来干活。这和每次都在提示词里反复交代完全不同,相当于给AI配了一整套企业SOP和工具库。
我前阵子带了个实习生,做事认真但是每回都得把规则重新讲一遍:先做格式检查,再统一编码,最后按模板输出。skills解决的正是这个场景——你把规则写一遍,AI以后每次都按这套规则执行。而且它不依赖某个特定模型,Claude能用、Codex能用,很多本地部署的agent框架也在兼容这一套规范,可复用性比想象中强很多。
1.1 一个能自己"翻说明书"的AI助手
生活化的类比是这样的:以前用AI就像招了个聪明但没经验的新人,你每次都得从头交代"先做A,再过滤B,按C的格式输出",稍微漏一句结果就跑偏。有了skills,相当于给这个新人配了一整套企业SOP和工具库。它接到"处理这批数据"的任务时,会自己去翻《数据处理SOP》,看到"先做格式检查,再做去重,最后生成摘要",然后照着执行。
这个"自己翻说明书"的机制是关键。skill目录通过文件系统暴露给agent,agent可以浏览、打开、分析目录里的文件。它看到技能描述、步骤说明、示例输出,甚至能运行你提供的脚本。这意味着它不只是在"记住"你的要求,而是真正在"学习"一套工作方法。
我第一次跑通自家skill的时候,特意把提示词写得很模糊:只说了"把项目里的CSV按规矩处理一下"。AI自己找到了数据处理skill,按SKILL.md里的流程走了一遍,最后还主动跑了我放在scripts目录里的校验脚本,发现两个文件编码有问题,直接标注出来问我要不要自动修复。那一刻我是真觉得,这已经不是"聊天机器人"了,这是一个有工作习惯的同事。
1.2 skills和function calling到底差在哪
很多人会问:function calling不是早就能让AI调用工具了吗?有必要再搞一套skills吗?这两个东西看着像,定位其实完全不同。
function calling偏"精确调用":你预先定义好函数签名、参数类型,AI根据用户问题决定调用哪个函数,传什么参数,拿返回结果。它适合对接API这种稳定边界,比如查天气、下单、发邮件,参数是结构化的,返回格式也是固定的。
skills偏"过程学习":它不一定有明确的函数签名,也不用你预设所有调用参数。AI读的是自然语言写的操作文档,自己判断什么时候启动、按什么步骤执行、是否需要运行辅助脚本。它更适合流程复杂、规则多变、需要综合判断的活儿。
我自己的体感对比大概是这样:
| 维度 | Function Calling | Skills |
|---|---|---|
| 触发方式 | 明确函数调用 | 阅读文档后自行决策 |
| 核心载体 | JSON Schema / 参数定义 | Markdown + 脚本 |
| 适合场景 | 稳定API对接 | 流程、规范、方法论 |
| 扩展成本 | 每个接口都要写定义 | 每份技能写一份文档 |
| 可解释性 | 调用日志清晰 | 需要看agent上下文 |
| 组合能力 | 靠外部编排 | 可直接多skill组合 |
所以我的建议是:有稳定后端接口先上function calling,涉及流程规范、批量处理、内容生产,优先考虑skills。两者不是替代关系,更像互补:function calling负责"触达外部世界",skills负责"教agent怎么做人做事"。
1.3 一套skill的典型目录长什么样
Anthropic早期公开的Agent Skills标准给了个很清爽的目录结构,也是目前社区里最主流的组织方式。我自己的项目里通常是这样的:
my-skills/ ├── csv-cleaner/ │ ├── SKILL.md │ ├── scripts/ │ │ └── clean_csv.py │ └── references/ │ └──>--- name: csv-cleaner description: 用于CSV数据的清洗与标准化。适合处理空值填充、去重、编码转换、列名规范化、数据类型修正等场景。当用户提供数据文件并希望整理成统一格式时使用。 ---name要简短且唯一,description要写得像搜索引擎的索引词。别小看这段描述,agent就是靠它来判断"当前任务和哪个skill匹配"。我一开始写得太笼统,写了个"处理数据",结果AI遇到所有数据类任务都找到它,经常进错门。后来改成具体场景加输出边界的描述,命中准确率高了很多。
正文部分我建议分这几块:前置条件、操作步骤、输出规范、示例。其中"输出规范"一定不能省,它决定了AI交付的成品长什么样。比如CSV清洗skill里我明确要求:最终输出必须保留原始表头映射、注明处理过的行数和类型、附一份处理摘要。有了这些硬约束,AI就不会随手丢给你一个"感觉差不多"的结果。
2.3 一个真实案例:数据清洗skill从写到跑通
下面是我实际用着的csv-cleaner的SKILL.md简化版,重点看结构和规范描述:
--- name: csv-cleaner description: 清洗CSV数据文件,处理空值、去重、列名规范化、编码与类型修正。适用于数据预处理与质量检查场景。 --- # CSV 数据清洗流程 ## 1. 前置检查 - 确认文件格式为 .csv - 读取前5行,判断分隔符和编码 ## 2. 清洗步骤 1. 列名统一:转为小写下划线命名 2. 空值处理:数值列填充0或中位数,文本列填充"N/A" 3. 去重:基于主键列删除完全重复行 4. 类型检查:日期列统一为 YYYY-MM-DD,数值列去除千分位符号 ## 3. 输出规范 - 输出文件为 cleaned_文件名.csv - 单独提供清洗摘要:原始行数、清洗后行数、处理规则 - 异常数据放入 warnings 字段备注,不直接删除 ## 4. 辅助脚本 清洗逻辑参考 scripts/clean_csv.py,当输入文件行数大于1000行时建议运行该脚本。配套的clean_csv.py也不用写得很复杂,核心就是用pandas做了一套规整化处理:
import pandas as pd import argparse def clean(file_path): df = pd.read_csv(file_path) original_count = len(df) df.columns = [c.strip().lower().replace(" ", "_") for c in df.columns] df = df.drop_duplicates() df = df.fillna({"数值列": 0, "文本列": "N/A"}) summary = { "原始行数": original_count, "清洗后行数": len(df), } return df, summary if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("input") parser.add_argument("output") args = parser.parse_args() df, summary = clean(args.input) df.to_csv(args.output, index=False) print(summary)这套东西写完后放到skills目录里,我在测试时故意给了个一万多行的脏数据文件,agent读完SKILL.md后自动跑了脚本,返回了干净文件和摘要。从那之后每次收到新数据我都是同一句话:"用csv-cleaner处理一下",三秒进入标准流程。
3. 安装、调试与实战排坑
写完skill只是第一步,真正的问题都出在安装和调试阶段。这部分我踩过的坑比写skill本身多得多,一个个说来。
3.1 不同平台的安装路径与加载机制
主流的agent产品现在都支持skills目录。Claude桌面版和Codex的官方文档里都有说明:在配置目录下建一个skills文件夹,把每个skill作为独立子目录放进去,重启客户端就会自动加载。还有一批第三方或私有化封装工具,把skills做进了图形界面里,本质上也是把这套目录结构挂到指定位置,界面操作只是帮你省了手动复制这一步。
安装时我强烈建议先看本地目录结构再动手。以Claude桌面版的配置目录为例:
mkdir -p ~/.claude/skills cp -r csv-cleaner ~/.claude/skills/ # 重启客户端后执行 related tasks 验证加载Codex的skills目录路径略有不同,但结构一致。如果是通过官方市场或插件市场安装,通常点几下就完事。这里有个很实用的经验:安装完第一件事不是急着跑正式任务,而是先问一句"你现在加载了哪些skills,分别是什么用途",让agent自己报一遍。它说不出来,说明没加载成功;它说得出来,再看描述是否准确。这一步能省下后面大量排查时间。
3.2 我在调试里踩过的四个坑
第一个坑:description写得太宽泛,导致skill被误触发。我最早给一个周报生成skill写的描述是"帮助生成周报",结果AI碰到写月报、写项目总结、写日报的任务都强行调它,输出各种"牛头不对马嘴"。后来把描述改成"根据项目进度数据生成周报,适用于周报场景,不支持月报/日报/总结类任务",误触发率骤降。
第二个坑:SKILL.md里提到了脚本,但没告诉agent什么时候运行。AI读完说明后一直尝试"手动"处理,不用脚本,速度慢还容易出错。后来我在流程里显式加了一句"超过1000行数据时必须运行scripts/clean_csv.py",它才按路径去执行。其实不是AI笨,是我没把决策条件写清楚。
第三个坑:references引用文件路径写错。Markdown里的相对路径看着没问题,但agent在处理时可能把当前目录理解成工作区目录,而不是skill目录。解决办法是绝对路径或明确的相对路径标注,并且在文档里写上"如不确定路径,请先查看当前目录结构"。
第四个坑:输出格式没有硬约束。第一次测试时AI给了我一份格式完全自由的"清洗结果",字段对不上,摘要也没有。后来我在SKILL.md里加了"必须输出承接报告,包含原始行数、清洗后行数、处理规则"这行字,才真正稳定下来。对AI来说,"应该怎么做"和"必须怎么做"差距很大,只有后者才叫规范。
3.3 常见问题速查表
| 现象 | 排查方向 | 处理方式 |
|---|---|---|
| agent完全找不到skill | 检查目录位置和文件名 | 确保目录在配置路径下,SKILL.md命名无误 |
| 找到skill但没执行 | description不匹配或过于笼统 | 重写description,标注具体触发场景 |
| 执行步骤但忽略脚本 | SKILL.md未写运行条件 | 添加"何时运行脚本"的明确指令 |
| 输出不符合预期 | 缺少输出规范 | 在SKILL.md加入输出结构、格式、摘要要求 |
| 脚本报权限错误 | 脚本没有执行权限或依赖缺失 | 本地先手动跑一遍,确认依赖和权限 |
| 一个skill误伤其他任务 | description范围太宽 | 加入边界说明,如"不适用于XX场景" |
这里额外提一个通用心得:所有问题都能通过"让AI先说思路"来加速定位。调试时不直接说"你错了"或"这样不行",而是问"你打算怎么处理这个任务?你觉得SKILL.md里哪一步不清楚?"它会把理解和判断路径讲出来,问题出在哪个环节一目了然。这比反复试错高效得多。
4. skills生态、组合玩法与安全边界
skills真正让我兴奋的地方在于生态。官方市场里有大量高质量技能,社区仓库也涌现出很多"偏门但好用"的封装,大家已经把它当成了新的分发单元。
4.1 官方市场与社区公开库怎么选
现在找skills的地方主要集中在几类:第一类是官方市场或示例库,质量稳定、文档齐全,推荐先从这里起步。第二类是GitHub等代码托管平台上的开源仓库,数量大、种类多,从论文写作辅助到分镜脚本生成都能找到。第三类是各类技术社区里个人博主分享的打包下载,胜在新颖,但质量参差不齐。
GitHub上还有个容易混淆的项目叫GitHub Skills,那是官方出品的交互式课程,帮新手学GitHub操作,跟AI agent skills不是一回事。找的时候注意区分,别下载错了东西。
我的选择顺序是:官方市场优先-看社区star和issue-下来后自己审一遍目录内容。community模块尤其要小心,因为skills的本质是提示词加脚本,任何脚本都有执行能力。下载下来先别急着装,打开SKILL.md通读一遍,scripts目录下的代码逐行看一遍,确认没有可疑命令再放进配置目录。我在试过几个第三方skill后,基本养成了"下载=审查"的条件反射。
4.2 知识型skill与操作型skill的区别
用久了你会发现skills可以分成两大类。
知识型skill只提供文档和规范,不需要脚本。比如团队代码规范、内容风格指南、PRD模板。它的作用是教AI"知道该怎么做",适用于稳定但灵活的流程。我做过的code-review skill就属于这一类:只放团队约定、检查清单、常见问题案例,AI按清单逐项审查,不依赖任何外部程序。
操作型skill则必须搭配脚本或命令,比如数据清洗、批量改文件、调用内部API。这种skill的价值是"知道+做到":AI读流程,执行脚本,拿到结果。它适合高度标准化、量大、人工做容易出错的任务。
实际项目里两者经常混用。比如一个前端开发skill可以包含知识型的组件规范文档,也可以包含一个自动跑lint和test的操作型脚本。我的经验是先做知识型,跑通了再加脚本,每一步都可控,排查范围也小。
4.3 把多个skill组合成一条流水线
单个skill解决的是单点任务,真正的效率提升来自组合。比如做数据周报,我会同时挂载三个skill:csv-cleaner负责清洗数据、report-generator负责按模板生成周报、format-checker负责终稿格式校验。agent拿到任务后自动按顺序调用,一条处理链就串起来了。
组合使用时有个关键点:skill之间要解耦。每个skill不依赖其他skill的内部文件,只依赖标准输入输出。周报生成器只认"清洗好的CSV文件名",至于CSV怎么来的它不管。这样你换掉csv-cleaner或者升级它,不影响下游。所有系统设计的"单一职责"原则,在这里同样适用。
我还会在SKILL.md之间建立显式引用,比如清洗skill里写"下游流程请使用report-generator生成周报"。这不是强制依赖,只是给agent一个明显的下一步提示。AI的路径规划能力再强,我们给的指引越清晰,它的行为就越稳定。
4.4 安全边界与合规意识
skills能力的另一面是风险。你给AI的skill如果有脚本执行能力,它可能真的会去操作文件、调接口、跑命令。所以几个底线我必须强调:
第一,不安装来源不明的skill,尤其是压缩包"一键安装"的那种。第二,不在skill里硬编码密钥、token。这部分应该走标准的环境变量或密码管理方案,任何教程让你把密钥写进SKILL.md都要警惕。第三,对带网络请求或文件删除操作的脚本保持高度警惕,审查时必须逐行确认。第四,所有安全测试、审计相关的技能,只能在明确授权和合法合规的范围内使用,这个边界没有模糊地带。
我自己的习惯是给skill建一个专门的运行目录,脚本只允许访问白名单路径。第一次运行一个不熟悉的操作型skill之前,我会开个临时环境看一眼它到底创建了什么文件、改了什么配置。多花五分钟,后面能省十个小时的善后时间。
再说一个更日常的场景:内容创作类的skills,比如分镜脚本生成、论文格式整理,这类技能很受欢迎,但使用时也要注意不侵犯他人版权、不伪造数据、遵守对应平台和学术机构的规范。工具本身没有对错,但使用工具的人要对结果负责。
5. 实操总结与个人体会
从接触skills到现在,我最大的感受是:它把"调教AI"这件事从提示词工程升级成了流程设计。以前你写一个完美prompt,只能服务一次;现在你写一份SKILL.md,能重复使用无数次,还能分享给团队、上传到社区。这种沉淀和复利效应,是单纯堆提示词做不到的。
有几个动作我几乎每周都在做:持续收集工作中重复出现3次以上的任务;每两周给自己写的skill做一次小评审,看哪些指令还能更精确;看到别人分享的skill先从SKILL.md读起,理解设计思路再考虑要不要装进来。这套习惯让我的AI工具库越来越厚,但每个skill都清楚地知道自己该干什么、不该干什么。
最后分享一个小技巧:写skill时,把"错误案例"也写进文档。AI非常擅长从反例里理解边界,你告诉它"不要删除原始文件""不要把列名改成中文",它就很少再犯同类错误。这比只写正面流程管用得多。
skills这个方向还在快速演进,标准也在不断完善,但"把经验文档化、把流程标准化、把工具嵌入AI决策链"这套思路,我判断会是接下来很长一段时间里Agent真正落地的一个核心方式。你现在开始积累自己的skill库,一点都不早。