Agent Skills 通过包含指令、脚本和资源的有组织文件夹来扩展 Claude 的能力。本指南将向您展示如何在 Claude API 中使用预构建的和自定义的 Skills。
了解如何在 10 分钟内使用 Agent Skills 通过 Claude API 创建文档。
了解如何编写 Claude 能够发现并成功使用的高效 Skills。
Skills 通过代码执行工具与 Messages API 集成。无论是使用 Anthropic 管理的预构建 Skills 还是您上传的自定义 Skills,集成方式都是相同的:两者都需要代码执行,并使用相同的 container 结构。
无论来源如何,Skills 在 Messages API 中的集成方式都是相同的。您在 container 参数中指定 Skills,包含 skill_id、type 和可选的 version,它们将在代码执行环境中运行。
您可以使用来自两个来源的 Skills:
| 方面 | Anthropic Skills | 自定义 Skills |
|---|---|---|
| Type 值 | anthropic | custom |
| Skill ID | 简短名称:pptx、xlsx、docx、pdf | 自动生成:skill_01AbCdEfGhIjKlMnOpQrStUv |
| 版本格式 | 基于日期:20251013 或 latest | Epoch 时间戳:1759178010641129 或 latest |
| 管理方式 | 由 Anthropic 预构建和维护 | 通过 Skills API 上传和管理 |
| 可用性 | 对所有用户可用 | 仅限您的工作区私有 |
两种 Skill 来源都可通过 List Skills 端点返回(使用 source 参数进行筛选)。集成方式和执行环境完全相同,唯一的区别在于 Skills 的来源以及管理方式。
要使用 Skills,您需要:
code-execution-2025-08-25 - 启用代码执行(Skills 必需)skills-2025-10-02 - 启用 Skills APIfiles-api-2025-04-14 - 仅当您使用 Files API 上传输入文件或下载 Skill 生成的文件时才需要Skills 需要代码执行工具,因此请使用其模型兼容性列表中的模型。
Skills 通过 Messages API 中的 container 参数指定。每个请求最多可以包含 8 个 Skills。
Anthropic Skills 和自定义 Skills 的结构完全相同。指定必需的 type 和 skill_id,并可选择包含 version 以固定到特定版本:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "pptx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a presentation about renewable energy"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)当 Skills 创建文档(Excel、PowerPoint、PDF、Word)时,它们会在响应中返回 file_id 属性。您必须使用 Files API 来下载这些文件。
工作原理:
file_id,位于代码执行工具结果块内(请参阅响应格式)。要为 Skills 提供待处理的输入文件,请使用 Files API 上传文件,并在请求中通过容器上传块引用它们。
示例:创建并下载 Excel 文件
client = anthropic.Anthropic()
# 步骤 1:使用 Skill 创建文件
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{
"role": "user",
"content": "Create an Excel file with a simple budget spreadsheet",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 步骤 2:从响应中提取文件 ID
def extract_file_ids(response):
file_ids = []
for item in response.content:
if item.type == "bash_code_execution_tool_result":
content_item = item.content
if content_item.type == "bash_code_execution_result":
# 每个内容项都是一个携带 file_id 的 bash_code_execution_output 块
for file in content_item.content:
file_ids.append(file.file_id)
return file_ids
# 步骤 3:使用 Files API 下载文件
for file_id in extract_file_ids(response):
file_metadata = client.beta.files.retrieve_metadata(file_id=file_id)
file_content = client.beta.files.download(file_id=file_id)
# 步骤 4:保存到磁盘
file_content.write_to_file(file_metadata.filename)
print(f"Downloaded: {file_metadata.filename}")其他 Files API 操作:
client = anthropic.Anthropic()
file_id = "file_011CNha8iCJcU1wXNR6q4V8w"
# 获取文件元数据
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")
# 列出所有文件
for file in client.beta.files.list():
print(f"{file.filename} - {file.created_at}")
# 删除文件
client.beta.files.delete(file_id=file_id)响应的 container 对象包含容器的 id 和 expires_at 时间戳(有关生命周期详情,请参阅容器复用)。通过指定容器 ID,可以在多条消息中复用同一个容器:
client = anthropic.Anthropic()
# 第一个请求创建容器
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[
{"role": "user", "content": "Create a sample sales dataset and analyze it"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 使用同一容器继续对话
messages = [
{"role": "user", "content": "Create a sample sales dataset and analyze it"},
{
# 将助手的文本传递下去;container.id 承载执行状态
"role": "assistant",
"content": "\n".join(
block.text for block in response1.content if block.type == "text"
),
},
{"role": "user", "content": "What was the total revenue?"},
]
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response1.container.id, # Reuse container
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Skills 可能执行需要多轮交互的操作。请处理 pause_turn 停止原因:
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "Generate and process a large sample dataset"}]
max_retries = 10
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 处理长时间操作的 pause_turn
for _ in range(max_retries):
if response.stop_reason != "pause_turn":
break
messages.append({"role": "assistant", "content": response.content})
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"id": response.container.id,
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
],
},
messages=messages,
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)在单个请求中组合多个 Skills 以处理复杂的工作流:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "anthropic", "skill_id": "pptx", "version": "latest"},
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
},
]
},
messages=[
{"role": "user", "content": "Analyze sales data and create a presentation"}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)Skill 包是一个目录,其顶层包含一个带有 name 和 description YAML frontmatter 的 SKILL.md 文件,以及任何支持脚本或资源。请参阅在 API 中开始使用 Agent Skills 了解如何编写 Skill,并查看示例后面的要求列表以了解完整约束。
上传您的自定义 Skill 以使其在您的工作区中可用。您可以上传 zip 压缩包或单独的文件对象。Python SDK 还提供了一个接受目录路径的 files_from_dir 辅助函数。
文件通过您附加的文件名进行识别。逐个文件上传时,必须在其路径中保留一个共同的顶层目录(即 cURL 示例中的 ;filename= 后缀和 SDK 示例中的文件名参数)。zip 压缩包必须将 Skill 目录作为其唯一的顶层条目。对于本演练中的 Skill,请使用 zip -r financial_skill.zip financial_skill/ 创建压缩包,并用它替换 zip 上传选项中的 example_skill.zip 占位符。
ant beta:skills create \
--file example_skill.zip \
--beta skills-2025-10-02
# 单文件上传需要带路径限定的文件名,而 CLI
# 目前无法设置此项。请改为上传 zip 压缩包。要求:
SKILL.md 文件SKILL.md frontmatter 中的 name 匹配(不区分大小写和下划线:Financial_Skill 匹配 financial-skill)display_title 是可选的:省略时,它将从 SKILL.md 的 name 派生;显式指定的值在您工作区的自定义 Skills 中必须是唯一的name:最多 64 个字符,仅限小写字母/数字/连字符,不含 XML 标签,不含保留词("anthropic"、"claude")description:最多 1024 个字符,非空,不含 XML 标签如需完整的请求/响应架构,请参阅 Create Skill API 参考。
检索您的工作区可用的所有 Skills,包括 Anthropic 预构建的 Skills 和您的自定义 Skills。使用 source 参数按 Skill 类型进行筛选:
# 列出所有 Skill
ant beta:skills list
# 仅列出自定义 Skill
ant beta:skills list --source custom有关分页和筛选选项,请参阅 List Skills API 参考。
获取特定 Skill 的详细信息:
ant beta:skills retrieve \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv要删除 Skill,您必须先删除其所有版本:
# 步骤 1:列出所有版本,然后逐个删除
ant beta:skills:versions list \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--transform version \
--raw-output
# 对列表返回的每个版本 ID 重复此操作
ant beta:skills:versions delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--version 1759178010641129 >/dev/null
# 步骤 2:删除该 Skill
ant beta:skills delete \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null尝试删除仍存在版本的 Skill 将返回 400 错误。
Skills 支持版本管理,以便安全地管理更新:
Anthropic Skills:
20251013自定义 Skills:
1759178010641129"latest" 始终获取最新版本新版本是一个完整的快照,而非增量更新:每次都需上传 Skill 的完整文件集,并使用创建时所用的相同顶层目录名称。您省略的文件不会被保留。以下示例重新上传了创建 Skill 中的完整 financial_skill/ 包。
# 创建新版本
VERSION_NUMBER=$(ant beta:skills:versions create \
--skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
--file financial_skill.zip \
--transform version \
--raw-output)
# 使用特定版本
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<YAML
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: "$VERSION_NUMBER"
messages:
- role: user
content: Use updated Skill
tools:
- type: code_execution_20250825
name: code_execution
YAML
# 使用最新版本
ant beta:messages create \
--beta code-execution-2025-08-25,skills-2025-10-02 <<YAML
model: claude-opus-5
max_tokens: 4096
container:
skills:
- type: custom
skill_id: skill_01AbCdEfGhIjKlMnOpQrStUv
version: latest
messages:
- role: user
content: Use latest Skill version
tools:
- type: code_execution_20250825
name: code_execution
YAML如需完整详情,请参阅 Create Skill Version API 参考。
当您在容器中指定 Skills 时:
/skills/{skill-name}/ 路径下。该目录是 Skill 的名称(Anthropic Skill 为 pptx,自定义 Skill 为 SKILL.md 中的 name),而非其 skill_01... ID。Claude 仅在需要时才加载完整的 Skill 指令。
Skills 既适用于组织工作,也适用于个人工作。组织使用它们为文档应用品牌格式、围绕公司模板组织笔记和报告,以及运行公司特定的分析流程。个人则将其用于自定义文档模板、专门的数据管道以及代码生成或部署规范。
组合 Excel 和自定义 DCF 分析 Skills:
from anthropic.lib import files_from_dir
client = anthropic.Anthropic()
# 创建自定义 DCF 分析 Skill
dcf_skill = client.beta.skills.create(
files=files_from_dir("/path/to/dcf_skill"),
)
# 与 Excel 配合使用以创建财务模型
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{"type": "custom", "skill_id": dcf_skill.id, "version": "latest"},
]
},
messages=[
{
"role": "user",
"content": "Build a DCF valuation model for a SaaS company",
}
],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)name:最多 64 个字符,仅限小写字母/数字/连字符,不含 XML 标签,不含保留词("anthropic"、"claude")description:最多 1024 个字符,非空,不含 XML 标签Skills 在代码执行容器中运行,具有以下限制:
有关可用的包,请参阅代码执行工具。
当任务涉及多种文档类型或领域时,可以组合使用 Skills:
适用场景:
应避免:
本节中的 SDK 选项卡展示了要包含在 Messages 请求中的 container 值。cURL 和 CLI 选项卡展示了完整的请求。
生产环境: 固定到特定版本,这样 Skill 更新就不会改变您已部署的行为。版本 ID 来自版本管理中的创建版本响应,或来自 List Skill Versions API。该 ID 始终是字符串:在 JSON 或 YAML 中请为 epoch 时间戳 ID 加上引号。
# 固定到特定版本以确保稳定性
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "1759178010641129",
}
]
}开发环境: 使用 latest 以便在迭代时自动获取最新版本。
# 在活跃开发阶段使用 latest
container = {
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
}如果您使用提示缓存,更改容器中的 Skills 列表会使缓存失效。Skills 以固定顺序渲染到系统提示中,因此相同的列表会生成相同的可缓存前缀:
client = anthropic.Anthropic()
# 技能会以固定且缓存友好的顺序渲染到系统提示中
response1 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
},
messages=[{"role": "user", "content": "Analyze sales data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
# 更改技能列表([xlsx] 与 [xlsx, pptx])会改变前缀,导致缓存未命中;而相同的列表则会命中缓存
response2 = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=[
"code-execution-2025-08-25",
"skills-2025-10-02",
],
container={
"skills": [
{"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
{
"type": "anthropic",
"skill_id": "pptx",
"version": "latest",
}, # prefix change: cache miss
]
},
messages=[{"role": "user", "content": "Create a presentation"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)为获得最佳缓存性能,请在各个请求之间保持 Skills 列表(包括其顺序)的一致性。固定自定义 Skill 版本也有帮助:使用 "latest" 时,如果发布的新版本更改了 Skill 的描述,可能会使缓存的前缀失效。
妥善处理与 Skill 相关的错误:
client = anthropic.Anthropic()
try:
response = client.beta.messages.create(
model="claude-opus-5",
max_tokens=4096,
betas=["code-execution-2025-08-25", "skills-2025-10-02"],
container={
"skills": [
{
"type": "custom",
"skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
"version": "latest",
}
]
},
messages=[{"role": "user", "content": "Process data"}],
tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
except anthropic.BadRequestError as e:
if "skill" in str(e):
print(f"Skill error: {e}")
# 处理技能特定的错误
else:
raiseAgent Skills 不在 ZDR 协议的覆盖范围内。Skill 定义和执行数据将根据 Anthropic 的标准数据保留政策进行保留。
有关所有功能的 ZDR 适用性,请参阅 API 和数据保留。
包含所有端点的完整 API 参考
了解如何编写 Claude 能够发现并成功使用的高效 Skills。
在沙盒容器中运行 Python 和 bash 代码,以分析数据、生成文件并迭代解决方案。
Was this page helpful?