当前位置: 首页 > news >正文

解锁AI的“职业技能树“:Claude Skills深度技术解析——从原理到实战的完全指南

当AI学会"装载技能包",LLM应用开发的范式革命已经到来

引言:一个让AI"升级打怪"的系统

想象一下,如果你能给Claude装上"技能芯片",让它瞬间掌握特定领域的专业知识和工作流程,会是什么样的体验?这不是科幻小说,而是Anthropic刚刚开源的Agent Skills项目带来的现实。

作为一名技术从业者,当我第一次看到这个项目时,脑海中浮现的场景是:传统的提示词工程就像教AI"临时抱佛脚",而Skills系统则是给AI建立了一套"职业技能树"——可以随时装载、系统化、可复用的专业能力模块。这种范式转变的意义,不亚于软件工程从面向过程到面向对象的飞跃。

在本文中,我们将深入剖析Claude Skills的技术架构、设计哲学、实战应用,以及它与MCP(Model Context Protocol)的本质差异。无论你是AI应用开发者、产品经理,还是对AI技术感兴趣的技术爱好者,这篇文章都将为你打开一扇通往"AI能力工程化"的大门。


第一章:技术本质——Skills到底是什么?

1.1 从"临时工"到"专家":Skills的核心理念

在传统的LLM交互模式中,我们通过提示词(Prompt)告诉AI该做什么。这就像每次都要给一个临时工详细讲解工作流程——效率低、容易出错、难以复用。而Skills系统的出现,彻底改变了这个游戏规则。

Skills的定义: 它是一个包含指令、脚本和资源的文件夹结构,AI可以动态加载这些内容来提升特定任务的执行能力。用技术术语来说,Skills是Agent的可插拔知识与流程模块

让我打个更通俗的比方:

  • 传统Prompt = 临时口头指导:"帮我做一个PPT,要简洁大方..."

  • Skills系统 = 专业培训手册:"按照《企业级PPT制作技能包》操作,包含模板、字体、配色方案和分步流程..."

1.2 技术架构:优雅的三层设计

Skills采用了一个精妙的"渐进式加载"(Progressive Disclosure)架构,这是它高效运作的关键:

┌─────────────────────────────────────────────────┐
│ Level 1: 元数据层 (Metadata)                     │
│ • name + description (~100 words)               │
│ • 始终加载到上下文                                │
│ • 决定何时触发技能                                │
└─────────────────────────────────────────────────┘↓ (触发时加载)
┌─────────────────────────────────────────────────┐
│ Level 2: 核心指令层 (SKILL.md)                   │
│ • 详细工作流程和指南 (<5k words)                  │
│ • 仅在技能激活时加载                              │
└─────────────────────────────────────────────────┘↓ (按需加载)
┌─────────────────────────────────────────────────┐
│ Level 3: 资源层 (Bundled Resources)              │
│ • scripts/   - 可执行脚本                        │
│ • references/ - 参考文档                         │
│ • assets/    - 模板和资源文件                     │
│ • 无限制大小(脚本可不加载直接执行)                │
└─────────────────────────────────────────────────┘

这种设计有三个天才之处:

  1. 上下文高效性: 只在需要时加载详细内容,避免上下文窗口污染

  2. 模块化: 每个技能独立封装,互不干扰

  3. 扩展性: scripts可以直接执行而无需加载到上下文,突破token限制

1.3 文件结构剖析:一个Skill的解剖学

让我们通过一个真实案例来理解Skill的文件结构。以docx技能为例:

docx/
├── SKILL.md              # 核心入口文件(必需)
│   ├── YAML前置元数据
│   │   ├── name: docx
│   │   ├── description: "文档创建、编辑和分析..."
│   │   └── license: "..."
│   └── Markdown指令内容
│       ├── 工作流决策树
│       ├── 分步骤操作指南
│       └── 最佳实践
├── scripts/              # 可执行脚本
│   ├── unpack.py        # 解压docx文件
│   ├── pack.py          # 打包docx文件
│   └── ...
├── references/           # 参考文档
│   ├── ooxml.md         # OOXML规范详解
│   ├── docx-js.md       # docx-js库文档
│   └── ...
└── ooxml/               # 相关资源└── [XSD schemas]

关键技术细节:

YAML前置元数据(必需)
---
name: docx  # 技能唯一标识符(小写,连字符分隔)
description: "综合文档创建、编辑和分析工具,支持追踪更改、
评论、格式保留和文本提取。当需要处理专业文档(.docx文件)时使用"
license: "Proprietary. LICENSE.txt has complete terms"
allowed-tools: []  # 预批准的工具列表(可选)
---
  • name:必须与文件夹名称完全匹配

  • description至关重要!这决定了Claude何时激活该技能,务必详细描述适用场景

  • allowed-tools:在Claude Code中可以预批准工具运行,减少交互确认

Markdown指令内容:工作流的精确编码

docx技能为例,它的指令组织极为精妙:

## 工作流决策树### 读取/分析内容
使用"文本提取"或"原始XML访问"部分### 创建新文档
使用"创建新Word文档"工作流### 编辑现有文档
- **自己的文档 + 简单更改**使用"基础OOXML编辑"工作流- **他人的文档**使用**"红线标记工作流"**(推荐默认)- **法律、学术、商业或政府文档**使用**"红线标记工作流"**(必需)

这种决策树式的组织方式,让AI能够根据不同场景自动选择最合适的工作流,而不是盲目执行。

1.4 渐进式披露:上下文效率的艺术

Skills的三层加载机制背后,隐藏着深刻的工程哲学——认知负载管理

想象一下传统方式:你给AI一个超长提示词,包含所有可能需要的信息。结果:

  • 大量无关信息占用上下文窗口

  • 真正重要的信息被淹没

  • token成本飙升

  • 推理速度下降

Skills的渐进式披露解决方案:

阶段加载内容大小触发条件
待命name + description~100词始终加载
激活SKILL.md全文<5k词用户请求匹配
执行特定reference/script无限制AI主动判断需要

这种设计让AI能够像人类专家一样工作:

  1. 知道自己会什么(元数据)

  2. 需要时调出详细知识(SKILL.md)

  3. 执行时查阅具体资料(references)或使用工具(scripts)


第二章:资源分类——Scripts、References与Assets的黄金三角

一个优秀的Skill,其强大之处往往不在SKILL.md本身,而在于精心组织的bundled resources。让我们深入剖析这三类资源的设计哲学和实战技巧。

2.1 Scripts:确定性执行的守护者

设计初衷: 有些任务需要确定性可复现性,每次都让AI重新生成代码既不可靠又浪费token。Scripts就是为此而生。

典型应用场景

场景1:PDF旋转(docx技能中的示例)

# scripts/rotate_pdf.py
import PyPDF2
import sysdef rotate_pdf(input_path, output_path, rotation):"""确定性地旋转PDF,无需AI每次重写逻辑"""with open(input_path, 'rb') as file:reader = PyPDF2.PdfReader(file)writer = PyPDF2.PdfWriter()for page in reader.pages:page.rotate(rotation)writer.add_page(page)with open(output_path, 'wb') as output_file:writer.write(output_file)if __name__ == "__main__":rotate_pdf(sys.argv[1], sys.argv[2], int(sys.argv[3]))

为什么用Script而不是让AI生成?

  • 确定性: 每次执行结果完全一致

  • 效率: 无需消耗token重新生成代码

  • 可靠性: 经过测试的代码,不会出现AI生成的随机错误

  • 版本控制: 可以像普通代码一样管理和迭代

Scripts的最佳实践
  1. 单一职责原则 每个script只做一件事,但做到极致。如mcp-builder中的初始化脚本:

    scripts/init_skill.py <skill-name> --path <output-directory>
    

    只负责创建标准Skill目录结构,不掺杂其他逻辑。

  2. 完善的命令行接口

    # 良好的CLI设计示例
    parser = argparse.ArgumentParser(description='Rotate PDF pages')
    parser.add_argument('input', help='Input PDF file')
    parser.add_argument('output', help='Output PDF file')
    parser.add_argument('--rotation', type=int, choices=[90, 180, 270],default=90, help='Rotation angle')
    
  3. 优雅的错误处理

    try:rotate_pdf(args.input, args.output, args.rotation)
    except FileNotFoundError:print(f"错误:找不到文件 {args.input}", file=sys.stderr)sys.exit(1)
    except Exception as e:print(f"处理失败:{str(e)}", file=sys.stderr)sys.exit(1)
    

2.2 References:按需加载的知识库

References是技能系统中最容易被低估的部分,但它承载着核心的领域知识

设计哲学:SKILL.md应该"瘦"

错误做法: 把所有细节都塞进SKILL.md

<!-- 这会导致SKILL.md膨胀到数万字 -->
## OOXML完整规范
(10000行的XML Schema详解...)

正确做法: SKILL.md只包含核心流程,细节放入references

<!-- SKILL.md保持精简 -->
## 编辑文档的详细语法需要时,阅读 `references/ooxml.md` 获取完整的Document Library API
和XML模式详解(约600行)。
References的实战案例分析

案例1:MCP服务器开发指南

mcp-builder/reference/目录结构:

reference/
├── mcp_best_practices.md     # 通用最佳实践
├── python_mcp_server.md      # Python特定指南
├── node_mcp_server.md        # Node/TS特定指南
└── evaluation.md             # 评估测试指南

技能指令中的精妙引用:

#### 1.4 研究框架文档(Phase 1)**加载以下参考文件:**
- [📋 MCP最佳实践](./reference/mcp_best_practices.md)**对于Python实现,同时加载:**
- [🐍 Python实现指南](./reference/python_mcp_server.md)**对于Node/TypeScript实现,同时加载:**
- [⚡ TypeScript实现指南](./reference/node_mcp_server.md)

这种设计的天才之处:

  • AI只在需要时加载特定语言的指南

  • 避免无关语言的指南污染上下文

  • 支持多种技术栈而不增加SKILL.md复杂度

案例2:内部沟通模板(internal-comms技能)

internal-comms/
└── examples/├── 3p-updates.md          # 进度/计划/问题更新├── company-newsletter.md  # 公司新闻稿├── faq-answers.md         # 常见问题回答└── general-comms.md       # 通用沟通指南

SKILL.md中的智能分发逻辑:

## 如何使用本技能1. **识别沟通类型**
2. **加载对应指南文件**:- 团队更新 → `examples/3p-updates.md`- 公司新闻 → `examples/company-newsletter.md`- FAQ → `examples/faq-answers.md`- 其他 → `examples/general-comms.md`
3. **遵循该文件中的格式和语气指南**

2.3 Assets:输出材料的弹药库

Assets与Scripts、References最大的区别:它们不会被加载到上下文,而是直接用于输出生成

Assets的典型用途

1. 模板文件(artifacts-builder)

artifacts-builder/
└── scripts/└── shadcn-components.tar.gz  # 预打包的React组件

当用户请求创建复杂artifact时,AI可以:

tar -xzf scripts/shadcn-components.tar.gz
# 解压40+个shadcn/ui组件,直接使用而无需重新生成

2. 字体资源(canvas-design)

canvas-design/
└── canvas-fonts/├── GeistMono-Regular.ttf├── IBMPlexSerif-Bold.ttf├── CrimsonPro-Italic.ttf└── ... (共70+字体文件)

设计海报时,AI可以直接引用这些专业字体,而不是局限于系统默认字体。

3. 样板代码(webapp-testing)

# examples/element_discovery.py
from playwright.sync_api import sync_playwright# 这是一个完整的可执行示例
# AI可以复制并修改,而不是从零开始写
with sync_playwright() as p:browser = p.chromium.launch(headless=True)page = browser.new_page()# ... 完整的测试逻辑
Assets管理的黄金准则
  1. 命名规范: 清晰表达用途

    • react-dashboard-template/

    • template1/

  2. 版本控制: 对于可能更新的assets

    assets/
    ├── logo-v2.png      # 明确版本
    ├── logo-current.png # 软链接指向当前版本
    
  3. 文档化: 在SKILL.md中说明使用方法

    ## 字体使用指南`canvas-fonts/`目录包含70+款专业字体。选择时考虑:
    - Serif字体:正式、传统感(CrimsonPro, LibreBaskerville)
    - Sans-serif:现代、简洁(GeistMono, Outfit)
    - Mono:技术感(JetBrainsMono, IBMPlexMono)
    

第三章:核心技能深度剖析——从Document到MCP Builder

让我们通过几个标志性的技能实现,来理解Skills系统如何处理复杂的现实场景。

3.1 Document Skills:处理二进制文件的艺术

Document skills(docx、pdf、pptx、xlsx)是整个项目中最复杂、最精妙的部分,因为它们要解决AI的一个根本性限制——处理二进制文件格式

技术挑战:OOXML的复杂性

现代Office文档(.docx/.pptx/.xlsx)本质上是ZIP压缩的XML文件集合:

document.docx (ZIP压缩包)
├── [Content_Types].xml       # 内容类型定义
├── _rels/                    # 关系映射
│   └── .rels
├── word/
│   ├── document.xml         # 主文档内容
│   ├── styles.xml           # 样式定义
│   ├── comments.xml         # 评论
│   ├── _rels/
│   │   └── document.xml.rels
│   └── media/               # 嵌入的图片等
│       ├── image1.png
│       └── ...
└── docProps/                # 文档属性├── core.xml└── app.xml

直接让AI操作这些文件有三个问题:

  1. 格式理解成本高: XML Schema复杂,结构嵌套深

  2. 容易破坏完整性: 一个标签错误可能导致文件损坏

  3. token消耗巨大: 完整的OOXML规范有数千页

解决方案:分层抽象 + 脚本助手

Layer 1: 高层操作(对用户)

用户请求:"帮我修改这份合同,把'30天'改成'60天'"
↓
触发docx技能
↓
AI选择:编辑现有文档 → 红线标记工作流

Layer 2: 工作流决策(SKILL.md)

## 红线标记工作流1. **获取markdown表示**```bashpandoc --track-changes=all contract.docx -o current.md
  1. 识别并分组更改 使用Section/heading编号定位(不是行号!)

  2. 读取文档 [🔗必读ooxml.md]

    python ooxml/scripts/unpack.py contract.docx ./unpacked
    
  3. 实现更改 a. 用grep在word/document.xml中定位文本 b. 创建Python脚本,使用Document库实现修改 c. 运行脚本

  4. 打包文档

    python ooxml/scripts/pack.py ./unpacked reviewed-contract.docx
    
**Layer 3: 技术实现(references + scripts)**`references/ooxml.md` 提供了Document库的详细API:
```python
from ooxml.document import Document# 加载文档
doc = Document('unpacked/word/document.xml')# 使用高级方法查找并修改
for node in doc.find_nodes_with_text("30天"):doc.tracked_replace(node,old_text="30",new_text="60",author="Claude",rsid="00AB12CD"  # 从unpack.py输出获得)# 保存修改
doc.save()

scripts/unpack.pyscripts/pack.py 处理ZIP操作:

# unpack.py核心逻辑
def unpack_docx(docx_path, output_dir):"""解压docx并提供有用的元数据"""with zipfile.ZipFile(docx_path, 'r') as zip_ref:zip_ref.extractall(output_dir)# 分析现有RSID,建议新的suggested_rsid = generate_unique_rsid(output_dir)print(f"建议使用RSID: {suggested_rsid}")print("在tracked_replace中使用此RSID以标记你的更改")
深度洞察:为什么是这样的分层设计?

这个设计体现了关注点分离(Separation of Concerns)的极致:

层级关注内容谁使用
用户层"我要改合同"终端用户
流程层(SKILL.md)工作流步骤、何时用什么工具AI决策引擎
技术层(references)Document库API、XML结构AI实现引擎
执行层(scripts)确定性操作(ZIP解压)直接执行

为什么不能简化?

  • 去掉scripts → AI每次重写ZIP操作,容易出错

  • 去掉references → SKILL.md膨胀到数万字,上下文爆炸

  • 去掉工作流决策树 → AI不知道何时用红线标记vs直接编辑

3.2 MCP Builder:元技能的奇妙实现

mcp-builder是整个项目中最"元"的技能——它是一个教AI如何创建其他集成系统的技能

技术背景:MCP是什么?

MCP(Model Context Protocol)是一个让LLM连接外部服务的协议。通俗理解:

传统方式:
用户 → AI → "我不能访问你的Notion数据库"MCP方式:
用户 → AI → MCP Server (Notion) → Notion API↓返回数据给AI进行处理

MCP Server就像给AI装了一个"API转接器",让它能调用外部服务。

mcp-builder的任务:教AI写高质量的MCP Server

挑战: 写MCP Server需要懂:

  • MCP协议规范

  • RESTful API设计

  • 错误处理和验证

  • 异步编程

  • 安全认证

  • ...这些加起来可能是数万字的知识

mcp-builder的解决方案:四阶段方法论

## 高层工作流### Phase 1: 深入研究与规划
1.1 理解Agent-Centric设计原则"不要简单包装API端点——构建工作流工具"1.3 学习MCP协议文档使用WebFetch加载:https://modelcontextprotocol.io/llms-full.txt1.4 学习框架文档Python → 加载python_mcp_server.mdNode → 加载node_mcp_server.md1.5 穷尽研究API文档目标服务的所有端点、认证、限速...1.6 创建实现计划- 工具选择(哪些端点最有价值)- 共享工具设计- 输入/输出设计- 错误处理策略### Phase 2: 实现
2.1 设置项目结构
2.2 实现核心基础设施(API助手、错误处理)
2.3 系统化实现工具
2.4 遵循语言特定最佳实践### Phase 3: 审查与精炼
3.1 代码质量审查(DRY、类型安全...)
3.2 测试与构建
3.3 使用质量检查清单### Phase 4: 创建评估
4.1 理解评估目的
4.2 创建10个评估问题
4.3 验证答案

这个流程的天才之处:

  1. 先研究后实现

    ❌ 错误:立即开始写代码
    ✅ 正确:Phase 1花大量时间研究API、阅读文档、规划设计
    
  2. 按需加载专业知识

    如果是Python实现:
    - 加载 python_mcp_server.md(Python特定模式)
    - 忽略 node_mcp_server.md(避免混淆)如果是TypeScript实现:
    - 加载 node_mcp_server.md
    - 忽略 python_mcp_server.md
    
  3. 内置质量保证

    ### Quality Checklist(来自references)#### 工具设计
    - [ ] 所有工具名称包含服务前缀(slack_send_message)
    - [ ] 支持JSON和Markdown响应格式
    - [ ] 实现分页(limit, offset, has_more)
    - [ ] 字符限制和截断(CHARACTER_LIMIT = 25000)#### 错误处理
    - [ ] 所有API调用有try/except
    - [ ] 错误消息是LLM友好的自然语言
    - [ ] 建议下一步操作#### 类型安全
    - [ ] Python: 完整类型提示 + Pydantic v2
    - [ ] TypeScript: strict mode, 无any类型
    
实战示例:创建Slack MCP Server的流程

让我们模拟AI使用mcp-builder技能的完整过程:

Step 1: 触发技能

用户:"帮我创建一个Slack MCP Server"
↓
Claude加载mcp-builder技能

Step 2: Phase 1 - 研究

AI内心独白:
"我需要先理解要做什么..."1. 加载 reference/mcp_best_practices.md学到:工具命名规范、响应格式、分页模式...2. 使用WebFetch加载MCP协议文档学到:MCP的JSON-RPC结构、工具注册方法...3. 选择Python → 加载 reference/python_mcp_server.md学到:FastMCP框架使用、Pydantic模型定义...4. 网络搜索"Slack API documentation"学到:可用的API端点- conversations.list (获取频道列表)- chat.postMessage (发送消息)- users.list (获取用户)- ...5. 创建实现计划:核心工具:- slack_list_channels (limit, types, exclude_archived)- slack_send_message (channel, text, thread_ts?)- slack_search_messages (query, sort, count)共享工具:- format_response(data, format='markdown')- paginate_results(items, limit, offset)- handle_api_error(error)

Step 3: Phase 2 - 实现

# AI生成的代码框架
from mcp import FastMCP
from pydantic import BaseModel, Field
import httpxmcp = FastMCP("slack_mcp")
CHARACTER_LIMIT = 25000# 共享工具
async def call_slack_api(endpoint: str, params: dict):"""统一的Slack API调用"""# ... 实现 ...def format_channels_markdown(channels: list) -> str:"""格式化频道列表为Markdown"""# ... 实现 ...# 工具定义
class ListChannelsInput(BaseModel):limit: int = Field(default=20, ge=1, le=200,description="返回的频道数量")types: str = Field(default="public_channel",description="频道类型: public_channel, private_channel")response_format: str = Field(default="markdown",description="响应格式: json或markdown")@mcp.tool(annotations={"readOnlyHint": True,"openWorldHint": True}
)
async def slack_list_channels(input: ListChannelsInput) -> str:"""列出工作区中的Slack频道。返回频道名称、ID、成员数等信息。使用limit参数控制结果数量。对于大型工作区,建议使用小的limit值(20-50)以避免超时。"""# ... 实现 ...

Step 4: Phase 3 - 审查

AI自我检查:
✅ 工具命名:slack_list_channels(包含服务前缀)
✅ 响应格式:支持JSON和Markdown
✅ 分页:实现了limit和offset
✅ 字符限制:检查响应长度,截断时提示
✅ 错误处理:所有API调用有try/except
✅ 类型安全:完整的类型提示 + Pydantic模型
✅ 文档:详细的docstring和参数说明

Step 5: Phase 4 - 评估

<!-- AI生成评估文件 -->
<evaluation><qa_pair><question>在我们的工作区中,有多少个公开频道的名称包含"engineering"?(需要:调用slack_list_channels,搜索名称,计数)</question><answer>7</answer></qa_pair><qa_pair><question>#general频道中最近10条消息的发送者中,哪个用户发送的最多?(需要:获取频道ID → 搜索消息 → 统计用户 → 找出最多的)</question><answer>U01ABC23DEF</answer></qa_pair><!-- ... 8 more complex questions ... -->
</evaluation>

3.3 Creative Skills:AI艺术创作的系统化

创意类技能(canvas-design、slack-gif-creator、algorithmic-art)展示了Skills系统的另一面——**如何系统化"创造力"**。

canvas-design:设计哲学的具象化

这个技能的独特之处在于它的两阶段创作流程

阶段1:设计哲学创建

用户:"给我设计一张关于量子计算的海报"↓ AI创建设计哲学输出:design_philosophy.md
---
# "量子几何" (Quantum Geometry)【哲学描述4-6段落】
这一运动将量子力学的不确定性原理转译为视觉语言。
通过重叠的半透明几何形状表达量子叠加态...
色彩选择遵循光谱衍射的渐变逻辑...
排版极简,文字如同观察者效应般谨慎出现...
每个元素的放置都经过无数次迭代,体现顶尖工艺...

阶段2:哲学的视觉表达

# AI根据哲学生成代码
from PIL import Image, ImageDraw, ImageFont
import numpy as np# 读取哲学中的关键元素
# - "重叠的半透明几何形状" → 使用alpha通道
# - "光谱衍射渐变" → HSV色彩空间
# - "排版极简" → 小号无衬线字体,大量留白canvas = Image.new('RGB', (2400, 3200), color=(245, 245, 250))
draw = ImageDraw.Draw(canvas, 'RGBA')# 生成量子态表示的几何图形
for i in range(15):# 重叠圆形,模拟波函数x = np.random.randint(400, 2000)y = np.random.randint(600, 2600)r = np.random.randint(200, 600)# 光谱色彩hue = (i / 15) * 360color = hsv_to_rgb(hue, 0.6, 0.8)# 半透明draw.ellipse([x-r, y-r, x+r, y+r],fill=(*color, 80))  # alpha=80# 极简排版
font = ImageFont.truetype('canvas-fonts/GeistMono-Regular.ttf', 48)
draw.text((1200, 2900), "QUANTUM", font=font,fill=(40, 40, 50), anchor='mm')canvas.save('quantum_poster.png')

为什么要分两阶段?

这是一个深刻的设计决策:

一步生成两阶段生成
容易产生"AI味"的作品强制AI进行深度思考
随机性高,不可复现哲学可复用,变体可生成
难以迭代修改可以只改哲学重新生成
缺乏内在一致性所有元素都源于统一哲学

用技术术语说,这是抽象和实现的分离——哲学是抽象层,代码是实现层。

slack-gif-creator:组合式动画系统

这个技能展示了如何用可组合的原语(Composable Primitives)构建复杂系统。

设计模式:动画原语库

# templates/提供的原语
from templates.shake import create_shake_animation
from templates.bounce import create_bounce_animation
from templates.spin import create_spin_animation
from templates.pulse import create_pulse_animation
from templates.move import create_move_animation
# ... 还有zoom, fade, explode, wiggle, slide, flip, morph# 每个原语都是独立的、可组合的

实战:创建"惊吓"GIF

# 用户:"做一个emoji被车吓到的GIF"# AI的组合策略
builder = GIFBuilder(480, 480, fps=20)# 阶段1:车接近(使用move原语)
for i in range(20):frame = create_blank_frame()t = i / 19# 车从左侧移动car_x = interpolate(50, 300, t, easing='ease_in')draw_emoji(frame, '🚗', (car_x, 300), size=60)# emoji静止draw_emoji(frame, '😰', (350, 200), size=70)builder.add_frame(frame)# 阶段2:惊吓反应(使用shake原语)
shake_frames = create_shake_animation(object_data={'emoji': '😰', 'size': 70},num_frames=15,shake_intensity=15,direction='both'
)for frame in shake_frames:# 车已经到达draw_emoji(frame, '🚗', (300, 300), size=60)builder.add_frame(frame)# 优化并保存
builder.save('scared.gif', num_colors=128)# 验证Slack限制
from core.validators import check_slack_size
passes, info = check_slack_size('scared.gif', is_emoji=False)
if not passes:print(f"文件过大({info['size_mb']:.2f}MB),需要优化")

组合的力量:

相比于写一个"惊吓动画"脚本,原语系统的优势:

  1. 可复用性: shake原语可用于地震、愤怒、兴奋等任何需要震动的场景

  2. 可测试性: 每个原语独立测试,组合时更可靠

  3. 创造力: AI可以自由组合,创造无限变体
    # 例如:弹跳 + 旋转 + 爆炸
    bounce_frames = create_bounce_animation(...)
    spin_frames = create_spin_animation(...)
    explode_frames = create_explode_animation(...)
    # 拼接成复杂动画序列
    

第四章:Skills vs MCP——两种范式的本质差异

现在我们已经深入理解了Skills,是时候解答一个关键问题:Skills和MCP有什么区别?为什么需要两个系统?

4.1 定位差异:知识 vs 能力

用一个类比来理解:

SkillsMCP
类比专业培训手册工具箱
核心价值传授"怎么做"的知识提供"做什么"的能力
本质程序性知识(Procedural Knowledge)工具接口(Tool Interface)

Skills的典型场景:

用户:"帮我审查这份法律合同,使用红线标记修改"Skills提供:
- 法律文档审查的最佳实践
- 红线标记的标准流程
- OOXML编辑的技术知识
- 分步骤的决策树结果:AI知道如何专业地审查合同

MCP的典型场景:

用户:"查看我Notion数据库中所有待办事项"MCP提供:
- notion_get_databases() 工具
- notion_query_database() 工具
- notion_get_page() 工具结果:AI能够调用Notion API获取数据

4.2 技术架构差异

Skills架构:静态资源 + 动态加载

┌─────────────────────────────────┐
│   Claude AI                     │
│   ┌───────────────────────┐     │
│   │  加载的Skills          │     │
│   │  - SKILL.md指令       │     │
│   │  - References文档     │     │
│   │  - Scripts可执行      │     │
│   └───────────────────────┘     │
│          ↓                      │
│   【推理 + 执行脚本】            │
└─────────────────────────────────┘

MCP架构:客户端-服务器模式

┌──────────────┐      JSON-RPC      ┌──────────────┐
│  Claude AI   │ ←─────────────────→ │ MCP Server   │
│  (Client)    │  tools/list        │  (Notion)    │
│              │  tools/call        │              │
└──────────────┘                     └──────────────┘↓┌──────────────┐│  Notion API  │└──────────────┘

4.3 交互模式差异

Skills:上下文内推理

# Skills方式:AI在自己的上下文中执行
def review_contract(contract_path):# 1. AI读取SKILL.md,学习流程workflow = load_skill("docx")# 2. AI执行脚本(仍在自己的环境中)run_script("ooxml/scripts/unpack.py", contract_path)# 3. AI生成Python代码修改XMLgenerate_and_run_modification_script()# 4. AI执行打包脚本run_script("ooxml/scripts/pack.py", output_path)

MCP:工具调用

# MCP方式:AI通过协议调用外部服务
async def get_notion_tasks():# 1. AI发现可用工具tools = await mcp_client.list_tools()# → [notion_query_database, notion_get_page, ...]# 2. AI决定调用哪个工具result = await mcp_client.call_tool("notion_query_database",{"database_id": "abc123","filter": {"property": "Status", "equals": "Todo"}})# 3. MCP Server执行真实API调用# → Notion API# → 返回结果给AI

4.4 使用场景对比

场景维度Skills更适合MCP更适合
知识密集✅ 复杂工作流、领域知识❌ 简单API调用
需要外部服务❌ 只能调用本地脚本✅ 连接任何外部API
需要秘密/Token⚠️ 可以但不安全✅ Server端安全存储
实时数据❌ 无法访问实时数据✅ 每次调用获取最新数据
离线使用✅ 完全离线可用❌ 需要网络连接
自定义工作流✅ 完全灵活⚠️ 受限于Server提供的工具

4.5 协同使用:1+1>2

最强大的场景:Skills + MCP结合

想象一个"智能项目管理助手":

## Skill: project-manager### 工作流
当用户要求"创建sprint计划":1. 使用MCP连接Jira- 调用jira_get_issues获取backlog- 调用jira_get_sprint_info获取当前sprint2. 应用项目管理知识(Skill)- 评估任务优先级(RICE评分法)- 计算团队速度- 平衡工作负载3. 使用MCP创建计划- 调用jira_create_sprint创建新sprint- 调用jira_move_issue_to_sprint分配任务- 调用slack_send_message通知团队4. 生成文档(Skill)- 创建sprint规划文档(使用docx skill)- 生成任务甘特图(使用canvas-design skill)

这个场景中:

  • MCP 提供与Jira/Slack交互的能力

  • project-manager Skill 提供项目管理的专业知识

  • docx/canvas-design Skills 提供文档生成能力

4.6 深度洞察:为什么不能互相替代?

错误观点1:"MCP可以替代Skills"

❌ 用MCP实现文档编辑:
- 需要为每个编辑操作创建一个工具→ docx_insert_text→ docx_delete_text→ docx_change_font→ ... (可能有数百个细粒度工具)
- 工作流知识无法编码(何时用红线标记?如何决策?)
- 每次调用都有网络开销✅ 用Skills实现文档编辑:
- 一个SKILL.md编码完整工作流
- 灵活的决策树(根据文档类型选择方法)
- 本地执行,无网络开销

错误观点2:"Skills可以替代MCP"

❌ 用Skills连接Slack:
- Scripts无法安全存储API token
- 无法处理实时数据(Skills是静态的)
- 每个用户需要自己配置认证✅ 用MCP连接Slack:
- Server统一管理认证
- 实时API调用
- 支持OAuth等复杂认证流程

本质差异:

  • Skills = 内化的知识(像人类学习一项技能)

  • MCP = 外部的工具(像人类使用锤子、扳手)

就像一个木匠:

  • 技能(Skills):如何设计家具、如何打磨、如何拼接

  • 工具(MCP):电锯、钻头、砂纸

两者缺一不可!


解锁AI的"职业技能树":Claude Skills深度技术解析(下篇)

接上篇

第五章:实战指南——从零创建一个Professional Skill

理论讲完了,现在让我们撸起袖子干活!我将带你完整地创建一个真实可用的Skill,体验整个开发流程。

5.1 案例需求:API Documentation Generator

场景: 你的团队需要频繁地为RESTful API生成标准化文档。每次都要:

  1. 分析API端点结构

  2. 生成OpenAPI/Swagger规范

  3. 创建Markdown文档

  4. 添加代码示例

  5. 生成Postman Collection

目标: 创建一个api-doc-generator技能,让Claude能够系统化地完成这些任务。

5.2 Phase 1: 需求分析与设计

5.2.1 识别核心能力

通过与"用户"(我们)的对话明确需求:

Q: "这个技能需要支持什么功能?"
A: "分析代码生成API文档,支持多种输出格式"Q: "有哪些具体的使用场景?"
A: 
- "扫描Flask/FastAPI项目,自动生成OpenAPI spec"
- "根据现有API响应样本,生成文档"
- "创建交互式API文档(Swagger UI)"
5.2.2 规划Skill结构

根据分析,设计文件结构:

api-doc-generator/
├── SKILL.md                    # 核心工作流
├── scripts/
│   ├── init_doc_project.py     # 初始化文档项目
│   ├── parse_flask_routes.py   # 解析Flask路由
│   ├── parse_fastapi_routes.py # 解析FastAPI路由
│   ├── generate_openapi.py     # 生成OpenAPI规范
│   └── validate_openapi.py     # 验证规范完整性
├── references/
│   ├── openapi_spec.md         # OpenAPI 3.1规范详解
│   ├── documentation_best_practices.md
│   └── code_examples.md        # 各语言的示例代码模板
└── assets/├── swagger-ui-template/    # Swagger UI模板├── postman-template.json   # Postman Collection模板└── markdown-template.md    # Markdown文档模板

5.3 Phase 2: 创建Skill内容

5.3.1 步骤1: 初始化Skill框架
# 使用skill-creator的初始化脚本
python scripts/init_skill.py api-doc-generator --path ./my-skills/# 输出:
# ✓ 创建目录: ./my-skills/api-doc-generator
# ✓ 生成SKILL.md模板
# ✓ 创建scripts/目录并添加示例
# ✓ 创建references/目录
# ✓ 创建assets/目录
5.3.2 步骤2: 编写SKILL.md
---
name: api-doc-generator
description: 系统化生成RESTful API文档,支持多种框架(Flask、FastAPI、Express)和输出格式(OpenAPI、Markdown、Postman)。适用于需要创建、更新或标准化API文档的场景。
license: Apache 2.0
allowed-tools:- read_file- write- run_terminal_cmd
---# API Documentation Generator## 概述该技能帮助系统化地生成高质量API文档。支持从代码分析、手动输入或API响应样本生成文档。## 使用场景触发该技能的典型请求:
- "分析这个Flask项目并生成API文档"
- "根据这些API端点创建OpenAPI规范"
- "生成Postman Collection用于测试"
- "创建交互式API文档"## 工作流决策树### 场景1: 从代码分析生成
**适用:** 有源代码访问权限#### 步骤
1. **识别框架**```bash# 检查项目类型grep -r "from flask import" .grep -r "from fastapi import" .grep -r "express()" .
  1. 解析路由 - 根据框架选择脚本

    • Flask → python scripts/parse_flask_routes.py

    • FastAPI → python scripts/parse_fastapi_routes.py

    • Express → 手动分析(见下文)

  2. 生成OpenAPI规范

    python scripts/generate_openapi.py \--routes routes.json \--output openapi.yaml \--title "My API" \--version "1.0.0"
    
  3. 验证完整性

    python scripts/validate_openapi.py openapi.yaml
    

    如果有警告,补充缺失信息(描述、示例等)

  4. 生成多种格式

    • Markdown文档(见"生成Markdown"节)

    • Swagger UI(见"部署交互文档"节)

    • Postman Collection(见"生成Postman"节)

场景2: 从API响应生成

适用: 无源代码但能调用API

步骤
  1. 收集端点信息 让用户提供或自己调用API收集:

    • 端点URL

    • HTTP方法

    • 请求/响应示例

    • 认证方式

  2. 手动构建OpenAPI - 读取模板

    加载 references/openapi_spec.md 了解结构
    
  3. 使用交互式方法

    # 为每个端点问:
    endpoint = "/users/{id}"
    method = "GET"# 从响应样本推断schema
    response_sample = {...}
    schema = infer_schema(response_sample)
    
  4. 生成文档 - 同场景1步骤5

场景3: 更新现有文档

适用: 已有OpenAPI规范需要更新

步骤
  1. 加载现有规范

    python scripts/validate_openapi.py existing_openapi.yaml
    
  2. 识别变更

    • 新增端点

    • 修改的参数

    • 新的响应状态码

  3. 合并更新

    # 使用generate_openapi.py的--merge模式
    python scripts/generate_openapi.py \--routes new_routes.json \--merge existing_openapi.yaml \--output updated_openapi.yaml
    

辅助工作流

生成Markdown文档

# 从OpenAPI生成人类友好的Markdown
python scripts/openapi_to_markdown.py openapi.yaml \--template assets/markdown-template.md \--output API_DOCS.md

Markdown模板支持:

  • 按标签(tags)分组端点

  • 代码示例(curl、Python、JavaScript)

  • 响应示例

  • 认证说明

部署交互式文档

# 使用Swagger UI模板
python scripts/init_doc_project.py \--swagger-ui \--spec openapi.yaml \--output ./docs# 启动本地服务器预览
cd docs && python -m http.server 8000
# 访问 http://localhost:8000

生成Postman Collection

# 转换OpenAPI为Postman格式
python scripts/generate_postman.py openapi.yaml \--output postman_collection.json \--add-examples \--add-tests

最佳实践

描述编写指南

生成的文档质量取决于描述的详细程度。遵循:

  1. 端点描述 - 说明用途和业务逻辑

    summary: "获取用户信息"
    description: |根据用户ID获取详细信息。需要认证。返回用户的基本资料、角色和最后登录时间。
    
  2. 参数描述 - 解释含义和约束

    parameters:- name: iddescription: "用户的唯一标识符(UUID v4格式)"required: trueschema:type: stringformat: uuid
    
  3. 响应说明 - 涵盖所有状态码

    responses:200:description: "成功返回用户信息"404:description: "用户不存在"401:description: "未认证或token过期"
    

代码示例模板

为每个端点生成多语言示例。加载 references/code_examples.md 查看模板。

常见语言:

  • cURL(命令行测试)

  • Python(requests库)

  • JavaScript(fetch API)

  • Java(OkHttp)

版本控制策略

API文档应与代码同步:

  1. 在CI/CD中集成

    # .github/workflows/docs.yml
    - name: Generate API docsrun: |python scripts/generate_openapi.py --autogit add openapi.yamlgit commit -m "docs: update API spec"
    
  2. 语义化版本

    • 新增端点 → minor version

    • 修改响应结构 → major version

    • 修复描述 → patch version

故障排查

常见问题

问题: parse_flask_routes.py报错"No routes found" 解决: 确保Flask应用实例可导入

# 在项目根目录确保有__init__.py
# 且Flask app为全局变量:app = Flask(__name__)

问题: 生成的OpenAPI规范验证失败 解决: 运行详细验证

python scripts/validate_openapi.py openapi.yaml --verbose
# 查看具体缺失字段,逐一补充

问题: Swagger UI无法加载 解决: 检查CORS设置和文件路径

# 确保openapi.yaml路径正确
# 检查浏览器控制台的错误信息

技术细节

框架特定的注意事项

Flask
  • 支持函数式和类视图(MethodView)

  • 自动提取docstring作为描述

  • 处理Flask-RESTful的Resource类

FastAPI
  • 原生Pydantic模型自动转OpenAPI

  • 支持依赖注入的参数推断

  • 处理响应模型和status_code

Express
  • 需要手动解析路由定义

  • 识别常见中间件(body-parser、cors)

  • 从JSDoc注释提取描述

参考资料

需要详细信息时,加载这些文件:

  • OpenAPI规范 - references/openapi_spec.md(OpenAPI 3.1完整规范)

  • 最佳实践 - references/documentation_best_practices.md(业界标准)

  • 代码示例 - references/code_examples.md(多语言模板)

依赖项

在使用前确保安装:

pip install pyyaml jsonschema jinja2 requests

对于框架特定的解析:

pip install flask fastapi  # 根据需要
#### 5.3.3 步骤3: 实现核心脚本**scripts/parse_flask_routes.py**```python
#!/usr/bin/env python3
"""
解析Flask应用的路由并生成结构化JSON。用法:python parse_flask_routes.py <module:app> [--output routes.json]示例:python parse_flask_routes.py myapp:app --output routes.json
"""import sys
import json
import importlib
import argparse
from typing import Dict, List, Anydef extract_flask_routes(app) -> List[Dict[str, Any]]:"""提取Flask app的所有路由信息"""routes = []for rule in app.url_map.iter_rules():# 跳过静态文件路由if rule.endpoint == 'static':continue# 获取视图函数view_func = app.view_functions[rule.endpoint]# 提取docstring作为描述description = view_func.__doc__ or ""# 处理每个HTTP方法for method in rule.methods:if method in ['HEAD', 'OPTIONS']:continueroute_info = {'path': str(rule),'method': method,'endpoint': rule.endpoint,'description': description.strip(),'parameters': extract_parameters(rule),'function_name': view_func.__name__}routes.append(route_info)return routesdef extract_parameters(rule) -> List[Dict[str, str]]:"""从路由规则提取路径参数"""params = []for arg in rule.arguments:param = {'name': arg,'in': 'path','required': True,'type': 'string'  # 默认,可后续优化}params.append(param)return paramsdef main():parser = argparse.ArgumentParser(description='解析Flask应用路由')parser.add_argument('app',help='Flask应用导入路径(格式:module:variable)')parser.add_argument('--output', '-o',default='routes.json',help='输出JSON文件路径')args = parser.parse_args()# 导入Flask应用try:module_name, app_name = args.app.split(':')module = importlib.import_module(module_name)app = getattr(module, app_name)except Exception as e:print(f"错误:无法导入 {args.app}", file=sys.stderr)print(f"详情:{str(e)}", file=sys.stderr)sys.exit(1)# 提取路由routes = extract_flask_routes(app)# 保存为JSONwith open(args.output, 'w', encoding='utf-8') as f:json.dump(routes, f, indent=2, ensure_ascii=False)print(f"✓ 成功解析 {len(routes)} 个路由")print(f"✓ 已保存到 {args.output}")if __name__ == '__main__':main()

scripts/generate_openapi.py

#!/usr/bin/env python3
"""
从路由JSON生成OpenAPI 3.1规范。用法:python generate_openapi.py --routes routes.json --output openapi.yaml选项:--title       API标题--version     API版本--description API描述--server      服务器URL
"""import json
import yaml
import argparse
from typing import Dict, Anydef create_openapi_template(title: str,version: str,description: str,server_url: str
) -> Dict[str, Any]:"""创建基础OpenAPI结构"""return {'openapi': '3.1.0','info': {'title': title,'version': version,'description': description},'servers': [{'url': server_url}],'paths': {},'components': {'schemas': {},'securitySchemes': {}}}def convert_route_to_openapi_path(route: Dict[str, Any]) -> Dict[str, Any]:"""将路由信息转为OpenAPI path item"""operation = {'summary': route.get('description', '').split('\n')[0],'description': route.get('description', ''),'operationId': f"{route['method'].lower()}_{route['endpoint']}",'parameters': [],'responses': {'200': {'description': '成功','content': {'application/json': {'schema': {'type': 'object','properties': {}}}}}}}# 转换参数for param in route.get('parameters', []):operation['parameters'].append({'name': param['name'],'in': param['in'],'required': param.get('required', True),'schema': {'type': param.get('type', 'string')}})return operationdef main():parser = argparse.ArgumentParser(description='生成OpenAPI规范')parser.add_argument('--routes', required=True,help='路由JSON文件')parser.add_argument('--output', required=True,help='输出YAML文件')parser.add_argument('--title', default='My API',help='API标题')parser.add_argument('--version', default='1.0.0',help='API版本')parser.add_argument('--description', default='API Documentation',help='API描述')parser.add_argument('--server', default='http://localhost:5000',help='服务器URL')args = parser.parse_args()# 加载路由with open(args.routes, 'r', encoding='utf-8') as f:routes = json.load(f)# 创建OpenAPI文档openapi_doc = create_openapi_template(args.title, args.version, args.description, args.server)# 转换每个路由for route in routes:path = route['path']method = route['method'].lower()if path not in openapi_doc['paths']:openapi_doc['paths'][path] = {}openapi_doc['paths'][path][method] = \convert_route_to_openapi_path(route)# 保存为YAMLwith open(args.output, 'w', encoding='utf-8') as f:yaml.dump(openapi_doc, f, default_flow_style=False,allow_unicode=True, sort_keys=False)print(f"✓ 成功生成OpenAPI规范")print(f"✓ 包含 {len(openapi_doc['paths'])} 个路径")print(f"✓ 已保存到 {args.output}")if __name__ == '__main__':main()
5.3.4 步骤4: 编写Reference文档

references/openapi_spec.md(精简版)

# OpenAPI 3.1 规范速查## 基础结构```yaml
openapi: 3.1.0
info:title: API标题version: 1.0.0description: API描述contact:name: 维护者email: api@example.comservers:- url: https://api.example.com/v1description: 生产环境- url: http://localhost:5000description: 开发环境paths:/users:get:summary: 获取用户列表# ... 详见下文

Path Item结构

每个路径可包含HTTP方法:

/users/{id}:get:summary: 获取单个用户operationId: getUserparameters:- name: idin: pathrequired: trueschema:type: stringresponses:200:description: 成功content:application/json:schema:$ref: '#/components/schemas/User'404:description: 用户不存在

参数类型

参数可以在以下位置:

  • path - 路径参数(必需)

  • query - 查询字符串

  • header - 请求头

  • cookie - Cookie

示例:

parameters:- name: id          # 路径参数in: pathrequired: trueschema:type: integer- name: limit       # 查询参数in: queryrequired: falseschema:type: integerdefault: 20minimum: 1maximum: 100

Schema定义

使用JSON Schema定义数据结构:

components:schemas:User:type: objectrequired:- id- emailproperties:id:type: integerexample: 42email:type: stringformat: emailexample: user@example.comcreated_at:type: stringformat: date-time

安全认证

常见认证方式:

components:securitySchemes:BearerAuth:type: httpscheme: bearerbearerFormat: JWTApiKeyAuth:type: apiKeyin: headername: X-API-KeyOAuth2:type: oauth2flows:authorizationCode:authorizationUrl: https://example.com/oauth/authorizetokenUrl: https://example.com/oauth/tokenscopes:read: 读取权限write: 写入权限# 在operation中应用
paths:/protected:get:security:- BearerAuth: []

响应示例

提供详细的响应示例提高文档可读性:

responses:200:description: 成功content:application/json:schema:$ref: '#/components/schemas/User'examples:normal_user:summary: 普通用户value:id: 42email: user@example.comrole: useradmin_user:summary: 管理员value:id: 1email: admin@example.comrole: admin

最佳实践

1. 使用$ref减少重复

# 定义一次
components:parameters:PageLimit:name: limitin: queryschema:type: integerdefault: 20# 多处引用
paths:/users:get:parameters:- $ref: '#/components/parameters/PageLimit'/posts:get:parameters:- $ref: '#/components/parameters/PageLimit'

2. 详细的描述

  • 使用Markdown格式

  • 说明业务含义,不仅是技术细节

  • 包含边界情况和错误场景

3. 实际的示例

  • 使用真实数据格式

  • 涵盖常见和边缘情况

  • 保持一致性

4. 语义化版本

  • 重大变更 → 主版本号

  • 新增功能 → 次版本号

  • 修复bug → 修订号

#### 5.3.5 步骤5: 准备Assets**assets/markdown-template.md**```markdown
# {{api_title}}**Version:** {{api_version}}  
**Base URL:** {{server_url}}{{api_description}}## 认证{{#if authentication}}
该API使用以下认证方式:
{{#each auth_schemes}}
- **{{name}}**: {{description}}
{{/each}}
{{/if}}---## 端点{{#each endpoints}}
### {{method}} {{path}}**描述:** {{description}}{{#if parameters}}
#### 参数| 名称 | 位置 | 类型 | 必需 | 描述 |
|------|------|------|------|------|
{{#each parameters}}
| `{{name}}` | {{in}} | {{type}} | {{#if required}}是{{else}}否{{/if}} | {{description}} |
{{/each}}
{{/if}}#### 请求示例```bash
# cURL
curl -X {{method}} "{{server_url}}{{path_example}}" \-H "Content-Type: application/json" \{{#if auth}}-H "Authorization: Bearer YOUR_TOKEN"{{/if}}
# Python (requests)
import requestsresponse = requests.{{method_lower}}("{{server_url}}{{path_example}}",headers={"Authorization": "Bearer YOUR_TOKEN"}
)
print(response.json())
响应示例
{{response_example}}

{{/each}}

错误代码

状态码含义
200成功
400请求参数错误
401未认证
403无权限
404资源不存在
500服务器内部错误

变更日志

{{api_version}}

  • 初始版本发布

### 5.4 Phase 3: 测试与迭代#### 5.4.1 单元测试脚本创建`tests/test_parse_flask.py`:```python
import pytest
from flask import Flask
from scripts.parse_flask_routes import extract_flask_routesdef test_basic_route_extraction():"""测试基础路由提取"""app = Flask(__name__)@app.route('/users', methods=['GET'])def get_users():"""获取所有用户"""pass@app.route('/users/<int:id>', methods=['GET'])def get_user(id):"""获取单个用户"""passroutes = extract_flask_routes(app)assert len(routes) == 2assert routes[0]['path'] == '/users'assert routes[0]['method'] == 'GET'assert routes[1]['path'] == '/users/<int:id>'assert '用户' in routes[1]['description']def test_parameter_extraction():"""测试参数提取"""app = Flask(__name__)@app.route('/posts/<int:post_id>/comments/<int:comment_id>')def get_comment(post_id, comment_id):passroutes = extract_flask_routes(app)params = routes[0]['parameters']assert len(params) == 2assert params[0]['name'] == 'post_id'assert params[1]['name'] == 'comment_id'assert all(p['in'] == 'path' for p in params)
5.4.2 集成测试

创建一个测试项目:

# test_project/app.py
from flask import Flask, jsonifyapp = Flask(__name__)@app.route('/api/users', methods=['GET'])
def list_users():"""获取用户列表返回系统中所有注册用户。支持分页和过滤。"""return jsonify([{"id": 1, "name": "Alice"}])@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):"""根据ID获取单个用户的详细信息"""return jsonify({"id": user_id, "name": "Alice"})if __name__ == '__main__':app.run()

运行完整流程:

# 1. 解析路由
python scripts/parse_flask_routes.py test_project.app:app \--output test_routes.json# 2. 生成OpenAPI
python scripts/generate_openapi.py \--routes test_routes.json \--output test_openapi.yaml \--title "Test API" \--version "1.0.0"# 3. 验证结果
python scripts/validate_openapi.py test_openapi.yaml# 预期输出:
# ✓ OpenAPI结构有效
# ✓ 所有路径定义完整
# ⚠ 建议添加更多响应状态码(404, 500等)
# ⚠ 建议添加认证信息
5.4.3 与Claude交互测试

现在,真正的测试来了——让Claude使用这个Skill:

# 对话测试
用户: "帮我为这个Flask项目生成API文档"
[附上test_project/app.py代码]Claude加载api-doc-generator技能:"我将使用api-doc-generator技能来系统化地生成文档。【决策】识别到这是Flask项目,选择'从代码分析生成'工作流【步骤1】解析Flask路由
执行: python scripts/parse_flask_routes.py test_project.app:app【步骤2】生成OpenAPI规范
执行: python scripts/generate_openapi.py --routes routes.json ...【步骤3】创建Markdown文档
根据assets/markdown-template.md生成人类可读文档【步骤4】部署交互式文档
执行: python scripts/init_doc_project.py --swagger-ui ...✓ 已生成以下文件:
- openapi.yaml (OpenAPI 3.1规范)
- API_DOCS.md (Markdown文档)
- docs/ (Swagger UI交互式文档)你可以运行 `cd docs && python -m http.server 8000` 查看交互式文档。"

5.5 Phase 4: 打包与发布

5.5.1 质量检查

使用skill-creator的验证脚本:

python scripts/package_skill.py ./api-doc-generator# 输出:
# [验证] 检查SKILL.md格式...
# ✓ YAML前置元数据有效
# ✓ name与目录名匹配
# ✓ description详细且完整(187字)
# 
# [验证] 检查文件组织...
# ✓ scripts/中所有脚本有执行权限
# ✓ references/中所有文件被SKILL.md引用
# ✓ 无未使用的assets
#
# [验证] 检查代码质量...
# ✓ 所有Python脚本通过语法检查
# ✓ 所有脚本有--help选项
# ✓ 错误处理完善
#
# [打包] 创建分发包...
# ✓ 已创建 api-doc-generator.zip
#
# 🎉 Skill验证通过并已打包!
5.5.2 文档完善

创建api-doc-generator/README.md

# API Documentation Generator Skill## 功能特性- ✅ 支持多框架(Flask、FastAPI、Express)
- ✅ 生成OpenAPI 3.1标准规范
- ✅ 多格式输出(YAML、JSON、Markdown)
- ✅ 交互式Swagger UI
- ✅ Postman Collection导出
- ✅ 多语言代码示例## 快速开始### 安装将`api-doc-generator.zip`上传到Claude:1. Claude.ai: Skills → Upload Custom Skill
2. Claude Code: `/plugin install api-doc-generator.zip`
3. API: 使用Skills API上传### 使用示例**示例1: 分析Flask项目**

"帮我分析这个Flask项目并生成完整的API文档" [附上代码]

**示例2: 从API响应生成**

"我有这些API端点的响应样本,帮我生成OpenAPI规范:

  • GET /users → [{"id":1,"name":"Alice"}]

  • POST /users → {"id":2,"name":"Bob"} ..."

## 支持的框架| 框架 | 支持程度 | 特性 |
|------|---------|------|
| Flask | ✅ 完全 | 自动提取docstring、参数 |
| FastAPI | ✅ 完全 | Pydantic模型自动转换 |
| Express | ⚠️ 手动 | 需手动解析路由 |
| Django | 🚧 计划中 | 未来支持 |## 依赖项```bash
pip install pyyaml jsonschema jinja2 requests

贡献

欢迎提交PR改进该Skill!

许可证

Apache 2.0

---## 第六章:企业级应用场景Skills系统的真正威力,在企业环境中才能完全展现。让我们探讨几个深度场景。### 6.1 场景1:智能代码审查助手**业务挑战:**
- 代码审查耗时(平均2-4小时/PR)
- 审查质量不一致
- 新人不熟悉最佳实践
- 安全漏洞容易遗漏**Skill解决方案:code-review-assistant**```markdown
## 技能结构code-review-assistant/
├── SKILL.md
├── scripts/
│   ├── static_analysis.py         # 运行多个静态分析工具
│   ├── security_scan.py           # 安全漏洞扫描
│   ├── complexity_analysis.py     # 代码复杂度分析
│   └── generate_review_report.py  # 生成审查报告
├── references/
│   ├── coding_standards.md        # 公司编码规范
│   ├── security_checklist.md      # 安全检查清单
│   ├── design_patterns.md         # 推荐设计模式
│   └── common_pitfalls.md         # 常见陷阱
└── assets/└── review_templates/          # 审查报告模板

工作流设计:

## 代码审查工作流### Phase 1: 自动化检查
1. 运行静态分析(pylint, mypy, eslint等)
2. 安全扫描(bandit, semgrep)
3. 复杂度分析(圈复杂度、认知复杂度)
4. 测试覆盖率检查### Phase 2: 规范审查
加载 `references/coding_standards.md`,检查:
- 命名规范
- 代码组织
- 注释完整性
- 错误处理### Phase 3: 设计审查
加载 `references/design_patterns.md`,评估:
- 是否使用适当的设计模式
- SOLID原则遵循情况
- 可维护性和扩展性### Phase 4: 安全审查
加载 `references/security_checklist.md`,检查:
- SQL注入风险
- XSS漏洞
- 敏感数据处理
- 认证/授权逻辑### Phase 5: 生成报告
使用 `scripts/generate_review_report.py` 创建:
- 问题分类(Critical/High/Medium/Low)
- 修复建议(包含代码示例)
- 学习资源链接

实际效果:

# 原始PR代码
def get_user(user_id):user = db.execute(f"SELECT * FROM users WHERE id = {user_id}")return user# Claude使用code-review-assistant后的反馈:"""
## 安全审查 - CRITICAL### 🚨 SQL注入漏洞 (Line 2)**问题:** 使用字符串拼接构造SQL,存在SQL注入风险**风险等级:** Critical**攻击示例:**
user_id = "1; DROP TABLE users; --"
→ 执行: SELECT * FROM users WHERE id = 1; DROP TABLE users; --**修复建议:**
```python
def get_user(user_id):# 使用参数化查询user = db.execute("SELECT * FROM users WHERE id = ?",(user_id,))return user

参考: references/security_checklist.md#sql-injection


设计审查 - MEDIUM

💡 缺少错误处理 (Line 2-3)

问题: 用户不存在时会返回None,调用方可能未处理

改进建议:

def get_user(user_id):user = db.execute("SELECT * FROM users WHERE id = ?",(user_id,))if not user:raise UserNotFoundError(f"User {user_id} does not exist")return user

代码规范 - LOW

📝 缺少类型提示和文档 (Line 1)

建议: 添加类型提示和docstring提高可维护性

from typing import Dict, Anydef get_user(user_id: int) -> Dict[str, Any]:\"\"\"根据ID获取用户信息。Args:user_id: 用户唯一标识符Returns:包含用户信息的字典Raises:UserNotFoundError: 用户不存在时\"\"\"...

"""

### 6.2 场景2:智能数据分析师**业务挑战:**
- 业务人员不懂SQL
- 数据分析需求频繁变化
- 需要多维度交叉分析
- 可视化需求多样**Skill解决方案:data-analyst-pro**```markdown
data-analyst-pro/
├── SKILL.md
├── scripts/
│   ├── query_optimizer.py        # SQL优化
│   ├── data_profiler.py          # 数据概览
│   ├── statistical_analysis.py   # 统计分析
│   └── visualization_engine.py   # 可视化生成
├── references/
│   ├── database_schema.md        # 数据库schema文档
│   ├── business_metrics.md       # 业务指标定义
│   ├── statistical_methods.md    # 统计方法指南
│   └── visualization_guide.md    # 可视化最佳实践
└── assets/└── chart_templates/          # Plotly/Matplotlib模板

交互示例:

用户: "过去三个月,哪个产品类别的复购率最高?给我前10名"Claude (使用data-analyst-pro):"我将使用data-analyst-pro技能进行系统化分析。【理解需求】
- 时间范围:过去3个月
- 分析维度:产品类别
- 指标:复购率 (repeat_purchase_rate)
- 输出:Top 10【加载schema】
读取 references/database_schema.md
识别相关表:
- orders (order_id, user_id, product_id, created_at)
- products (product_id, category)
- users (user_id)【加载业务定义】
读取 references/business_metrics.md
复购率定义:
repeat_purchase_rate = (购买次数≥2的用户数) / (总购买用户数)【生成SQL】
```sql
WITH purchase_counts AS (SELECT p.category,o.user_id,COUNT(DISTINCT o.order_id) as purchase_countFROM orders oJOIN products p ON o.product_id = p.product_idWHERE o.created_at >= DATE_SUB(NOW(), INTERVAL 3 MONTH)GROUP BY p.category, o.user_id
),
category_stats AS (SELECTcategory,COUNT(DISTINCT user_id) as total_users,SUM(CASE WHEN purchase_count >= 2 THEN 1 ELSE 0 END) as repeat_usersFROM purchase_countsGROUP BY category
)
SELECTcategory,total_users,repeat_users,ROUND(repeat_users * 100.0 / total_users, 2) as repeat_purchase_rate
FROM category_stats
ORDER BY repeat_purchase_rate DESC
LIMIT 10;

【执行查询】 运行 scripts/query_optimizer.py 检查性能 → 建议添加索引:CREATE INDEX idx_orders_created_at ON orders(created_at)

【结果分析】

类别总用户数复购用户复购率
零食饮料5420389171.79%
个护美妆4832325167.28%
...

【生成可视化】 使用 scripts/visualization_engine.py 创建交互式柱状图(Plotly)

【洞察提炼】

  1. 零食饮料复购率最高(71.79%),说明是刚需品类

  2. 前3名复购率均超过65%,可作为流量入口

  3. 建议:增加这些类别的库存和促销活动

[附上可视化图表] "

### 6.3 场景3:合规性检查自动化**业务挑战:**
- GDPR/CCPA等法规复杂
- 人工检查易遗漏
- 不同地区要求不同
- 需定期审计**Skill解决方案:compliance-checker**```markdown
compliance-checker/
├── SKILL.md
├── scripts/
│   ├── scan_pii.py              # 扫描个人信息
│   ├── check_data_retention.py  # 数据保留策略检查
│   ├── audit_access_logs.py     # 访问日志审计
│   └── generate_compliance_report.py
├── references/
│   ├── gdpr_requirements.md     # GDPR详细要求
│   ├── ccpa_requirements.md     # CCPA详细要求
│   ├── hipaa_requirements.md    # HIPAA详细要求
│   └── data_classification.md   # 数据分类标准
└── assets/└── compliance_templates/    # 合规报告模板

核心能力:

  1. PII检测

    # scripts/scan_pii.py核心逻辑
    def scan_for_pii(codebase_path):"""扫描代码中的PII处理"""pii_patterns = {'email': r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b','ssn': r'\b\d{3}-\d{2}-\d{4}\b','credit_card': r'\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b',# ... 更多模式}findings = []for file in scan_files(codebase_path):# 检查是否有PII处理# 验证是否有适当的加密# 检查日志中是否泄露PII...
    
  2. 数据保留检查

    def check_retention_policy(database):"""检查数据保留是否符合政策"""for table in database.tables:retention_days = get_retention_policy(table)old_records = count_records_older_than(table, retention_days)if old_records > 0:yield ComplianceIssue(severity='HIGH',message=f"{table}中有{old_records}条记录超过保留期限",regulation='GDPR Article 5(1)(e)',remediation='执行数据删除或归档')
    

第七章:高级技巧与最佳实践

7.1 技巧1:Skills的版本管理

挑战: Skill会随业务变化需要更新,如何管理版本?

方案:语义化版本 + 变更日志

# SKILL.md
---
name: api-doc-generator
version: 2.1.0  # 添加version字段
description: ...
changelog_url: https://github.com/mycompany/skills/blob/main/CHANGELOG.md
---## 版本历史### 2.1.0 (2024-01-15)
- 新增FastAPI完整支持
- 改进OpenAPI 3.1生成质量
- 修复路径参数提取bug### 2.0.0 (2023-12-01) - BREAKING CHANGE
- 重构为模块化结构
- ⚠️ 移除对Flask 1.x的支持
- 迁移指南:见 references/migration_v2.md### 1.5.2 (2023-11-20)
- 修复Swagger UI模板bug

实践建议:

  1. 主版本号:破坏性变更(工作流改变、脚本接口变更)

  2. 次版本号:新增功能(新的工作流、新的脚本)

  3. 修订号:bug修复(不改变行为)

7.2 技巧2:Skills的测试策略

三层测试金字塔:

        /\/  \  End-to-End Tests/____\  (与Claude交互测试)/      \/ Integration\ Tests/___________\ (脚本集成测试)/             \/   Unit Tests   \
/___________________\
(脚本单元测试)

E2E测试示例:

# tests/e2e/test_api_doc_generator.py
import anthropicdef test_full_workflow():"""测试完整的文档生成工作流"""client = anthropic.Anthropic(api_key="...")# 上传Skillskill_id = client.skills.create(skill_folder="./api-doc-generator")# 创建测试对话response = client.messages.create(model="claude-3-5-sonnet-20241022",max_tokens=4096,skills=[skill_id],messages=[{"role": "user","content": """帮我为这个Flask项目生成API文档:```pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/users')def get_users():\"\"\"获取用户列表\"\"\"pass```"""}])# 验证结果assert "openapi.yaml" in response.content[0].textassert "✓ 成功生成OpenAPI规范" in response.content[0].text# 验证生成的文件# (需要Claude Code环境或文件系统访问)

7.3 技巧3:Skills的调试

挑战: AI使用Skill时出错,如何调试?

方案1:详细日志

在SKILL.md中嵌入调试指令:

## 调试模式当遇到问题时,启用详细日志:```bash
export DEBUG=1
python scripts/parse_flask_routes.py --verbose myapp:app

日志将输出:

  • 每个步骤的详细信息

  • 中间结果

  • 错误堆栈

**方案2:干运行模式**```python
# scripts/generate_openapi.py添加--dry-run
parser.add_argument('--dry-run', action='store_true',help='只显示将要执行的操作,不实际生成文件')if args.dry_run:print("【干运行模式】将执行以下操作:")print(f"1. 加载 {args.routes}")print(f"2. 解析 {len(routes)} 个路由")print(f"3. 生成OpenAPI规范到 {args.output}")print("(实际文件未生成)")return

方案3:检查点系统

# 在长流程中保存中间结果
def generate_documentation(project_path):# Checkpoint 1: 解析完成routes = parse_routes(project_path)save_checkpoint('routes.json', routes)# Checkpoint 2: OpenAPI生成openapi = generate_openapi(routes)save_checkpoint('openapi.yaml', openapi)# Checkpoint 3: 文档生成docs = generate_markdown(openapi)save_checkpoint('docs.md', docs)

如果失败,可以从checkpoint恢复:

# 从第2步继续
python scripts/generate_openapi.py \--from-checkpoint routes.json \--skip-parse

7.4 技巧4:Skills的性能优化

问题: 复杂Skill可能导致响应变慢

优化策略:

1. 懒加载References

<!-- 不好:一次性加载所有 -->
## 准备工作
首先阅读以下所有文件:
- references/python_guide.md (5000行)
- references/typescript_guide.md (5000行)
- references/java_guide.md (5000行)<!-- 好:按需加载 -->
## 准备工作
根据项目语言,加载对应指南:
- Python项目 → 加载 references/python_guide.md
- TypeScript项目 → 加载 references/typescript_guide.md
- Java项目 → 加载 references/java_guide.md

2. 脚本预编译

# 对于频繁调用的Python脚本,使用.pyc加速
python -m compileall scripts/# 对于大型依赖,使用虚拟环境
# 在Skill中包含requirements.txt
pip install -r requirements.txt

3. 缓存机制

# scripts/with_cache.py
import functools
import hashlib
import pickledef cached_result(cache_dir='.skill_cache'):def decorator(func):@functools.wraps(func)def wrapper(*args, **kwargs):# 计算参数hash作为缓存键key = hashlib.md5(pickle.dumps((args, kwargs))).hexdigest()cache_file = f"{cache_dir}/{func.__name__}_{key}.pkl"if os.path.exists(cache_file):with open(cache_file, 'rb') as f:return pickle.load(f)# 执行函数result = func(*args, **kwargs)# 保存缓存os.makedirs(cache_dir, exist_ok=True)with open(cache_file, 'wb') as f:pickle.dump(result, f)return resultreturn wrapperreturn decorator@cached_result()
def expensive_analysis(codebase_path):"""耗时的代码分析,结果会被缓存"""...

7.5 技巧5:跨Skill协作

场景: 一个任务需要多个Skills配合

设计模式:Master-Worker

创建一个"orchestrator" Skill来协调其他Skills:

# project-builder/SKILL.md
---
name: project-builder
description: 编排多个技能完成完整项目创建
---## 工作流创建一个新项目需要协调多个技能:### Phase 1: 项目结构 (使用skill-creator)
"使用skill-creator技能创建项目骨架"
→ 调用skill-creator
→ 获得基础目录结构### Phase 2: 生成代码 (使用artifacts-builder或webapp-testing)
"根据项目类型,使用相应技能生成代码"
→ Web前端 → 调用artifacts-builder
→ API服务 → 自行生成
→ 测试 → 调用webapp-testing### Phase 3: 生成文档 (使用api-doc-generator)
"为API生成文档"
→ 调用api-doc-generator
→ 生成OpenAPI规范和Markdown文档### Phase 4: 设置CI/CD (自行处理)
"创建.github/workflows/或.gitlab-ci.yml"
→ 使用本技能的templates### Phase 5: 创建README (使用canvas-design可选)
"生成README.md"
→ 可选:使用canvas-design生成项目logo

实际使用:

用户: "帮我创建一个完整的Todo API项目,包括代码、文档、测试和CI/CD"Claude (加载project-builder):
"我将使用project-builder技能来编排这个复杂任务。【Phase 1】创建项目结构...
→ 使用skill-creator
✓ 已创建 todo-api/ 目录结构【Phase 2】生成API代码...
✓ 创建Flask应用
✓ 实现CRUD端点
✓ 添加数据库模型【Phase 3】生成API文档...
→ 使用api-doc-generator
✓ 生成openapi.yaml
✓ 创建交互式文档【Phase 4】编写测试...
→ 使用webapp-testing技能
✓ 创建Pytest测试套件
✓ 覆盖率达到85%【Phase 5】设置CI/CD...
✓ 创建GitHub Actions工作流
✓ 包含测试、linting、部署【Phase 6】生成README...
✓ 包含安装说明、API文档链接、贡献指南🎉 项目创建完成!目录结构:
[显示完整的文件树]
"

第八章:未来展望与生态建设

8.1 Skills的生态愿景

Skills系统才刚刚起步,但已经展现出建立一个庞大生态的潜力,类似于:

  • VSCode插件生态 - 百万开发者贡献插件

  • npm包生态 - 200万+包

  • Chrome扩展生态 - 数十万扩展

Skills生态可能的发展路径:

2024 Q4: 官方示例Skills (当前阶段)↓
2025 Q1: 社区Skills市场- 开发者上传自定义Skills- 评分和评论系统- 版本管理↓
2025 Q2: Skills工具链成熟- Skill开发IDE插件- 自动化测试框架- 性能分析工具↓
2025 Q3: 企业级Skills管理- 私有Skill仓库- 团队协作开发- 合规性审计↓
2025 Q4: Skills标准化- 跨AI平台兼容- Skills互操作协议- 统一的Skill描述语言

8.2 技术趋势预测

趋势1:从静态到动态

当前Skills是静态的(文件夹+脚本),未来可能支持:

# 动态Skill:可以从API获取最新信息
class DynamicSkill:def load(self):# 从远程服务器获取最新的工作流定义workflow = fetch_from_api("https://skills.company.com/api-doc-gen")return workflowdef update(self):# 自动检测并更新到最新版本if self.check_updates():self.load()

趋势2:从手工到AI生成

未来可能出现"Skill生成器"——用AI生成Skills:

用户: "帮我创建一个专门处理公司财务报表的Skill"AI分析:
1. 识别领域:财务报表
2. 收集知识:会计准则、税法、公司政策
3. 设计工作流:数据提取 → 验证 → 分析 → 报告生成
4. 生成Scripts:使用pandas、openpyxl等
5. 创建References:从公司文档提取
6. 打包Skill输出: finance-report-analyzer.zip

趋势3:从单机到协作

Skills可能支持跨实例协作:

Claude实例A (加载code-review-assistant):
"我负责安全审查部分"Claude实例B (加载performance-analyzer):
"我负责性能分析部分"Claude实例C (协调者):
"整合两者的结果生成综合报告"

8.3 与其他技术的融合

Skills + MCP = 完整的AI Agent能力体系

┌─────────────────────────────────────────┐
│         AI Agent完整能力                 │
├─────────────────────────────────────────┤
│                                         │
│  Knowledge & Workflow (Skills)          │
│  - 如何做(How)                         │
│  - 领域知识(Domain Knowledge)          │
│  - 最佳实践(Best Practices)            │
│                                         │
├─────────────────────────────────────────┤
│                                         │
│  Tool Access (MCP)                      │
│  - 做什么(What)                        │
│  - 外部服务(External Services)         │
│  - 实时数据(Real-time Data)            │
│                                         │
└─────────────────────────────────────────┘

Skills + RAG = 动态知识库

# 未来的Skill可能集成RAG
class RAGEnabledSkill:def __init__(self):self.vector_db = load_vector_database("company_docs")def handle_query(self, query):# 从向量数据库检索相关知识relevant_docs = self.vector_db.search(query, top_k=5)# 结合Skill的静态知识和动态检索的知识combined_knowledge = self.merge(self.static_knowledge,relevant_docs)return self.process(query, combined_knowledge)

8.4 开发者可以做什么

1. 贡献到开源社区

# Fork官方仓库
git clone https://github.com/anthropics/skills.git# 创建你的Skill
cd skills
python scripts/init_skill.py my-awesome-skill# 提交PR
git add my-awesome-skill/
git commit -m "Add: my-awesome-skill for X use case"
git push origin feature/my-awesome-skill

2. 建立企业内部Skill库

company-skills/
├── README.md
├── skills/
│   ├── code-review-assistant/    # 代码审查
│   ├── data-analyst-pro/         # 数据分析
│   ├── compliance-checker/       # 合规检查
│   ├── document-translator/      # 文档翻译
│   └── api-doc-generator/        # API文档
├── templates/                     # Skill模板
└── docs/├── development-guide.md      # 开发指南└── best-practices.md         # 最佳实践

3. 创建Skill开发工具

# skill-devtools: 一个帮助开发Skill的工具包
from skill_devtools import SkillBuilderbuilder = SkillBuilder("my-new-skill")# 交互式创建
builder.prompt_for_metadata()      # 引导填写元数据
builder.suggest_structure()        # 建议目录结构
builder.generate_boilerplate()     # 生成样板代码
builder.validate()                 # 验证完整性
builder.test()                     # 运行测试
builder.package()                  # 打包发布print("✓ Skill开发完成!")

未来已来,只是分布不均。 希望本文能成为你探索这个激动人心领域的指南针。


附录:快速参考

A. Skills项目资源

  • GitHub仓库: https://github.com/anthropics/skills

  • 官方文档: https://docs.claude.com/en/docs/build-with-claude/skills

  • Skills规范: agent_skills_spec.md

  • Anthropic博客: https://anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills

B. 常用命令速查

# 初始化新Skill
python scripts/init_skill.py <skill-name> --path <output-dir># 验证Skill
python scripts/package_skill.py <skill-folder># 打包发布
python scripts/package_skill.py <skill-folder> ./dist# 在Claude Code中安装
/plugin install <skill-name>@anthropic-agent-skills# 在Claude.ai中上传
Settings → Skills → Upload Custom Skill

C. SKILL.md模板

---
name: your-skill-name
description: 详细描述该技能的功能和使用场景。用第三人称,说明何时应该使用该技能。
license: Apache 2.0
allowed-tools:  # 可选- read_file- write
---# Your Skill Name## 概述
[简要说明技能用途]## 使用场景
[列出触发该技能的典型请求]## 工作流
[详细的分步骤指南]## 最佳实践
[使用建议和注意事项]## 参考资料
[指向references/中的文件]## 依赖项
[所需的外部依赖]

D. 常见问题FAQ

Q1: Skills和Prompts有什么区别?

A: Prompts是一次性的指令,Skills是可复用的能力模块。类比:Prompt像口头指导,Skill像培训手册。

Q2: 一个Skill可以有多大?

A:

  • SKILL.md建议<5k词

  • scripts/无大小限制(可直接执行)

  • references/无限制(按需加载)

  • 总大小建议<50MB(考虑传输)

Q3: Skills可以调用网络API吗?

A: 可以通过scripts调用,但不建议在Skills中存储API密钥。对于需要外部API的场景,建议使用MCP。

Q4: 如何处理Skills的更新?

A: 使用语义化版本号,在SKILL.md中包含changelog,破坏性变更时提供迁移指南。

Q5: Skills支持哪些编程语言?

A: Scripts可以用任何语言编写(Python、Bash、Node.js等),只要能在目标环境执行。

Q6: Claude.ai、Claude Code和API中使用Skills有区别吗?

A: 核心机制相同,但:

  • Claude.ai: 通过UI上传,所有付费用户可用

  • Claude Code: 通过插件系统安装,本地执行

  • API: 通过Skills API管理,可编程控制

Q7: 可以在Skills中使用第三方库吗?

A: 可以。在Skill中包含requirements.txt(Python)或package.json(Node.js),Claude会在需要时安装依赖。

Q8: Skills的执行环境是什么?

A:

  • Claude.ai/API: 云端沙箱环境

  • Claude Code: 用户本地环境

  • 都支持文件系统访问(受限)

Q9: 如何调试Skills?

A:

  1. 在scripts中添加详细日志

  2. 使用--dry-run模式测试

  3. 创建检查点系统保存中间结果

  4. 在本地环境单独测试scripts

Q10: Skills可以商业化吗?

A: 可以。Apache 2.0许可证允许商业使用。你可以创建付费的企业级Skills或提供Skills定制服务。

最后,我想说:

我们正站在一个历史性的十字路口。AI已经不再是遥远的未来,而是每天使用的工具。但如何让这个工具更强大、更可靠、更符合我们的需求?答案就在我们手中——通过Skills系统,通过我们的创造力和专业知识。

每一个你创建的Skill,都是在为AI的能力边界添砖加瓦。每一行代码,都是在定义AI与人类协作的新方式。

这是一个让人兴奋的时代,也是一个充满机遇的时代。

让我们一起,用Skills构建AI的未来。

更多AIGC文章

RAG技术全解:从原理到实战的简明指南

更多VibeCoding文章

http://www.dtcms.com/a/504461.html

相关文章:

  • OpenAI:ChatGPT将开放「成人模式」
  • C程序的核心基石:深入理解与精通函数
  • 网站建设教程赚找湖南岚鸿认 可网站必备功能
  • 阿里巴巴外贸网站首页手机网站布局教程
  • CMOS图像传感器驱动程序原理
  • 移动电商网站设计wordpress 获取文章别名
  • 惠州建设集团网站淘宝上面建设网站安全么
  • 深圳市做网站建设中国响应式网站
  • 双Token机制
  • 网站后台管理模板免费下载WordPress导购模板
  • 简述对网站进行评析的几个方面.网站建设开发设计营销公司厦门
  • php5mysql网站开发实例精讲又拍云 cdn WordPress
  • 宜章泰鑫建设有限公司网站给村里做网站
  • 【学习系列】SAP RAP 10:行为定义-Determinations和Validations
  • 织梦可以做导航网站网络营销的推广方式
  • 建设网站方法wordpress文章显示时间
  • 公司微信网站建设方案模板下载黑白色调网站
  • 中企视窗做网站怎么样今天哈尔滨最新通知
  • 网站域名的所有权网站建设资质备案
  • 网站建设目的主要包括哪些做网站要不要35类商标
  • MySQL 核心数据类型详解与实战案例
  • 郑州做网站公司电话php+mysql网站开发全程实例 pdf
  • 老薛主机做两个网站营销业务应用系统
  • SpringMVC初始
  • 哈尔滨房产信息网官网论坛seo网站
  • 离石网站建设16岁0元开网店赚钱软件
  • 建阳建设局网站建设网站企业运营
  • 基于 Zynq 的目标检测系统软硬协同架构设计(一)
  • 软件工程模块复盘:高频考点清单 + 5 道真题汇总
  • 网站js代码不显示wordpress 模板结构