ClaudeClaude SkillsClaude CodeClaude API工作流自定义 Skill

Claude Skills 是什么 - 使用、自定义与 API 调用完整指南

Claude Skills 把可复用工作流打包成命令。本文讲清楚 Skills 在网页 / Claude Code / API 里的三种形态,调用方法,自定义 Skill 的文件结构,以及团队共享实践。

· 阅读约 17 分钟

很多人第一次见到 Claude Skills 这个词,是在 Claude Code 命令行里看到 /init/review 之类的斜杠命令,或者在 claude.ai 网页端看到 Skills 卡片。Skills 的本质是把”一段可复用的工作流”打包成命令,下次想用直接调用就行,不用每次复述背景和步骤。 这篇会讲清楚 Skills 在网页、Claude Code、API 三种环境里各是什么形态,怎么调用现成 Skill、怎么写自己的 Skill、以及在 API 项目里怎么把 Skill 集成进去。

文章里出现的命令、文件路径、API 字段都以现版为准;Skills 仍在快速演进,最终能力以 Anthropic 官方文档为准。

Skills 是什么

最简单的解释:

Skill = 一段可重用的 Prompt(包括上下文、指令、工具调用约定)+ 可选的脚本 / 模板,被打包成一个独立单元,可以在网页、Claude Code、API 里被调用。

它解决的痛点:

  • 每次写复杂任务都要重新铺一遍背景:项目目录结构、代码规范、风格偏好
  • 团队成员之间复用同一套提示词不方便
  • API 项目里散落着几十个 system prompt 片段,没法集中管理

把这些固化下来变成 Skill 之后,每次需要做”代码审查”、“写营销文案”、“生成测试用例”这种事,调用对应 Skill 即可。

Skills 不是单纯的”Prompt 模板”。它通常还能:

  • 接收命名参数
  • 调用预定义的工具
  • 在执行过程中读取项目文件、查询数据
  • 在 Claude Code 里和 Hook、子代理等机制配合

Skills 在 Claude 的三种形态

Skills 在 Claude 生态里有三个常见环境,定义和入口略有不同。

形态 1:网页 / 桌面 App 的 Skills

在 claude.ai 的输入框附近或对话设置里能看到 Skills 入口(不同时期的 UI 入口在调整)。Anthropic 官方维护了一批”Skill 卡片”,例如:

  • 代码审查
  • 写邮件
  • 生成数据可视化
  • 处理 PDF / 表格
  • 内容创作流程(如品牌一致性写作)

打开一个 Skill 时,通常会出现一个表单,让你填几个参数(“输入你的代码”、“目标风格”),点提交就开始执行。

形态 2:Claude Code 里的 /<skill> 命令

Claude Code(CLI)里 Skill 表现为斜杠命令。常见内置或社区 Skill:

/init           初始化一个 CLAUDE.md
/review         代码审查
/security-review  安全审查
/update-config  改 settings.json

在 Claude Code 的交互式 REPL 中,直接输入 /<skill-name> 即可触发。Skill 会读取项目文件,按预定的工作流执行。

形态 3:API 中通过 system / tools / Agent SDK 等方式调用

在直接调 Claude API 的项目里,Skill 通常不是一个原子的”功能按钮”,而是一组:

  • 写在 system prompt 里的指令
  • 通过 tools 参数暴露的工具
  • Agent SDK 里通过子代理或 sub-agent 实现的”子任务”

API 里没有”安装一个 Skill”这个步骤,而是把 Skill 的内容(prompt + 工具定义)注入到请求里。


怎么调用现成 Skill

下面分环境说明。

在网页 / 桌面 App 调用

  1. 进入 claude.ai
  2. 在对话输入框附近找到 Skills 入口(图标或下拉),具体位置随版本变化
  3. 浏览或搜索 Skill 列表,例如”PDF 表格提取”
  4. 点 Skill 卡片,弹出参数表单
  5. 填入你的输入(要处理的文件 / 文本 / 指令)
  6. 提交,Skill 在当前对话里执行

Skill 执行完成后,结果会作为对话的一部分留下。你可以在它输出的基础上继续追问、改写。

在 Claude Code 调用

在终端的 Claude Code 交互式会话里:

> /review

或者带参数:

> /review src/api/user.ts

Skill 启动后,Claude Code 会:

  1. 加载这个 Skill 的指令
  2. 按 Skill 定义的工作流读取项目文件
  3. 调用必要的工具(grep、读文件等)
  4. 给出结构化输出,例如审查结论 + 修改建议

如果你不确定 Claude Code 里有哪些 Skill,可以参考 Claude Code 是什么 中的命令清单,或者在交互会话里输入 / 看自动补全列表。


自定义 Skill 的基础

写自己的 Skill 不复杂。下面以 Claude Code 项目级 Skill 为例。

Skill 的文件结构

一个最简单的 Skill 就是一个 markdown 文件,外加可选的辅助资源:

.claude/
  skills/
    my-skill/
      SKILL.md         入口说明 + 指令
      template.md      可选:输出模板
      examples/        可选:示范输入输出
        sample-1.md
      scripts/         可选:要调用的脚本
        run.sh

SKILL.md 是核心,结构通常包含:

  • Skill 的名称、描述
  • 触发条件 / 适用场景
  • 输入参数说明
  • 工作流步骤
  • 输出格式约定

Skill 放在哪里

作用域位置适合
用户级~/.claude/skills/个人通用、跨项目复用
项目级<项目根>/.claude/skills/项目专属、随 Git 仓库分发

项目级 Skill 提交到 Git,团队成员 clone 之后即可使用,这是团队共享 Skills 的最常见方式。

简单 Skill 示例:写邮件

下面是一个写英文邮件的 Skill SKILL.md

---
name: write-email
description: 用规定的语气写一封英文邮件
---

# Write Email Skill

When invoked, follow this workflow:

1. Ask the user for:
   - Recipient relationship (boss / colleague / customer)
   - Email purpose in 1-2 sentences
   - Desired tone (formal / friendly / concise)

2. Draft the email with the following structure:
   - Subject line (one line, no emoji)
   - Greeting
   - Body (3 short paragraphs max)
   - Closing
   - Signature placeholder

3. After drafting, ask if the user wants:
   - A shorter version
   - A more formal version
   - A version with bullet points

Always wrap the final email in a markdown code block for easy copy.

放到 .claude/skills/write-email/SKILL.md,在 Claude Code 里输入 /write-email 即可触发。

Skill 与 Hook 配合

Hook 是 Claude Code 的”事件钩子”,可以在 prompt 开始 / 工具调用前后 / 会话结束等节点执行命令。把 Skill 和 Hook 结合,能做的事:

  • Skill 执行完毕自动跑测试
  • 在 Skill 中调用一个 Hook 把结果写到日志
  • 用 Hook 自动加载某个 Skill 的上下文

具体配置参考 Claude Code 私有部署 里关于 settings.json 的部分。


API 里使用 Skills 的几种方式

直接调 Claude API 的项目,没有现成的 /skill 入口,但可以用以下几种方式把 Skill 思想搬过去。

方式 1:通过 system prompt 注入 Skill 说明

最直接:把 Skill 的指令写进 system,每次需要的时候带上。

import anthropic

client = anthropic.Anthropic()

CODE_REVIEW_SKILL = """
You are a code reviewer. Follow this workflow:
1. Read the code provided.
2. Identify issues in 4 categories: bug, security, performance, style.
3. For each issue, output:
   - File:line
   - Severity (P0/P1/P2)
   - Description
   - Suggested fix
4. End with an overall risk summary.
""".strip()

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=2000,
    system=CODE_REVIEW_SKILL,
    messages=[
        {
            "role": "user",
            "content": "Please review:\n```python\ndef divide(a,b):\n    return a/b\n```",
        }
    ],
)

print(response.content[0].text)

这种方式简单,但每次都要传一遍 Skill 内容。

方式 2:使用 Prompt Caching 缓存 Skill 内容

Skill 文本通常较长(几千字符),每次重复发送既慢又费 token。用 Prompt Caching 把 Skill 文本缓存到服务端,后续请求复用即可,命中后费率明显降低。

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=2000,
    system=[
        {
            "type": "text",
            "text": CODE_REVIEW_SKILL,
            "cache_control": {"type": "ephemeral"},
        }
    ],
    messages=[
        {"role": "user", "content": "review my code..."}
    ],
)

Skill 文本不变的情况下,连续多次调用会命中缓存。

方式 3:通过 tool_use 让 Skill 暴露成工具

如果你的 Skill 涉及”读文件”、“查数据库”、“调外部 API”这类动作,更合适的方式是用 tool use(函数调用)。

tools = [
    {
        "name": "read_file",
        "description": "Read a file from the repo",
        "input_schema": {
            "type": "object",
            "properties": {
                "path": {"type": "string"},
            },
            "required": ["path"],
        },
    },
    {
        "name": "run_tests",
        "description": "Run unit tests and return result",
        "input_schema": {
            "type": "object",
            "properties": {
                "scope": {"type": "string"},
            },
        },
    },
]

response = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=4000,
    system=CODE_REVIEW_SKILL,
    tools=tools,
    messages=[
        {"role": "user", "content": "review the user module"}
    ],
)

Claude 会按需调用 read_filerun_tests 完成 Skill 的工作流,调用方在循环里处理 tool_use 响应。这种方式更接近 Claude Code 的内部工作机制。

方式 4:Agent SDK 中编排多个 Skill

复杂场景下,一个任务可能涉及多个 Skill:先做需求分析,再做代码生成,再做代码审查。Anthropic Agent SDK(Claude Agent SDK)支持把多个 sub-agent 编排起来,每个 sub-agent 对应一个 Skill。

简化的伪代码:

# 伪代码示意,具体 API 以 Agent SDK 文档为准
from anthropic_agent_sdk import Agent, SubAgent

requirement_agent = SubAgent(
    name="requirement",
    system=REQUIREMENT_SKILL,
)

coding_agent = SubAgent(
    name="coding",
    system=CODING_SKILL,
    tools=[...],
)

review_agent = SubAgent(
    name="review",
    system=CODE_REVIEW_SKILL,
)

agent = Agent(
    main_model="claude-opus-4-7",
    sub_agents=[requirement_agent, coding_agent, review_agent],
)

result = agent.run("帮我把用户中心模块重构成 DDD 风格")

主代理负责把任务拆给合适的 sub-agent,每个 sub-agent 内部按自己的 Skill 工作。具体 API 以 Anthropic Agent SDK 文档 为准。

更详尽的 API 介绍可参考 Claude API 完整指南


Skills 适合 / 不适合的任务

写 Skill 不是越多越好。下面是经验性的判断。

适合做成 Skill

  • 重复出现:一个工作流一周内要做好几次
  • 步骤明确:能写成 3-10 步的清单
  • 输出格式固定:希望每次输出格式一致
  • 跨项目复用:在多个项目里都能用上
  • 团队需要对齐:多人都要用同一套规则

典型例子:

  • 代码审查 / 安全审查
  • API 文档生成
  • 周报 / 邮件模板
  • 数据脱敏 / 清洗
  • PR 描述生成

不适合做成 Skill

  • 一次性需求:随手让 Claude 帮忙的,不必抽象
  • 过度依赖具体上下文:每次输入差异巨大,模板化反而限制思考
  • 需求还没稳定:Skill 本身要不断调整,没固化下来时硬写浪费时间
  • 需要复杂交互:每一步都要人工判断、追问,更适合直接对话

判断标准:如果一个工作流连续做 3 次都觉得”上次怎么写来着”,就值得做成 Skill。


团队共享 Skills 的实践

团队规模一上去,Skills 就成了知识沉淀的载体。

1. 用 Git 管理项目级 Skill

.claude/skills/ 提交到 Git,团队成员 clone 即可使用。和代码一起做 Code Review,避免随意改动破坏团队约定。

2. 给 Skill 写 README

SKILL.md 顶部说明:

  • Skill 用来解决什么问题
  • 什么时候不该用它
  • 输入参数和输出格式
  • 维护人是谁

让后来者能快速判断要不要用、怎么改。

3. 用版本号管理变更

---
name: write-pr-description
version: 0.3.0
last_updated: 2026-05-01
---

重大改动时升版本号,并在 SKILL.md 底部写 changelog。这样团队成员知道 Skill 改过了,不至于对着旧记忆调用。

4. 维护一个 Skill 索引

在仓库根目录的 CLAUDE.mddocs/skills.md 里列出所有 Skill 的一句话说明 + 入口命令。新成员入职第一天看一遍就有概念。

5. 区分通用 Skill 和领域 Skill

  • 通用 Skill:放在用户级 ~/.claude/skills/,跨项目用
  • 领域 Skill:放在项目级 .claude/skills/,跟项目业务绑定

例如”写英文邮件”是通用,“生成本项目 OpenAPI 文档”是领域。

6. 定期清理

Skill 用久了会过时,定期检查:

  • 这个 Skill 还有人用吗?
  • 输出风格是不是还符合现在的团队习惯?
  • 工具调用部分有没有跟着代码库变化更新?

不再用的 Skill 删掉,避免新人误用过时模板。


Skills 与其他概念的区别

容易混淆的几个概念。

概念本质范围
Skill一段可调用的工作流(prompt + 可选工具 / 脚本)跨网页、Claude Code、API
Prompt 模板文本模板,参数化的 prompt单次替换、无工作流编排
Tool / FunctionAPI 里可被模型调用的函数单一动作,比 Skill 更原子
Sub-agentAgent SDK 里负责子任务的代理通常封装一个 Skill
System Prompt整个对话的角色设定比 Skill 更基础、更长期生效

简单类比:System Prompt 是”你是谁”,Skill 是”这件事怎么干”,Tool 是”具体动作”,Sub-agent 是”派出去专门做某事的小分队”。


FAQ

Q:Claude API 如何使用 Skills? A:API 里没有”打开 Skill”按钮,常见做法是把 Skill 内容写进 system prompt,配合 Prompt Caching 缓存;如果涉及外部动作,用 tool_use 把动作暴露成工具;复杂场景用 Agent SDK 编排多个 sub-agent。

Q:自定义 Skill 文件放哪里? A:Claude Code 下,用户级放 ~/.claude/skills/,项目级放 .claude/skills/。项目级建议提交到 Git 和团队共享。

Q:Skill 能调用外部脚本吗? A:Claude Code 中可以,通过工具调用或 Hook 触发外部命令;API 中通过 tool_use 把外部脚本封装成工具。

Q:写一个 Skill 需要懂代码吗? A:不需要。一个最简单的 Skill 就是一个 markdown 文件,写清楚步骤即可。如果要让 Skill 调外部脚本 / 工具,才涉及代码。

Q:Skill 在不同模型上效果会差很多吗? A:会。Opus 上能稳定执行的多步骤 Skill,到 Haiku 可能就只能完成简化版。调用 Skill 时记得指定合适的模型。

Q:Skills 和 Anthropic 官方”Computer Use”是一回事吗? A:不是。Computer Use 是让模型操作桌面环境的能力(点击、敲键盘),是一种工具集;Skill 是工作流的封装,可能用到 Computer Use 工具,也可能不用。

Q:Skill 会不会被 Claude 自动选用? A:在 Claude Code 里,常见 Skill 只在你输入对应斜杠命令时触发,不会自动跳出来执行;网页端在某些场景下 Claude 会建议你用某个 Skill,但仍需要你确认。

Q:我能在公司内部分发 Skills 吗? A:可以,做成 Git 仓库 / 内部 npm 包 / 私有模板分发都行。注意里面不要写死敏感信息(密钥、内部地址)。


延伸阅读: