什么是 AI Agent 中的 Skills?它有什么用?

回答重点

Skills 就是给 AI Agent 写的操作手册,本质上是一份结构化的指令文件。当 Agent 碰到某类任务,就去读对应的 Skill,按里面的步骤一步步执行,不用你每次从头教它。

比如你想让 AI 帮你创建 Cursor 的自定义规则文件,规则文件放哪个目录、格式长啥样、有哪些字段,这些东西写一个 create-rule 的 Skill 就搞定了。Agent 碰到相关任务自动加载,不需要你每次重复沟通。

它的核心价值就三点:

1)把某个领域的专业知识、操作步骤、注意事项打包成一个文件,Agent 读了就能干活,不需要每次重复教

2)同一个任务不管执行多少次,Agent 都按 Skill 定义的流程走,输出质量可预期

3)通过编写不同的 Skills,让一个通用 Agent 具备各种垂直领域的专业能力,不需要重新训练模型

一个典型的 Skill 文件通常是 Markdown 格式,包含触发条件、操作步骤、输入输出规范、常见坑点这几个核心部分。

扩展知识

Skills 出现之前的痛点

没有 Skills 的时候,你每次让 Agent 干一件稍微有点规范要求的活儿,都得从头把要求说一遍。

比如你要求”代码文件头部必须加上版权声明、函数命名用驼峰、异常处理要统一格式”,你说了一次 Agent 记住了,下次新对话又忘了。

更要命的是,不同的人给 Agent 的指令不一样,同一个团队里 10 个人可能写出 10 种风格的代码来。

Skills 就是来解决这个问题的:把这些反复出现的指令和规范固化成文件,让 Agent 每次都能自动读取,保证行为一致。

Skills 的技术实现原理

Skills 的底层原理其实不复杂,本质上就是一种 Prompt 注入机制

在 Agent 执行任务之前,系统根据任务类型匹配合适的 Skill 文件,把文件内容注入到 LLM 的上下文中,相当于对话开始前先给 AI “补课”。

整个过程分三步走:

  1. 首先是匹配阶段,系统根据用户意图或关键词,从 Skill 库中找到相关的 Skill,匹配方式可以是关键词规则、语义检索,也可以直接在 Agent 的 System Prompt 里列出所有可用 Skill 让 LLM 自己判断。
  2. 然后是加载阶段,读取匹配到的 Skill 文件内容,注入到当前对话的上下文中。
  3. 最后是执行阶段,LLM 根据 Skill 中定义的步骤和约束来完成任务。

这跟 RAG 有点像,但关键区别在于:RAG 检索的是知识片段,目的是”回答问题”;Skill 加载的是操作指令,目的是”指导行动”。

Skills 在主流 AI 编程工具中的应用

目前 Skills 在 AI 编程助手领域已经有比较成熟的落地:

工具 Skills 实现形式 存放位置 触发方式
Cursor SKILL.md 文件 .cursor/skills-cursor/ Agent 根据任务自动匹配,或用户引用
Claude Code CLAUDE.md 项目根目录或 ~/.claude/ 每次对话自动加载
GitHub Copilot .github/copilot-instructions.md .github/ 目录 自动注入上下文
Windsurf Rules 文件 .windsurfrules 自动加载

叫法不一样,核心思路都是一个:通过本地文件来持久化地影响 AI 的行为模式。

Skills 的设计原则

写一个好的 Skill 跟写一个好的 Prompt 一样需要技巧:

1)一个 Skill 只解决一类问题,别把所有东西塞到一个文件里。”创建规则文件”和”修改编辑器配置”应该是两个独立的 Skill

2)操作流程要清晰,每一步做什么、用什么工具都写明白,最好是编号列表

3)明确定义输入参数和输出格式,减少歧义

4)给出正确和错误的示例,比纯文字描述有效得多

5)Skill 不是写完就不管了,要根据实际使用效果不断迭代优化

面试官追问

提问:Skills 和 RAG 都是往上下文里塞内容,具体区别在哪?

回答:RAG 检索的是知识片段,目的是让模型基于这些信息回答问题,属于”给 AI 喂资料”。Skills 加载的是操作指令,目的是让模型按照固定流程执行任务,属于”给 AI 定规矩”。RAG 的检索粒度通常是段落级别,一次可能检索 5-10 个相关文档片段;Skills 通常是整份文件加载,一次加载 1-2 个 Skill。另外 RAG 需要向量数据库做语义检索,Skills 一般靠简单的关键词匹配或者让 LLM 自己选就够了。

提问:如果 Skill 文件内容特别长,塞进上下文会不会有问题?

回答:肯定有问题。LLM 的上下文窗口是有限的,比如 Claude 的上下文是 200K token,一个 Skill 文件如果写了好几千 token,再加上用户的对话历史和系统提示词,很容易把上下文撑满。一般解决办法有两个:一是控制 Skill 文件的长度,把非核心内容拆成子文件按需加载;二是做分层加载,先加载一个精简版的摘要,Agent 判断需要更多细节时再加载完整内容。Cursor 就是这么干的,鼓励你把大 Skill 拆分成多个小文件。

提问:怎么判断一个任务应该用 Skill 来解决还是用 Tool 来解决?

回答:看这个任务需不需要跟外部系统打交道。如果只是需要 AI 按照特定流程去思考和组织输出,比如生成代码要遵循某种规范、创建文件要按照特定模板,用 Skill 就够了。如果需要查数据库、调 API、操作文件系统这些实际的外部操作,那就得上 Tool。简单说,Skill 管的是”怎么想”,Tool 管的是”怎么做”。两者也经常配合着用,Skill 里面会写明在某一步调用哪个 Tool。

上一篇
下一篇