Claude Platform Docs
  • 消息
  • 托管智能体
  • 管理

Search...
⌘K
第一步
Claude 简介快速入门
使用 Claude 构建
功能概览使用 Messages API停止原因与回退拒绝与回退回退额度
模型能力
扩展思考自适应思考努力程度任务预算(测试版)快速模式(研究预览)结构化输出引用流式传输消息批量处理搜索结果流式传输拒绝多语言支持嵌入
工具
概览工具使用的工作原理教程:构建使用工具的智能体定义工具处理工具调用并行工具使用工具运行器(SDK)严格工具使用工具使用与提示缓存服务器工具故障排除网页搜索工具网页抓取工具代码执行工具顾问工具记忆工具Bash 工具计算机使用工具文本编辑器工具
工具基础设施
工具参考管理工具上下文工具组合工具搜索编程式工具调用细粒度工具流式传输
上下文管理
上下文窗口压缩上下文编辑提示缓存对话中系统消息构建编排模式缓存诊断(测试版)令牌计数
处理文件
Files APIPDF 支持图像与视觉
技能
概览快速入门最佳实践企业技能API 中的技能
MCP
远程 MCP 服务器MCP 连接器
云平台上的 Claude
Amazon BedrockAmazon Bedrock(旧版)AWS 上的 Claude PlatformMicrosoft FoundryVertex AI

Log in
API 中的技能
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Claude Platform Docs

Solutions

  • AI agents
  • Code modernization
  • Coding
  • Customer support
  • Education
  • Financial services
  • Government
  • Life sciences

Partners

  • Claude on AWS
  • Claude on Google Cloud

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Company

  • Anthropic
  • Careers
  • Economic Futures
  • Research
  • News
  • Responsible Scaling Policy
  • Security and compliance
  • Transparency

Learn

  • Blog
  • Courses
  • Use cases
  • Connectors
  • Customer stories
  • Engineering at Anthropic
  • Events
  • Powered by Claude
  • Service partners
  • Startups program

Help and security

  • Availability
  • Status
  • Support
  • Discord

Terms and policies

  • Privacy policy
  • Responsible disclosure policy
  • Terms of service: Commercial
  • Terms of service: Consumer
  • Usage policy
消息/技能

通过 API 使用 Agent Skills

了解如何通过 API 使用 Agent Skills 来扩展 Claude 的能力。

Was this page helpful?

  • 快速链接
  • 概述
  • 使用 Skills
  • 前提条件
  • 在 Messages 中使用 Skills
  • Container 参数
  • 下载生成的文件
  • 多轮对话
  • 长时间运行的操作
  • 使用多个 Skills
  • 管理自定义 Skills
  • 创建 Skill
  • 列出 Skills
  • 检索 Skill
  • 删除 Skill
  • 版本管理
  • Skills 的加载方式
  • 使用场景
  • 组织级 Skills
  • 个人 Skills
  • 示例:财务建模
  • 限制与约束
  • 请求限制
  • 环境约束
  • 最佳实践
  • 何时使用多个 Skills
  • 版本管理策略
  • 提示缓存注意事项
  • 错误处理
  • 数据保留
  • 后续步骤

Agent Skills 通过包含指令、脚本和资源的有组织文件夹来扩展 Claude 的能力。本指南将向您展示如何通过 Claude API 使用预构建的和自定义的 Skills。



如需完整的 API 参考(包括请求/响应架构和所有参数),请参阅:

  • Skill 管理 API 参考 - Skills 的 CRUD 操作
  • Skill 版本 API 参考 - 版本管理


此功能不符合零数据保留(ZDR)的条件。数据将根据该功能的标准保留策略进行保留。

快速链接

Agent Skills 入门

创建您的第一个 Skill

创建自定义 Skills

编写 Skills 的最佳实践

概述



如需深入了解 Agent Skills 的架构和实际应用,请阅读工程博客文章:Equipping agents for the real world with Agent Skills。

Skills 通过代码执行工具与 Messages API 集成。无论是使用 Anthropic 管理的预构建 Skills,还是您上传的自定义 Skills,集成方式都是相同的:两者都需要代码执行,并使用相同的 container 结构。

使用 Skills

无论来源如何,Skills 在 Messages API 中的集成方式都是相同的。您在 container 参数中指定 Skills,包含 skill_id、type 和可选的 version,它们将在代码执行环境中运行。

您可以使用来自两个来源的 Skills:

方面Anthropic Skills自定义 Skills
Type 值anthropiccustom
Skill ID短名称:pptx、xlsx、docx、pdf自动生成:skill_01AbCdEfGhIjKlMnOpQrStUv
版本格式基于日期:20251013 或 latestEpoch 时间戳:1759178010641129 或 latest
管理方式

两种 Skill 来源都可通过 List Skills 端点返回(使用 source 参数进行筛选)。集成方式和执行环境完全相同,唯一的区别在于 Skills 的来源以及管理方式。

前提条件

要使用 Skills,您需要:

  1. 从 Console 获取的 Claude API 密钥
  2. Beta 请求头:
    • code-execution-2025-08-25 - 启用代码执行(Skills 必需)
    • skills-2025-10-02 - 启用 Skills API
    • files-api-2025-04-14 - 用于向容器上传/从容器下载文件
  3. 在您的请求中启用**代码执行工具**

在 Messages 中使用 Skills

Container 参数

Skills 通过 Messages API 中的 container 参数指定。每个请求最多可包含 8 个 Skills。

Anthropic Skills 和自定义 Skills 的结构完全相同。指定必需的 type 和 skill_id,并可选择包含 version 以固定到特定版本:

下载生成的文件

当 Skills 创建文档(Excel、PowerPoint、PDF、Word)时,会在响应中返回 file_id 属性。您必须使用 Files API 来下载这些文件。

工作原理:

  1. Skills 在代码执行期间创建文件
  2. 响应中包含每个已创建文件的 file_id
  3. 使用 Files API 下载实际的文件内容
  4. 保存到本地或根据需要进行处理

示例:创建并下载 Excel 文件

其他 Files API 操作:



有关 Files API 的完整详情,请参阅 Files API 文档。

多轮对话

通过指定容器 ID,在多条消息之间复用同一个容器:

长时间运行的操作

Skills 可能执行需要多轮的操作。请处理 pause_turn 停止原因:



响应中可能包含 pause_turn 停止原因,这表示 API 暂停了一个长时间运行的 Skill 操作。您可以在后续请求中原样返回该响应,让 Claude 继续其轮次;或者如果您希望中断对话并提供额外指导,也可以修改内容。

使用多个 Skills

在单个请求中组合多个 Skills 以处理复杂的工作流:


管理自定义 Skills

创建 Skill

Skill 包是一个目录,其顶层包含一个带有 name 和 description YAML frontmatter 的 SKILL.md 文件,以及任何支持脚本或资源。请参阅在 API 中开始使用 Agent Skills 来编写一个 Skill,并查看示例后面的要求列表以了解完整的约束条件。

上传您的自定义 Skill 以使其在您的工作区中可用。您可以上传 zip 压缩包或单个文件对象;Python SDK 还额外提供了一个接受目录路径的 files_from_dir 辅助函数。

要求:

  • 必须在顶层包含一个 SKILL.md 文件
  • 所有文件的路径中必须指定一个共同的根目录
  • 上传总大小必须小于 30 MB
  • YAML frontmatter 要求:
    • name:最多 64 个字符,仅限小写字母/数字/连字符,不含 XML 标签,不含保留词("anthropic"、"claude")
    • description:最多 1024 个字符,非空,不含 XML 标签

如需完整的请求/响应架构,请参阅 Create Skill API 参考。

列出 Skills

检索您的工作区中可用的所有 Skills,包括 Anthropic 预构建的 Skills 和您的自定义 Skills。使用 source 参数按 Skill 类型进行筛选:

有关分页和筛选选项,请参阅 List Skills API 参考。

检索 Skill

获取特定 Skill 的详细信息:

删除 Skill

要删除一个 Skill,您必须先删除其所有版本:

尝试删除仍存在版本的 Skill 将返回 400 错误。

版本管理

Skills 支持版本管理,以便安全地管理更新:

Anthropic Skills:

  • 版本使用日期格式:20251013
  • 随着更新发布新版本
  • 指定确切版本以确保稳定性

自定义 Skills:

  • 自动生成的 epoch 时间戳:1759178010641129
  • 使用 "latest" 始终获取最新版本
  • 更新 Skill 文件时创建新版本

有关完整详情,请参阅 Create Skill Version API 参考。


Skills 的加载方式

当您在容器中指定 Skills 时:

  1. 元数据发现: Claude 在系统提示中看到每个 Skill 的元数据(名称、描述)
  2. 文件加载: Skill 文件被复制到容器中的 /skills/{directory}/ 路径下
  3. 自动使用: 当与您的请求相关时,Claude 会自动加载并使用 Skills
  4. 组合: 多个 Skills 可以组合在一起处理复杂的工作流

渐进式披露架构确保了高效的上下文使用:Claude 仅在需要时才加载完整的 Skill 指令。


使用场景

组织级 Skills

品牌与传播

  • 将公司特定的格式(颜色、字体、布局)应用于文档
  • 按照组织模板生成传播内容
  • 确保所有输出遵循一致的品牌指南

项目管理

  • 使用公司特定的格式(OKR、决策日志)组织笔记
  • 按照团队惯例生成任务
  • 创建标准化的会议回顾和状态更新

业务运营

  • 创建公司标准的报告、提案和分析
  • 执行公司特定的分析流程
  • 按照组织模板生成财务模型

个人 Skills

内容创作

  • 自定义文档模板
  • 专门的格式和样式
  • 特定领域的内容生成

数据分析

  • 自定义数据处理流程
  • 专门的可视化模板
  • 行业特定的分析方法

开发与自动化

  • 代码生成模板
  • 测试框架
  • 部署工作流

示例:财务建模

组合 Excel 和自定义 DCF 分析 Skills:


限制与约束

请求限制

  • 每个请求的最大 Skills 数量: 8
  • Skill 上传的最大大小: 30 MB(所有文件合计)
  • YAML frontmatter 要求:
    • name:最多 64 个字符,仅限小写字母/数字/连字符,不含 XML 标签,不含保留词("anthropic"、"claude")
    • description:最多 1024 个字符,非空,不含 XML 标签

环境约束

Skills 在代码执行容器中运行,具有以下限制:

  • 无网络访问: 无法进行外部 API 调用
  • 无运行时包安装: 仅可使用预安装的包
  • 隔离环境: 容器是隔离的;除非您指定现有的容器 ID,否则会创建一个新的容器

有关可用的包,请参阅代码执行工具。


最佳实践

何时使用多个 Skills

当任务涉及多种文档类型或领域时,组合使用 Skills:

适用场景:

  • 数据分析(Excel)+ 演示文稿创建(PowerPoint)
  • 报告生成(Word)+ 导出为 PDF
  • 自定义领域逻辑 + 文档生成

应避免:

  • 包含未使用的 Skills(会影响性能)

版本管理策略

用于生产环境:

# 固定到特定版本以确保稳定性
container = {
    "skills": [
        {
            "type": "custom",
            "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
            "version": "1759178010641129",  # Specific version
        }
    ]
}

用于开发环境:

# 在积极开发阶段使用 latest
container = {
    "skills": [
        {
            "type": "custom",
            "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
            "version": "latest",  # Always get newest
        }
    ]
}

提示缓存注意事项

使用提示缓存时,请注意更改容器中的 Skills 列表会使缓存失效:

为获得最佳缓存性能,请在各个请求之间保持 Skills 列表一致。

错误处理

优雅地处理与 Skill 相关的错误:


数据保留

Agent Skills 不在 ZDR 协议的覆盖范围内。Skill 定义和执行数据将根据 Anthropic 的标准数据保留政策进行保留。

有关所有功能的 ZDR 适用性,请参阅 API 与数据保留。

后续步骤


API 参考

包含所有端点的完整 API 参考


编写指南

编写高效 Skills 的最佳实践

代码执行工具

了解代码执行环境

由 Anthropic 预构建和维护
通过 Skills API 上传和管理
可用性对所有用户可用仅限您的工作区私有
client = anthropic.Anthropic()

response = client.beta.messages.create(
    model="claude-opus-4-8",
    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"}],
)
client = anthropic.Anthropic()

# 步骤 1:使用 Skill 创建文件
response = client.beta.messages.create(
    model="claude-opus-4-8",
    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":
                # 具体类型的列表:List[BashCodeExecutionOutputBlock]
                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}")
client = anthropic.Anthropic()
file_id = "file_abc123"
# 获取文件元数据
file_info = client.beta.files.retrieve_metadata(file_id=file_id)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")

# 列出所有文件
files = client.beta.files.list()
for file in files.data:
    print(f"{file.filename} - {file.created_at}")

# 删除文件
client.beta.files.delete(file_id=file_id)
# 第一个请求创建容器
response1 = client.beta.messages.create(
    model="claude-opus-4-8",
    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 this sales data"}],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)

# 使用同一容器继续对话
messages = [
    {"role": "user", "content": "Analyze this sales data"},
    {"role": "assistant", "content": response1.content},
    {"role": "user", "content": "What was the total revenue?"},
]

response2 = client.beta.messages.create(
    model="claude-opus-4-8",
    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"}],
)
messages = [{"role": "user", "content": "Process this large dataset"}]
max_retries = 10

response = client.beta.messages.create(
    model="claude-opus-4-8",
    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 i 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-4-8",
        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"}],
    )
response = client.beta.messages.create(
    model="claude-opus-4-8",
    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"}],
)
# 选项 1:上传单个文件(每个文件使用一个 --file 标志)
ant beta:skills create \
  --display-title "Financial Analysis" \
  --file financial_skill/SKILL.md \
  --file financial_skill/analyze.py \
  --beta skills-2025-10-02

# 选项 2:上传 zip 压缩包
ant beta:skills create \
  --display-title "Financial Analysis" \
  --file financial_analysis_skill.zip \
  --beta skills-2025-10-02
# 列出所有 Skill
ant beta:skills list

# 仅列出自定义 Skill
ant beta:skills list --source custom
ant beta:skills retrieve \
  --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv
# 步骤 1:删除所有版本
ant beta:skills:versions list \
  --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
  --transform version --raw-output \
  | while read -r VERSION; do
      ant beta:skills:versions delete \
        --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
        --version "$VERSION" >/dev/null
    done

# 步骤 2:删除该 Skill
ant beta:skills delete \
  --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv >/dev/null
# 创建新版本
VERSION_NUMBER=$(ant beta:skills:versions create \
  --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
  --file updated_skill/SKILL.md \
  --transform version --raw-output)

# 使用特定版本
ant beta:messages create \
  --beta code-execution-2025-08-25 \
  --beta skills-2025-10-02 <<YAML
model: claude-opus-4-8
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 \
  --beta skills-2025-10-02 <<'YAML'
model: claude-opus-4-8
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
# 创建自定义 DCF 分析 Skill
from anthropic.lib import files_from_dir

dcf_skill = client.beta.skills.create(
    display_title="DCF Analysis",
    files=files_from_dir("/path/to/dcf_skill"),
)

# 与 Excel 配合使用以创建财务模型
response = client.beta.messages.create(
    model="claude-opus-4-8",
    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 with the attached financials",
        }
    ],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
print(response)
# 第一个请求创建缓存
response1 = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    betas=[
        "code-execution-2025-08-25",
        "skills-2025-10-02",
        "prompt-caching-2024-07-31",
    ],
    container={
        "skills": [{"type": "anthropic", "skill_id": "xlsx", "version": "latest"}]
    },
    messages=[{"role": "user", "content": "Analyze sales data"}],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)

# 添加/移除技能会使缓存失效
response2 = client.beta.messages.create(
    model="claude-opus-4-8",
    max_tokens=4096,
    betas=[
        "code-execution-2025-08-25",
        "skills-2025-10-02",
        "prompt-caching-2024-07-31",
    ],
    container={
        "skills": [
            {"type": "anthropic", "skill_id": "xlsx", "version": "latest"},
            {
                "type": "anthropic",
                "skill_id": "pptx",
                "version": "latest",
            },  # Cache miss
        ]
    },
    messages=[{"role": "user", "content": "Create a presentation"}],
    tools=[{"type": "code_execution_20250825", "name": "code_execution"}],
)
client = anthropic.Anthropic()

try:
    response = client.beta.messages.create(
        model="claude-opus-4-8",
        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:
        raise