找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2387

积分

0

好友

317

主题
发表于 前天 05:39 | 查看: 20| 回复: 0

掌握了 AI Skills 的基础概念和核心结构后,如何将它们应用于日常开发才是关键。本文将深入探讨 Skills 的使用方式、自定义编写方法以及团队协作的最佳实践,帮助你与 AI 助手建立高效的工作流。

五、如何使用 Skills?

理解了 Skills 的结构之后,我们来看看如何在实战中与它们互动。大多数时候,你甚至不需要记住技能的名字。

5.1 自动触发 —— 最自然的方式

这是最理想的交互模式。你只需要像平时一样,用自然语言向 AI 描述你的需求,系统会自动进行关键词匹配,为你调用最合适的 Skill。

示例对话:

👤 用户:这段代码好像有内存泄漏,帮我查一下。

🤖 AI 内部:
   → 关键词匹配:“内存泄漏”、“查一下”
   → 匹配到 Skill:systematic-debugging + perf-optimizer
   → 加载 SKILL.md,按照系统性调试流程执行

🤖 AI 回复:
   我将按照系统性调试流程来排查这个内存泄漏问题。
   第一步:收集证据...
   第二步:定位可疑代码...
   ...

为了让自动触发更精准,你可以有意识地在提问中使用一些关键词:

技巧 示例 效果
使用 Skill 关注的关键词 “帮我做一下安全审计 精确命中 security-audit
描述具体的问题类型 接口响应时间从 200ms 涨到了 2s” 命中 perf-optimizer
说明期望的工作方式 “用 TDD 的方式实现这个功能” 命中 test-driven-development

5.2 手动指定 —— 精确控制

当自动匹配不够理想,或者你希望强制执行某个特定工作流时,可以手动指定 Skill。以下是几种常见的指定方式:

方式一:直接说出 Skill 名称

👤 “请使用 architect-spec 技能,帮我设计用户权限系统的架构。”

方式二:描述你想要的工作模式

👤 “我想先头脑风暴一下这个功能的所有可能方案,不要急着写代码。”
   → AI 识别到这是 brainstorming 的工作模式

方式三:引用 Skill 的行为特征

👤 “帮我改这个 bug,但请先收集证据、定位根因,不要直接改代码。”
   → AI 识别到这是 systematic-debugging 的工作方式

5.3 组合使用 —— 串联工作流

Skills 的真正威力在于组合使用。一个复杂的开发任务,往往需要多个技能像流水线一样接力完成。

场景:从零开发一个新功能

阶段 1️⃣  brainstorming
├── 用户描述需求:“我想给系统加一个数据导出功能”
├── AI 引导探索:导出什么数据?什么格式?谁来用?
└── 产出:需求文档 + 方案选型

        ▼

阶段 2️⃣  architect-spec
├── 根据需求设计技术方案
├── 定义数据模型、API 接口、组件结构
└── 产出:架构设计文档

        ▼

阶段 3️⃣  writing-plans
├── 将架构方案拆解为具体的实施步骤
├── 定义每个步骤的输入、输出和验收标准
└── 产出:分步实施计划

        ▼

阶段 4️⃣  test-driven-development
├── 先编写测试用例
├── 再实现功能代码
├── 确保所有测试通过

        ▼

阶段 5️⃣  verification-before-completion
├── 运行完整测试套件
├── 手动验证关键场景
└── 确认无遗漏

        ▼

阶段 6️⃣  git-workflow + doc-generator
├── 生成规范的 commit message
├── 补充 API 文档和 README
└── 提交代码审查

5.4 实战示例

下面通过几个具体的场景,看看 Skills 如何解决实际问题。

📌 示例 1:修复一个线上 Bug

👤 用户:“线上用户反馈登录后被立即踢出,帮我排查一下。”

🤖 AI 自动触发:systematic-debugging

执行过程:
1. 收集证据
   - 查看相关日志和错误信息
   - 确认问题的复现条件
   - 检查最近的代码变更

2. 形成假设
   - 假设 A:Token 过期时间配置错误
   - 假设 B:角色验证逻辑有误
   - 假设 C:Session 存储出现竞态条件

3. 逐一验证
   - 排除假设 A:Token 有效期配置正常
   - 验证假设 B:发现角色验证跳过了某个条件 ✅

4. 修复 + 回归测试
   - 修复角色验证逻辑
   - 编写针对性的测试用例
   - 运行完整测试套件确认无回归

📌 示例 2:重构老旧模块

👤 用户:“services 目录下有 5 个文件都在重复创建 LLM 客户端,帮我重构。”

🤖 AI 自动触发:refactor-guru

执行过程:
1. 分析现状
   - 扫描所有文件,找出重复的代码模式
   - 绘制依赖关系图

2. 设计方案
   - 提取公共代码为 llm_client.py 工厂模块
   - 提取 JSON 解析逻辑为 llm_utils.py 工具模块

3. 安全重构
   - 逐文件替换,每次替换后运行测试
   - 确保外部行为完全不变

4. 验证
   - 所有现有测试通过
   - 没有引入新的依赖问题

📌 示例 3:为新接口编写文档

👤 用户:“刚写完了用户管理的 API,帮我生成接口文档。”

🤖 AI 自动触发:doc-generator

执行过程:
1. 扫描代码
   - 读取路由定义和数据模型
   - 提取请求参数、响应格式、错误码

2. 生成文档
   - 按照 RESTful API 文档规范
   - 包含请求/响应示例
   - 添加认证说明和错误处理说明

3. 输出
   - 结构清晰的 Markdown 文档
   - 可直接集成到项目 README 或 API 文档站

📌 示例 4:组合技 —— 安全审计 + 性能优化

👤 用户:“这个支付模块即将上线,帮我全面检查一下。”

🤖 AI 组合触发:security-audit + perf-optimizer

Phase 1 - 安全审计:
   ✅ SQL 注入检查
   ✅ XSS 防护验证
   ⚠️ 发现:金额校验缺少服务端验证
   ⚠️ 发现:日志中打印了敏感信息

Phase 2 - 性能优化:
   ✅ 数据库查询分析
   ⚠️ 发现:N+1 查询问题
   ⚠️ 发现:缺少必要的缓存层

最终产出:
   📄 安全审计报告(含修复方案)
   📄 性能优化报告(含量化指标)

总结:使用 Skills 的最佳策略是“日常靠自动触发,关键节点手动指定,复杂任务组合串联”。你不需要记忆所有 Skill 的名字,只需要像平时一样描述需求,AI 会帮你找到合适的技能。

六、如何编写自定义 Skill?

当内置 Skills 无法满足你的特定需求时,完全可以自己动手编写。这个过程比你想象的要简单,更像是在为一位新同事编写一份清晰的工作手册。

6.1 确定 Skill 的职责边界

动手之前,先想清楚三个核心问题:

问题 目的 示例
这个 Skill 解决什么问题? 明确职责 “确保所有 API 接口都有统一的错误处理格式”
什么时候应该触发它? 定义触发条件 “当用户要求编写新的 API 接口时”
它不应该做什么? 划清边界 “不负责数据库模型设计,那是 architect-spec 的事”

🎯 职责边界的黄金法则:

✅ 好的边界:一个 Skill 做一类事,做到极致
   → api-error-handler:专门处理 API 错误格式规范

❌ 坏的边界:一个 Skill 什么都管
   → code-helper:写代码、改 bug、做测试、写文档...

6.2 编写 SKILL.md

这是 Skill 的核心文件。一份好的 SKILL.md 应该像一份优秀的技术文档,结构清晰,指令明确。

Step 1:编写 Frontmatter
这是 Skill 的“身份证”,用于 AI 进行匹配。

---
name: api-error-handler
description: 当用户要求“编写新接口”、“添加 API 路由”、“处理接口错误”时触发。确保所有 API 接口遵循统一的错误处理规范和响应格式。
---

编写 description 的技巧:

要素 说明 示例
列举触发短语 用户可能说的话 “编写新接口”、“添加 API 路由”
描述核心功能 Skill 做什么 “确保遵循统一的错误处理规范”
用引号包裹关键词 提高匹配精度 “处理接口错误”

Step 2:编写指令正文
一个好的指令正文通常包含以下模块,你可以根据 Skill 的复杂度按需选用:

# [Skill 名称]

## 背景与目标
为什么需要这个 Skill?解决什么问题?

## 触发条件
明确列出在什么场景下使用。

## 前置检查
执行前需要确认的事项(如依赖是否安装、配置是否存在)。

## 执行步骤
编号列出具体的操作步骤,越详细越好。

## 输出规范
定义输出的格式、结构和质量标准。

## 示例
提供输入和期望输出的对照,这是最有效的指令方式。

## 边界与约束
明确 Skill 不应该做什么,防止越界。

## 常见问题
列出可能遇到的问题和解决方案。

编写指令的核心原则:

  1. 具体优于抽象 — “使用 HTTP 422 状态码” 比 “使用合适的状态码” 好
  2. 示例优于描述 — 给一个代码示例比写三段描述更有效
  3. 约束优于自由 — 明确的限制条件能防止 AI 发挥过度
  4. 步骤优于目标 — “先检查 X,再执行 Y” 比 “确保质量” 更可执行

6.3 添加辅助资源

随着 Skill 变得复杂,你可以添加辅助资源使其更强大、更易用。

api-error-handler/
├── SKILL.md                    # 核心指令
├── examples/                   # 参考示例(推荐)
│   ├── good-error-response.py  # 正确的错误处理示例
│   └── bad-error-response.py   # 反面示例
├── resources/                  # 模板资源(可选)
│   └── error-codes.json        # 错误码定义表
└── scripts/                    # 辅助脚本(可选)
    └── check-error-handling.sh # 检查脚本

6.4 测试与迭代

编写完成并不代表结束,通过实际测试来验证和优化 Skill 至关重要。

① 触发测试 — 验证 AI 能否正确匹配

测试用语:
  → “帮我写一个用户注册接口”     (应触发)
  → “这段代码格式不对帮我改一下”  (不应触发)
  → “接口报错了帮我处理一下”     (应触发)

② 执行测试 — 验证 AI 是否按照指令执行

检查点:
  □ 是否按照定义的步骤顺序执行?
  □ 输出格式是否符合规范?
  □ 是否遵守了约束条件?
  □ 边界情况是否处理得当?

③ 迭代优化 — 根据实际效果调整指令

常见调整:
  → AI 跳过了某个步骤  → 在指令中加粗强调 + 加上“必须”关键词
  → AI 输出格式不对    → 补充更具体的示例
  → AI 做了不该做的事  → 在“边界与约束”中明确排除
  → 触发不够精准      → 调整 description 中的关键词

6.5 一个完整的自定义 Skill 示例

下面是一个用于规范化 API 错误处理的完整 Skill 实例,你可以以此为模板进行创作。

目录结构:

.agent/skills/api-error-handler/
├── SKILL.md
└── examples/
    └── error-response-example.md

SKILL.md 内容:

---
name: api-error-handler
description: 当用户要求“编写新接口”、“添加 API”、“处理接口错误”、“统一错误格式”时触发。确保所有 API 接口遵循统一的错误处理规范和响应格式。
---

# API 错误处理规范化

## 背景
项目中不同接口的错误响应格式不统一,导致前端处理困难。
本 Skill 确保所有新增接口都遵循统一的错误处理模式。

## 触发条件
- 用户要求编写新的 API 接口
- 用户要求处理或优化接口的错误响应
- 用户要求统一错误格式

## 执行步骤

### 1. 检查现有模式
查看项目中是否已有错误处理的基类或工具函数。

### 2. 使用标准错误响应格式
所有错误响应**必须**遵循以下 JSON 结构:
```json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "用户可读的错误描述",
    "details": {}
  }
}

3. 使用正确的 HTTP 状态码

状态码 使用场景
400 请求参数格式错误
401 未认证
403 无权限
404 资源不存在
422 业务逻辑校验失败
500 服务器内部错误

4. 实现全局异常捕获

确保有统一的异常处理中间件,防止异常泄露。

边界与约束

  • 本 Skill 只关注错误处理格式,不涉及业务逻辑设计
  • 不修改已有接口的正常响应格式
  • 日志记录由其他模块负责

示例

参考 examples/error-response-example.md


**examples/error-response-example.md 内容:**

错误响应示例

✅ 正确示例

from fastapi import HTTPException

class AppError(HTTPException):
    def __init__(self, code: str, message: str, status_code: int = 400, details: dict = None):
        self.error_body = {
            "success": False,
            "error": {
                "code": code,
                "message": message,
                "details": details or {}
            }
        }
        super().__init__(status_code=status_code, detail=self.error_body)

# 使用方式
raise AppError(
    code="USER_NOT_FOUND",
    message="指定的用户不存在",
    status_code=404
)

❌ 错误示例

# 不要这样做:直接返回字符串
raise HTTPException(status_code=400, detail="参数错误")

# 不要这样做:暴露内部错误信息
raise HTTPException(status_code=500, detail=str(e))

> **总结**:编写自定义 Skill 的核心流程是“定边界 → 写指令 → 加示例 → 测迭代”。从一个最小化的 `SKILL.md` 开始,根据实际使用效果逐步完善。不要追求一次写完美——好的 Skill 是迭代出来的。

## 七、最佳实践与注意事项

掌握了创建和使用的方法后,让我们来看看如何设计出真正高效、好用的 Skills。

### 7.1 Skill 设计原则

遵循以下原则,能让你的 Skills 库更健壮、更易维护。

**原则一:单一职责**
每个 Skill 只做一件事,但把这件事做到极致。

✅ 好的设计                         ❌ 坏的设计
─────────                         ─────────
security-audit    → 只做安全审计    all-in-one → 安全审计 + 性能优化
perf-optimizer    → 只做性能优化                + 代码重构 + 写文档
refactor-guru     → 只做代码重构
doc-generator     → 只做文档生成

**判断标准**:如果你的 Skill 的 description 中需要用很多“和”来连接不同的功能,那它很可能需要拆分。

**原则二:明确触发条件**
`description` 要写得精准,既不能太宽(误触发),也不能太窄(触发不到)。

| 质量等级 | description 示例 | 问题 |
| :--- | :--- | :--- |
| ❌ 太宽 | “当用户需要帮助时触发” | 几乎任何请求都会触发 |
| ❌ 太窄 | “当用户说‘帮我检查 SQL 注入漏洞’时触发” | 只有精确匹配才能触发 |
| ✅ 合适 | “当用户要求‘检查安全问题’、‘做安全审计’、‘扫描漏洞’时触发。系统性地扫描代码中的安全风险” | 覆盖多种表达,同时边界清晰 |

**原则三:可测试**
好的 Skill 应该具备可验证性——你能明确判断 AI 是否正确执行了它。

✅ 可测试的指令:
“所有错误响应必须包含 code、message、details 三个字段”
→ 检查输出是否包含这三个字段即可

❌ 不可测试的指令:
“确保代码质量很高”
→ “高”的标准是什么?无法客观判断


**原则四:渐进式复杂度**
从最简单的版本开始,根据使用反馈逐步添加复杂度。

V1:只有 SKILL.md(基本指令)
↓  使用一段时间后
V2:添加 examples/(发现 AI 输出格式不稳定)
↓  继续优化
V3:添加 scripts/(需要自动化检查)
↓  团队推广后
V4:添加 resources/(需要共享模板和配置)


### 7.2 常见误区

避开这些陷阱,能让你的 Skills 编写过程事半功倍。

**误区一:指令过于宽泛**

❌ “写出高质量的代码”
→ AI 不知道你的“高质量”标准是什么

✅ “代码必须满足以下条件:

  1. 所有函数必须有 docstring
  2. 所有参数必须有类型注解
  3. 单个函数不超过 30 行
  4. 使用项目统一的命名规范(snake_case)”

误区二:缺少示例 指令写得再清楚,都不如一个好的示例直观。

❌ 只有描述:
   “使用 Conventional Commits 格式编写提交信息”

✅ 描述 + 示例:
   “使用 Conventional Commits 格式编写提交信息,如:
    feat(auth): 添加微信扫码登录功能
    fix(api): 修复用户列表分页计算错误”

误区三:忽视边界定义
不告诉 AI “不该做什么”,AI 可能会过度发挥。

❌ 没有边界:
   Skill 只定义了“做什么”,AI 额外做了一堆你没要求的事

✅ 有明确边界:
   “## 边界与约束
    - 本 Skill 不修改现有的数据库模型
    - 不涉及前端组件的样式调整
    - 不自动安装新的依赖包”

误区四:一次追求完美

❌ 花一整天写了一个 500 行的 SKILL.md,结果实际使用时发现方向偏了

✅ 先写一个 50 行的核心版本:
   → 实际使用 3-5 次
   → 记录问题和改进点
   → 逐步迭代完善

7.3 维护建议

将 Skills 视为团队的重要资产进行管理,才能让它的价值持续放大。

📌 版本控制
.agent/skills/ 目录纳入 Git 管理,享受所有版本控制的好处:

# Skills 文件应和代码一起提交
git add .agent/skills/
git commit -m "feat(skills): 新增 api-error-handler 技能"

# 可以追溯每次调整的原因
git log --oneline .agent/skills/api-error-handler/SKILL.md

📌 团队共享
Skills 随代码仓库自动共享给所有团队成员,这是一种极佳的知识沉淀和传递方式。团队成员可以在 技术文档 板块分享和讨论各自创建的优秀 Skill 模板。

团队成员 A 编写了 security-audit Skill
     ↓ git push
团队成员 B 拉取代码后自动获得
     ↓ 使用中发现可以优化
团队成员 B 提交改进 PR
     ↓ 团队讨论 + 合并
所有人都受益于更好的 Skill

📌 定期回顾
建议每 1-2 个月回顾一次 Skills 库,进行必要的优化和清理:

检查项 操作
有没有从未被触发的 Skill? 考虑调整 description 或删除
有没有经常需要手动覆盖的 Skill? 指令可能需要优化
有没有新的重复模式还没有被 Skill 化? 考虑创建新 Skill
有没有两个 Skill 职责重叠? 考虑合并或重新划分边界

📌 命名一致性
保持团队内的 Skill 命名风格统一,这能显著提升可维护性。

✅ 统一风格
   security-audit
   perf-optimizer
   doc-generator

❌ 混乱风格
   security-audit
   optimizePerformance
   Doc_Gen

总结:好的 Skill 具备四个特征——职责单一、触发精准、可以验证、持续迭代。避免一次追求完美,从简单开始,让实践驱动优化。将 Skills 纳入版本控制和团队协作流程,让它成为团队共同维护的知识资产。

八、总结与展望

回顾:一张图看懂 Skills

                      ┌─────────────────────┐
                      │   什么是 Skills?     │
                      │   AI 的技能插件       │
                      └──────────┬──────────┘
                                 │
                ┌──────────────┼──────────────┐
                ▼              ▼              ▼
           ┌────────────┐ ┌──────────┐ ┌────────────┐
           │  结构组成   │ │ 工作机制  │ │  使用方式   │
           │            │ │          │ │            │
           │ SKILL.md   │ │ 自动匹配  │ │ 自动触发   │
           │ scripts/   │ │ 加载指令  │ │ 手动指定   │
           │ examples/  │ │ 执行步骤  │ │ 组合串联   │
           │ resources/ │ │ 交付输出  │ │            │
           └────────────┘ └──────────┘ └────────────┘
                                 │
                ┌──────────────┼──────────────┐
                ▼              ▼              ▼
           ┌────────────┐ ┌──────────┐ ┌────────────┐
           │  内置 Skills│ │ 自定义   │ │  最佳实践   │
           │            │ │          │ │            │
           │ 规划类      │ │ 定边界   │ │ 单一职责   │
           │ 开发类      │ │ 写指令   │ │ 精准触发   │
           │ 质量类      │ │ 加示例   │ │ 可验证     │
           │ 工作流类    │ │ 测迭代   │ │ 持续迭代   │
           │ 文档类      │ │          │ │            │
           └────────────┘ └──────────┘ └────────────┘

核心要点速记

# 要点 一句话总结
1 Skills 是什么 写给 AI 看的标准操作手册
2 最小组成 一个文件夹 + 一个 SKILL.md
3 触发方式 日常自动触发,关键时刻手动指定
4 编写原则 具体优于抽象,示例优于描述
5 迭代策略 从简单开始,让实践驱动优化
6 团队协作 纳入 Git,像管理代码一样管理 Skills

展望:Skills 的未来

Skills 机制代表了一种全新的人机协作范式——通过结构化的知识传递,让 AI 成为团队中真正的生产力成员

随着技术的演进,我们或许能看到:

  • 🔄 更智能的匹配 — AI 将能更精准地理解上下文,自动组合多个 Skills。
  • 🤝 跨团队共享 — 优质的 Skills 可以在像云栈社区这样的开发者社区中像开源库一样被分享和复用。
  • 📊 数据驱动优化 — 系统能基于使用数据自动识别出哪些 Skills 最有效、哪些需要优化。
  • 🔗 Skill 间协作 — Skills 之间可以声明依赖关系,实现自动化的执行编排。

立即开始

不要等待“完美时机”,现在就可以行动:

  1. 选一个你最频繁执行的重复性任务(比如写 commit message、做代码审查)
  2. 为它创建一个最小化的 Skill(只需一个 SKILL.md
  3. 实际使用 3-5 次,记录下哪些地方 AI 做得好,哪些地方需要更明确的指令
  4. 迭代优化,让你的 Skill 变得越来越“聪明”

记住:最好的 Skill 不是一次写出来的,而是一次次用出来的。




上一篇:寒武纪首年盈利豪派6亿分红,股价回撤三成背后投资者为何分歧?
下一篇:Funnull黑产复活:RingH23攻击链深度分析(苹果CMS/GoEdge投毒、Badnginx2s、Udev持久化)
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-26 16:05 , Processed in 0.528462 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表