Loading...
  • 构建
  • 管理
  • 模型与定价
  • 客户端 SDK
  • API 参考
Search...
⌘K
Log in
API 中的技能
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Solutions

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

Partners

  • Amazon Bedrock
  • Google Cloud's Vertex AI

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

Agent Skills 通过组织有序的指令、脚本和资源文件夹来扩展 Claude 的功能。本指南展示了如何在 Claude API 中使用预构建的和自定义的 Skills。

有关完整的 API 参考,包括请求/响应模式和所有参数,请参阅:

  • Skill Management API Reference - Skills 的 CRUD 操作
  • Skill Versions API Reference - 版本管理

This feature is not eligible for Zero Data Retention (ZDR). Data is retained according to the feature's standard retention policy.

快速链接

开始使用 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 IDs短名称:pptx、xlsx、docx、pdf生成的:skill_01AbCdEfGhIjKlMnOpQrStUv
版本格式基于日期:20251013 或 latest纪元时间戳:1759178010641129 或 latest
管理由 Anthropic 预构建和维护

两个 Skill 来源都由 List Skills 端点 返回(使用 source 参数进行过滤)。集成形状和执行环境是相同的。唯一的区别是 Skills 的来源以及它们的管理方式。

前置条件

要使用 Skills,您需要:

  1. Claude API 密钥来自 Console
  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 都是相同的。指定必需的 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 在多个消息中重用同一个容器:

长时间运行的操作

技能可能执行需要多个回合的操作。处理 pause_turn 停止原因:

响应可能包含 pause_turn 停止原因,这表示 API 暂停了长时间运行的技能操作。您可以在后续请求中按原样提供响应,让 Claude 继续其回合,或者修改内容以中断对话并提供额外的指导。

使用多个技能

在单个请求中组合多个技能来处理复杂的工作流:


管理自定义技能

创建技能

上传自定义技能以使其在工作区中可用。您可以使用目录路径或单个文件对象进行上传。

要求:

  • 必须在顶级包含 SKILL.md 文件
  • 所有文件必须在其路径中指定公共根目录
  • 总上传大小必须在 30 MB 以下
  • YAML 前置事项要求:
    • name:最多 64 个字符,仅限小写字母/数字/连字符,无 XML 标签,无保留字("anthropic"、"claude")
    • description:最多 1024 个字符,非空,无 XML 标签

有关完整的请求/响应架构,请参阅创建技能 API 参考。

列出技能

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

有关分页和筛选选项,请参阅列出技能 API 参考。

检索技能

获取有关特定技能的详细信息:

删除技能

要删除技能,必须先删除其所有版本:

尝试删除具有现有版本的技能会返回 400 错误。

版本控制

技能支持版本控制以安全地管理更新:

Anthropic 管理的技能:

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

自定义技能:

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

有关完整详情,请参阅创建技能版本 API 参考。


技能如何被加载

当你在容器中指定技能时:

  1. 元数据发现: Claude 在系统提示中看到每个技能的元数据(名称、描述)
  2. 文件加载: 技能文件被复制到容器中的 /skills/{directory}/
  3. 自动使用: Claude 在与你的请求相关时自动加载和使用技能
  4. 组合: 多个技能组合在一起以实现复杂工作流

渐进式披露架构确保高效的上下文使用:Claude 仅在需要时加载完整的技能说明。


用例

组织技能

品牌与沟通

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

项目管理

  • 使用公司特定格式(OKR、决策日志)结构化笔记
  • 生成遵循团队约定的任务
  • 创建标准化的会议记录和状态更新

业务运营

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

个人技能

内容创建

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

数据分析

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

开发与自动化

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

示例:财务建模

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


限制和约束

请求限制

  • 每个请求的最大 Skills 数量: 8
  • 最大 Skill 上传大小: 30 MB(所有文件合计)
  • YAML 前置元数据要求:
    • name:最多 64 个字符,仅包含小写字母/数字/连字符,无 XML 标签,无保留字
    • description:最多 1024 个字符,非空,无 XML 标签

环境约束

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

  • 无网络访问 - 无法进行外部 API 调用
  • 无运行时包安装 - 仅可用预安装的包
  • 隔离环境 - 每个请求都获得一个新的容器

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


最佳实践

何时使用多个 Skills

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

良好用例:

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

避免:

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

版本管理策略

对于生产环境:

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

对于开发环境:

# 在活跃开发中使用最新版本
container = {
    "skills": [
        {
            "type": "custom",
            "skill_id": "skill_01AbCdEfGhIjKlMnOpQrStUv",
            "version": "latest",  # 始终获取最新版本
        }
    ]
}

提示缓存注意事项

使用提示缓存时,请注意在容器中更改 Skills 列表会破坏缓存:

为了获得最佳缓存性能,请在请求中保持 Skills 列表的一致性。

错误处理

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


数据保留

Agent Skills 不受 ZDR 安排的覆盖。Skill 定义和执行数据根据 Anthropic 的标准数据保留政策进行保留。

有关所有功能的 ZDR 资格,请参阅 API 和数据保留。

后续步骤

API 参考

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

编写指南

编写有效 Skills 的最佳实践

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

response = client.beta.messages.create(
    model="claude-opus-4-7",
    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()
file_id = "file_abc123"
# 获取文件元数据
file_info = client.beta.files.retrieve_metadata(
    file_id=file_id, betas=["files-api-2025-04-14"]
)
print(f"Filename: {file_info.filename}, Size: {file_info.size_bytes} bytes")

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

# 删除文件
client.beta.files.delete(file_id=file_id, betas=["files-api-2025-04-14"])
# 第一个请求创建容器
response1 = client.beta.messages.create(
    model="claude-opus-4-7",
    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-7",
    max_tokens=4096,
    betas=["code-execution-2025-08-25", "skills-2025-10-02"],
    container={
        "id": response1.container.id,  # 重用容器
        "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-7",
    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-7",
        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-7",
    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
# 列出所有技能
ant beta:skills list

# 仅列出自定义技能
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 --format yaml \
  | tr -d '"' \
  | while read -r VERSION; do
      ant beta:skills:versions delete \
        --skill-id skill_01AbCdEfGhIjKlMnOpQrStUv \
        --version "$VERSION" >/dev/null
    done

# 步骤 2:删除技能
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 --format yaml)

# 使用特定版本
ant beta:messages create \
  --beta code-execution-2025-08-25 \
  --beta skills-2025-10-02 <<YAML
model: claude-opus-4-7
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-7
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"),
    betas=["skills-2025-10-02"],
)

# 与 Excel 一起使用以创建财务模型
response = client.beta.messages.create(
    model="claude-opus-4-7",
    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"}],
)
# 第一个请求创建缓存
response1 = client.beta.messages.create(
    model="claude-opus-4-7",
    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"}],
)

# 添加/删除 Skills 会破坏缓存
response2 = client.beta.messages.create(
    model="claude-opus-4-7",
    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",
            },  # 缓存未命中
        ]
    },
    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-7",
        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}")
        # Handle skill-specific errors
    else:
        raise
代码执行工具

了解代码执行环境