Skills 是指令、脚本和资源的文件夹,Claude 动态加载以提高在专业任务上的表现。每个 Skill 的核心是 SKILL.md 文件——一个打包的指令集,你上传一次然后附加到任何 messages.create 调用。你正在教 Claude 你 如何做某事:你的状态报告格式、你的审查清单、你的发布说明。Claude 读取 Skill、遵循流程并以你的形状产生输出。
值得明确区别,因为两者解决不同的问题:
一个简单的记忆方式:工具是关于 Claude 能 做什么,而 Skills 是关于你希望事情 如何做。
还有一件值得知道的事:Skills 不会在启动时完全加载到上下文中。只有名称和描述首先加载。当你的 agent 决定一个 Skill 相关时,它然后将完整的 Skill 加载到上下文中。这使你的上下文保持精简,即使有许多 Skills 可用。
Skills 上传一次到你的工作区,然后按 ID 引用。你可以直接在 Claude 平台上上传,也可以编程方式:
skill = client.skills.create(
display_name="Status Report Generator",
files=files_from_dir("status-report-skill"), # 包含 SKILL.md 的文件夹
)
print(skill.id) # 在未来的请求中引用此 ID
在这个例子中,我想要一个 状态报告生成器。所有关于什么构成好的状态报告的规则——章节、语气、如何总结、如何处理阻碍因素——都存在于预先打包的 Skill 中。活动日志本身只是请求时传递的字符串。
Skills 通过容器配置附加到请求——容器内的 skills 数组,其中每个条目命名一个 skill_id 和 version。这是状态报告生成器的完整调用:
response = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
container={
"skills": [
{
"type": "custom",
"skill_id": skill.id,
"version": "latest",
}
]
},
tools=[
{
"type": "code_execution_20250825",
"name": "code_execution",
}
],
messages=[
{
"role": "user",
"content": f"Generate the daily status report from this activity log:\n\n{activity_log}",
}
],
)
值得指出几点:
client.messages.create,没有 beta 头。Skills 在 Claude API 上已正式发布,因此 不再需要;仍然发送它的请求继续正常工作。登录 参与讨论
skills-2025-10-02container.skills 是 Skill 附加的地方。它是一个 列表,因此你可以将多个 Skills 分层到一个调用中。输出是按照 Skill 说明格式化的状态报告。章节、语气、阻碍因素处理——全部来自你上传的 SKILL.md 文件。用户提示是一行;流程存在于 Skill 中。
在生产应用中,这是团队在整个功能中标准化输出的方式。使用这个每日状态报告端点,每个 PM 获得相同的结构、相同的语气、相同的章节,按相同的顺序——没有人需要将模板复制粘贴到提示中。
SKILL.md 文件(加上任何脚本和资源)教 Claude 你希望事情如何完成。client.skills.create 上传一次,然后在任何 messages.create 调用上使用 container.skills 附加 — 它是一个列表,因此你可以分层多个 Skills。