searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

玩转 AI Coding(六):Skill 详解与实战

2026-05-11 18:33:37
49
0

什么是 Skill

Skill 英译为 技能,每一个Skill期望为Agent扩展一种 ​能够处理特定事务的能力​。

本质上,Skill 是用于指导AI大模型完成一个特定事务的 ​一套标准化流程 + 一组行为约束 + 一组基础工具/脚本 + 一组必要资源​。

其中:

  • 一套标准化流程​:定义完成该事务的步骤顺序 —— 先做什么、后做什么、最后做什么。这是AI的行动指南和路线图,确保执行路径清晰可控,不会跑偏。
  • 一组行为约束​:规定AI必须遵守的规则和边界 —— 哪些必须做、哪些绝对不能做、输出格式是什么、质量标准是什么。这是AI的 "军规",保障结果的规范性、安全性和一致性。
  • 一组基础工具/脚本​:提供AI可调用的具体能力,如函数、API、命令行工具或代码脚本。AI不需要从零实现每个步骤,直接调用这些工具即可高效完成子任务。
  • 一组必要资源​:提供完成任务所需的外部素材和知识,如配置文件、模板文件、规则库、数据字典、参考文档等。这些是AI工作时需要查阅和引用的"资料库"。

举个例子,在一家小公司,没有实施企业应用集成,每月发工资都是人事MM一笔一笔账核算出来的。大体有这些:

  1. 获取员工基本薪资表,做成 Excel 基表
  2. 获取员工的考勤数据,计算 请假、迟到、早退等导致的薪资扣发
  3. 获取员工项目奖金、绩效奖金相关数据,计算奖、惩情况与金额
  4. 汇总员工应发工资
  5. 导入社保抵扣项
  6. 计算个税
  7. 生成实发工资表

现在,有个 硅基员工 来接手这个枯燥的任务。
为了能够顺利交接任务,找了之前人事MM出了一个 《员工工资核算操作手册》,由以下四部分构成:

操作流程​:

  1. 从人事系统中,导出《部门员工及基础薪资表》,按计发工资年月进行命名,如 2026-05-员工工资表.csv。该步骤可以使用 download_member_salary.py脚本。
  2. 从考勤系统中,导出 《部门员工考勤统计表》,按计发工资年月进行命名,如 2026-05-员工考勤统计表.csv。该步骤可以使用 download_member_attendance.py脚本。
  3. 从人事系统,导出《部门员工奖金表》,按计发工资年月进行命名,如 2026-05-员工奖金表.csv。该步骤可以使用 download_member_bonus.py脚本。
  4. 汇总员工奖金、绩效奖金相关数据,计算奖、惩情况与金额,汇总员工考勤导致的薪资扣发情况与金额,并按员工工号合并到2026-05-员工工资表.csv
  5. 依据《2026年个税税率表》、《员工社保缴纳基数库》计算社保抵扣项,和个税申报、扣除金额,按员工工号合并到2026-05-员工工资表.csv
  6. 统计员工实发工资,按员工工号合并到2026-05-员工工资表.csv

要求与注意事项​:

  1. 需要申请各系统权限,获取登录授权码,并配置到脚本中。
  2. 实发工资必须保留两位小数
  3. 禁止修改考勤、奖金等原始数据
  4. 最终输出必须是UTF-8编码的CSV文件
  5. 过程数据保存到临时目录,处理完成后立即删除

工具脚本说明​:

脚本名称 功能说明 调用方式
download_member_salary.py 从人事系统导出基础薪资表 python download_member_salary.py --month 2026-05 --output ./data/
download_member_attendance.py 从考勤系统导出考勤统计表 python download_member_attendance.py --month 2026-05 --output ./data/
download_member_bonus.py 从人事系统导出奖金表 python download_member_bonus.py --month 2026-05 --output ./data/
merge_salary_data.py 合并工资、考勤扣款、奖金数据 python merge_salary_data.py --salary ./data/2026-05-员工工资表.csv --attendance ./data/2026-05-员工考勤统计表.csv --bonus ./data/2026-05-员工奖金表.csv --output ./temp/
calc_tax_and_social.py 计算社保和个税 python calc_tax_and_social.py --input ./temp/merged_salary.csv --tax-table ./config/tax_2026.json --social-base ./config/social_base.json --output ./temp/
calc_net_salary.py 计算实发工资并生成最终报表 python calc_net_salary.py --input ./temp/tax_social_deducted.csv --output ./output/2026-05-实发工资表.csv
cleanup_temp.py 清理临时目录 python cleanup_temp.py --temp-dir ./temp/

必要文件说明​:

文件名称 用途说明 格式/来源
2026年个税税率表 计算个人所得税的税率标准和速算扣除数 JSON格式,包含起征点、级距、税率、速算扣除数
员工社保缴纳基数库 每个员工的社保缴纳基数(养老、医疗、失业等) CSV格式,字段:工号、姓名、社保基数、公积金基数
系统授权码配置文件 存储各系统访问的token和授权信息 config/auth.json,需提前申请并配置
考勤扣款规则表 迟到、早退、事假、病假对应的扣款标准 config/deduction_rules.json

有了这本《员工工资核算操作手册》,硅基员工 就能按照固定流程,调用现成脚本,遵守各项约束,查阅必要文件,稳定、准确地完成每月工资核算任务,无需每次重新思考步骤,也不会因为“没经验”而出错。

而这个 面向 硅基员工 的《员工工资核算操作手册》本质就是一个 Skill

Skill 解决的核心问题

通过上面《员工工资核算操作手册》的例子,我们可以直观感受到,Skill 的作用,就是把重复的 ​指令、经验、流程​,变成​可版本化、可分发、可执行的文档和脚本​。

主要解决:

1. 消除重复指令

以往,相同的提示词,不同场景、不同项目、不同分支,甚至每个提交都 复制+粘贴 一遍。
写成 Skill 后 AI 自己加载,不用你再打字。比如"本项目禁止直接修改 production 分支的配置文件",写在 Skill 里,每次 AI 动手前都会读到。

2. 知识、经验传承

你踩过的坑、总结出的最佳实践、团队规定的流程,如果不写下来,就只能靠口口相传。人传人会衰减,AI 传 AI 也不会。Skill 把这些经验变成​可版本化、可共享、可迭代的有型资产​。

3. 提升效率

毫无疑问,团队通过将经过验证的技术、经验、流程,通过 Skill方式进行固化和分享,能够大幅度提升团队效率。
一方面,团队成员就可以站在巨人的肩膀上,大踏步前进,而不用把河底的石头再摸一遍;另一方面,同样的事情,不同的人处理的方式不一样效果也参差不齐,但现在大家都对着一套skill进行打磨,能够实现 1 + 1 > 2 的效果。

解剖一个 Skill

上一篇 《Superpowers 工程化实践》我们介绍了Superpowers通过一些列Skill,从而实现对所有变更进行标注化、流程化管理,使AI Coding从野路子走成正规军。

进入Superpowers 的 Skills 存放目录结构如下:

course6-skill-superpower-dir.png

核心是skills目录下的一些列skill实现。 下面我们就解剖 brainstorming 看一看Skill 的庐山真面目...

Skill的目录结构

tree 命令 展开 brainstorming 目录:

course6-skill-directory.png

其中 SKILL.md 文件是 Skill 的核心文件,每个一个Skill必备,除此之外,其他文件和目录都是可选的(按Skill需要进行扩展)。

比如,Superpowers 的 receiving-code-review Skill 就仅有一个 SKILL.md文件:

course6-skill-superpower-rv-dir.png

Skill目录中常见的目录和文件介绍如下(约定俗成的一些目录和文件):

目录/文件 类型 作用说明
SKILL.md 核心文件 这是 Skill 的"大脑",AI 首先读取此文件来理解该 Skill 的目标、流程、约束和行为模式
scripts/ 目录 存放可执行脚本(Python、Shell、Node.js 等)。AI 可调用这些脚本来完成具体子任务,如数据下载、文件处理、API 调用等
scripts/*.py 脚本文件 Python 脚本,用于数据处理、计算、文件操作等任务
scripts/*.sh 脚本文件 Shell 脚本,用于环境配置、服务启停、批量操作等系统级任务
scripts/*.js 脚本文件 Node.js 脚本,用于前端相关或 JavaScript 生态的工具
references/ 目录 存放参考文档和资源文件,供 AI 查阅和学习。这些不是直接执行的代码,而是提供上下文和知识支撑
references/*.md 参考文档 详细的说明文档、规范指南、最佳实践等,AI 在执行过程中可按需查阅
references/*.json 配置文件 结构化数据,如规则库、映射表、配置参数等
references/*.csv 数据文件 表格数据,如税率表、社保基数库、员工信息表等
assets/ 目录 存放静态资源文件,如模板、图片、样式文件等
assets/*.html 模板文件 HTML 模板,用于生成报告、页面或可视化内容
assets/*.css 样式文件 CSS 样式表,用于格式化输出内容
assets/*.png/*.svg 图片资源 图标、示意图等图像文件
templates/ 目录 存放代码模板或文件模板,AI 可基于这些模板生成输出文件
templates/*.template 模板文件 代码片段或文件结构模板,可包含占位符供 AI 替换填充
config/ 目录 存放配置文件,定义 Skill 的行为参数、环境变量、认证信息等
config/*.json/*.yaml 配置文件 Skill 的运行时配置,如 API 密钥、路径设置、开关选项等
tests/ 目录 存放测试脚本和测试数据,用于验证 Skill 的正确性
tests/test_*.py 测试文件 单元测试或集成测试脚本
tests/fixtures/ 测试数据目录 存放测试用的样例数据文件
docs/ 目录 存放 Skill 的说明文档、使用示例、架构设计等
docs/*.md 文档文件 详细的使用说明、设计文档、变更日志等
examples/ 目录 存放示例代码或示例输入输出,帮助用户理解如何使用该 Skill
examples/*.md 示例文件 使用示例场景的说明文档
examples/*.csv/*.json 样例数据 演示用的输入输出样例

SKILL.md

打开该文件,是一篇markdown 纯文本, 截取了一部分:

course6-skill-markdown.png

由于内容较多,我按章节进行了总结,大家可以对照查看

段落 说明
元数据 (Meta) Skill 的元数据,用于 Agent 识别和加载。包含核心字段:name(技能名称)、description(技能描述,说明何时及为何使用此技能)
硬性门禁 (HARD-GATE) 最核心的约束规则:在展示设计方案并获得用户批准之前,禁止调用任何实施技能、编写代码、搭建项目或采取任何实施行动。适用于所有项目,无论其看似多么简单
反模式说明 驳斥"太简单不需要设计"的错误观念。指出即使简单的项目(待办列表、单功能工具、配置更改)也必须经过设计流程,否则未审查的假设会导致大量无用功
检查清单 定义完成该 Skill 必须按顺序执行的 9 个步骤:探索上下文 → 提供可视化伴侣 → 澄清问题 → 提出方案 → 展示设计 → 编写文档 → 规格自审 → 用户审阅 → 过渡到实施
流程图 (Process Flow) 使用 DOT 语言描述的完整流程可视化,展示从探索上下文到调用 writing-plans 技能的所有分支路径和决策点
终态定义 明确 Skill 的终态是调用writing-plans技能。禁止调用其他实施技能(如 frontend-design、mcp-builder 等)
理解想法 如何探索和拆解用户需求:先查看项目状态、评估范围、识别多子系统项目并帮助分解、逐个提问、优先使用选择题、只关注目的/约束/成功标准
探索方案 提出 2-3 种不同方案,包含权衡分析,以对话方式推荐并解释理由
展示设计 按复杂程度分节展示设计(架构、组件、数据流、错误处理、测试),每节后征求反馈,准备回溯澄清
隔离性与清晰度设计 将系统分解为小而独立的单元,每个单元有单一目的、清晰接口、可独立理解和测试。大文件通常表示职责过多
现有代码库工作 先探索现有结构,遵循现有模式。针对影响工作的问题进行针对性改进,不做无关重构
文档编写 将验证后的设计保存到docs/superpowers/specs/YYYY-MM-DD-<主题>-design.md,使用清晰简洁写作技能(如有),提交到 git
规格自审 编写规格后检查四项:占位符扫描、内部一致性、范围检查、模糊性检查。内联修复后无需重新审阅
用户审阅门禁 要求用户审阅书面规格,等待回应。如要求更改则修改后重新运行审阅循环,只有用户批准后才继续
实施阶段 调用writing-plans技能创建详细实施计划,不调用任何其他技能
关键原则 六条核心原则:一次一个问题、首选选择题、无情遵循 YAGNI、探索备选方案、增量验证、保持灵活
可视化伴侣 基于浏览器的工具,用于展示线框图、图表、可视化选项。包括:提供方式(单独消息征得同意)、每个问题的决策标准(可视化用浏览器,文本用终端)、详细指南引用

注意,SKILL.md 元数据格式是固定的:

-------------------------
name: <技能名称>
description: "<技能描述>"
-------------------------

如何调用脚本或资源

brainstorming 有一个能力:在交互确认设计或方案是,Agent 可以将一些方案以表格或图形的方式,通过html 可视化的方式展示给用户,方便用户进行直观感受、review.
下面我们来分析一下,这个功能是如何运作的。

首先,SKILL.md中定义了该能力和触发的描述

SKILL.md中,我们看到如下描述:

course6-skill-visal-xxx.png

其大意是,浏览器可视化 是一个工具(辅助能力),而不是一种模式;需要询问用户(询问话术),并征得用户同意后,开启浏览器可视化。如果需要执行该操作,请参考 skills/brainstorming/visual-companion.md

visual-companion.md 触发脚本

进入skills/brainstorming/visual-companion.md 文件,可以看到该文件与SKILL.md 类似,也是针对场景和功能进行描述(引导AI如何执行具体的动作)。
How it Works 一节中,说明了如何触发脚本,实现可视化跟随

course6-skill-visal-xxx2.png

而脚本的功能是,启动一个服务端口,并绑定一个临时目录,AI在交互式过程中,会生成html文本,并保存到临时目录中,然后页面访问该端口,并展示该目录下的html文件。

上述是一个大体流程,细节我们就不再追溯了。

但有两个东西,可以提一嘴:

  1. 在Skill 中,调用脚本也是通过标注或说明的方式,不再是传统脚本间的调用(固定的,静态的)
  2. visual-companion.md 内容与SKILL.md 的内容本质是一样的;但是拆分为两个文件,是为了实现 ​渐进式加载​, 避免每次加载SKILL.md 都将 visual-companion.md 加载到上下文中。其一,上下文空间寸土寸金,这里浪费了,其他有用的信息就会被挤占;其二,无用的内容在上下文中,还会形成干扰。

实战 —— 开发一个golang 代码审查的Skill

需求与背景

部门的golang编码规范中,核心包括两部分:格式或风格规范 和 ​代码质量规范​。

course6-skill-fmt.png

其中格式或风格规范,可以借助 gofmt 命令进行校验,或一般基于静态代码检查的工具也能实现。但码质量规范,因为其具备较强的抽象性,或需要联系源代码上下文,甚至需要模拟运行过程才能识别,常规检查工具无法胜任。这部分review,目前还是依赖人工review。

需求​:
实现一个golang代码审查的Skill,能够对golang项目的代码,按照 《Golang 编码规范.docx》 中编码规范要求, 对代码进行review,并给出反馈。其中,【强制】类规则代码必须满足,如果不符合需要重点标记,并给出修复建议;【推荐】类规则代码尽量满足,如果不符合,需要给出建议,但不强制; 【建议】类规则代码尽量满足,如果不符合,需要给出提示

限制​:

  1. review 范围由用户指定(提交,分支,或文件), 如果不指定则默认view 当前工程中的所有golang文件
  2. 仅review,给出报告(含修复建议),但不能自动修改代码

实现

首先,将《Golang 编码规范.docx》整理为 golang-fmt.md,作为该skill 的资源文件。

然后,整理任务提示词:

实现一个golang代码审查的Skill,针对golang项目,按照
限制:

1. review 范围由用户指定(提交,分支,或文件), 如果不指定则默认view 当前工程中的所有golang文件
2. 仅review,给出报告(含修复建议),但不能自动修改代码

最后,采用 /writing-skills Skill 来创建该skill(复制上面的提示词):

course6-skill-create-pormpt.png

完成后,在工程的.opencode/skills 目录已生成该skill 文件。

course6-skill-gofmt-skill-dir.png

验证

将该skill copy到一个golang 工程中,并启动opencode,运行该skill对特定的commit 进行review

course6-skill-do-review-skill.png

效果:

course6-skill-review-skill-show.png

course6-skill-review-show-summary.png

写在最后

受篇幅限制,本篇课程主要以介绍Skill的基本内容和概念为主,并简单演示使用 writing-skills 技能(类似的还有skill-creator) 创建一个Skill。

实际上,好的Skill艺术成分是很高的。除了需要考虑:

  • Skill的功能分布,如何组织流程?
  • 如何触发,有哪些门禁?
  • 检查清单如何定义?
  • 需要哪些工具或脚本?
  • 说明 Skill 何时结束、下一步应该做什么?

还需要考虑,触发是否稳定、上下文是否精简、Token效率等等...

比如,有些内容可以有工具获取,也可以通过AI推导。这里是Token效率的关键,但有存在灵活性限制问题。
比如,在review skill中,review的内容可以通过git 工具以patch或diff的方式导出,也可以模糊化,由AI自己阅读文件或自行调用git 命令进行推导;如果我们通过脚本的方式提供git命令处理,那么token效率会很高;反之,如果由AI自己处理,那么获得较高的灵活性和适配性,但Token消耗会激增。
如何做好平衡是一个挑战...

这里仅举这个例子,事实上还有很多技巧和很多值得推敲的点...

本篇就先不展开了,后面争取再开一篇,可以展开聊聊。

0条评论
0 / 1000
huskar
28文章数
3粉丝数
huskar
28 文章 | 3 粉丝
原创

玩转 AI Coding(六):Skill 详解与实战

2026-05-11 18:33:37
49
0

什么是 Skill

Skill 英译为 技能,每一个Skill期望为Agent扩展一种 ​能够处理特定事务的能力​。

本质上,Skill 是用于指导AI大模型完成一个特定事务的 ​一套标准化流程 + 一组行为约束 + 一组基础工具/脚本 + 一组必要资源​。

其中:

  • 一套标准化流程​:定义完成该事务的步骤顺序 —— 先做什么、后做什么、最后做什么。这是AI的行动指南和路线图,确保执行路径清晰可控,不会跑偏。
  • 一组行为约束​:规定AI必须遵守的规则和边界 —— 哪些必须做、哪些绝对不能做、输出格式是什么、质量标准是什么。这是AI的 "军规",保障结果的规范性、安全性和一致性。
  • 一组基础工具/脚本​:提供AI可调用的具体能力,如函数、API、命令行工具或代码脚本。AI不需要从零实现每个步骤,直接调用这些工具即可高效完成子任务。
  • 一组必要资源​:提供完成任务所需的外部素材和知识,如配置文件、模板文件、规则库、数据字典、参考文档等。这些是AI工作时需要查阅和引用的"资料库"。

举个例子,在一家小公司,没有实施企业应用集成,每月发工资都是人事MM一笔一笔账核算出来的。大体有这些:

  1. 获取员工基本薪资表,做成 Excel 基表
  2. 获取员工的考勤数据,计算 请假、迟到、早退等导致的薪资扣发
  3. 获取员工项目奖金、绩效奖金相关数据,计算奖、惩情况与金额
  4. 汇总员工应发工资
  5. 导入社保抵扣项
  6. 计算个税
  7. 生成实发工资表

现在,有个 硅基员工 来接手这个枯燥的任务。
为了能够顺利交接任务,找了之前人事MM出了一个 《员工工资核算操作手册》,由以下四部分构成:

操作流程​:

  1. 从人事系统中,导出《部门员工及基础薪资表》,按计发工资年月进行命名,如 2026-05-员工工资表.csv。该步骤可以使用 download_member_salary.py脚本。
  2. 从考勤系统中,导出 《部门员工考勤统计表》,按计发工资年月进行命名,如 2026-05-员工考勤统计表.csv。该步骤可以使用 download_member_attendance.py脚本。
  3. 从人事系统,导出《部门员工奖金表》,按计发工资年月进行命名,如 2026-05-员工奖金表.csv。该步骤可以使用 download_member_bonus.py脚本。
  4. 汇总员工奖金、绩效奖金相关数据,计算奖、惩情况与金额,汇总员工考勤导致的薪资扣发情况与金额,并按员工工号合并到2026-05-员工工资表.csv
  5. 依据《2026年个税税率表》、《员工社保缴纳基数库》计算社保抵扣项,和个税申报、扣除金额,按员工工号合并到2026-05-员工工资表.csv
  6. 统计员工实发工资,按员工工号合并到2026-05-员工工资表.csv

要求与注意事项​:

  1. 需要申请各系统权限,获取登录授权码,并配置到脚本中。
  2. 实发工资必须保留两位小数
  3. 禁止修改考勤、奖金等原始数据
  4. 最终输出必须是UTF-8编码的CSV文件
  5. 过程数据保存到临时目录,处理完成后立即删除

工具脚本说明​:

脚本名称 功能说明 调用方式
download_member_salary.py 从人事系统导出基础薪资表 python download_member_salary.py --month 2026-05 --output ./data/
download_member_attendance.py 从考勤系统导出考勤统计表 python download_member_attendance.py --month 2026-05 --output ./data/
download_member_bonus.py 从人事系统导出奖金表 python download_member_bonus.py --month 2026-05 --output ./data/
merge_salary_data.py 合并工资、考勤扣款、奖金数据 python merge_salary_data.py --salary ./data/2026-05-员工工资表.csv --attendance ./data/2026-05-员工考勤统计表.csv --bonus ./data/2026-05-员工奖金表.csv --output ./temp/
calc_tax_and_social.py 计算社保和个税 python calc_tax_and_social.py --input ./temp/merged_salary.csv --tax-table ./config/tax_2026.json --social-base ./config/social_base.json --output ./temp/
calc_net_salary.py 计算实发工资并生成最终报表 python calc_net_salary.py --input ./temp/tax_social_deducted.csv --output ./output/2026-05-实发工资表.csv
cleanup_temp.py 清理临时目录 python cleanup_temp.py --temp-dir ./temp/

必要文件说明​:

文件名称 用途说明 格式/来源
2026年个税税率表 计算个人所得税的税率标准和速算扣除数 JSON格式,包含起征点、级距、税率、速算扣除数
员工社保缴纳基数库 每个员工的社保缴纳基数(养老、医疗、失业等) CSV格式,字段:工号、姓名、社保基数、公积金基数
系统授权码配置文件 存储各系统访问的token和授权信息 config/auth.json,需提前申请并配置
考勤扣款规则表 迟到、早退、事假、病假对应的扣款标准 config/deduction_rules.json

有了这本《员工工资核算操作手册》,硅基员工 就能按照固定流程,调用现成脚本,遵守各项约束,查阅必要文件,稳定、准确地完成每月工资核算任务,无需每次重新思考步骤,也不会因为“没经验”而出错。

而这个 面向 硅基员工 的《员工工资核算操作手册》本质就是一个 Skill

Skill 解决的核心问题

通过上面《员工工资核算操作手册》的例子,我们可以直观感受到,Skill 的作用,就是把重复的 ​指令、经验、流程​,变成​可版本化、可分发、可执行的文档和脚本​。

主要解决:

1. 消除重复指令

以往,相同的提示词,不同场景、不同项目、不同分支,甚至每个提交都 复制+粘贴 一遍。
写成 Skill 后 AI 自己加载,不用你再打字。比如"本项目禁止直接修改 production 分支的配置文件",写在 Skill 里,每次 AI 动手前都会读到。

2. 知识、经验传承

你踩过的坑、总结出的最佳实践、团队规定的流程,如果不写下来,就只能靠口口相传。人传人会衰减,AI 传 AI 也不会。Skill 把这些经验变成​可版本化、可共享、可迭代的有型资产​。

3. 提升效率

毫无疑问,团队通过将经过验证的技术、经验、流程,通过 Skill方式进行固化和分享,能够大幅度提升团队效率。
一方面,团队成员就可以站在巨人的肩膀上,大踏步前进,而不用把河底的石头再摸一遍;另一方面,同样的事情,不同的人处理的方式不一样效果也参差不齐,但现在大家都对着一套skill进行打磨,能够实现 1 + 1 > 2 的效果。

解剖一个 Skill

上一篇 《Superpowers 工程化实践》我们介绍了Superpowers通过一些列Skill,从而实现对所有变更进行标注化、流程化管理,使AI Coding从野路子走成正规军。

进入Superpowers 的 Skills 存放目录结构如下:

course6-skill-superpower-dir.png

核心是skills目录下的一些列skill实现。 下面我们就解剖 brainstorming 看一看Skill 的庐山真面目...

Skill的目录结构

tree 命令 展开 brainstorming 目录:

course6-skill-directory.png

其中 SKILL.md 文件是 Skill 的核心文件,每个一个Skill必备,除此之外,其他文件和目录都是可选的(按Skill需要进行扩展)。

比如,Superpowers 的 receiving-code-review Skill 就仅有一个 SKILL.md文件:

course6-skill-superpower-rv-dir.png

Skill目录中常见的目录和文件介绍如下(约定俗成的一些目录和文件):

目录/文件 类型 作用说明
SKILL.md 核心文件 这是 Skill 的"大脑",AI 首先读取此文件来理解该 Skill 的目标、流程、约束和行为模式
scripts/ 目录 存放可执行脚本(Python、Shell、Node.js 等)。AI 可调用这些脚本来完成具体子任务,如数据下载、文件处理、API 调用等
scripts/*.py 脚本文件 Python 脚本,用于数据处理、计算、文件操作等任务
scripts/*.sh 脚本文件 Shell 脚本,用于环境配置、服务启停、批量操作等系统级任务
scripts/*.js 脚本文件 Node.js 脚本,用于前端相关或 JavaScript 生态的工具
references/ 目录 存放参考文档和资源文件,供 AI 查阅和学习。这些不是直接执行的代码,而是提供上下文和知识支撑
references/*.md 参考文档 详细的说明文档、规范指南、最佳实践等,AI 在执行过程中可按需查阅
references/*.json 配置文件 结构化数据,如规则库、映射表、配置参数等
references/*.csv 数据文件 表格数据,如税率表、社保基数库、员工信息表等
assets/ 目录 存放静态资源文件,如模板、图片、样式文件等
assets/*.html 模板文件 HTML 模板,用于生成报告、页面或可视化内容
assets/*.css 样式文件 CSS 样式表,用于格式化输出内容
assets/*.png/*.svg 图片资源 图标、示意图等图像文件
templates/ 目录 存放代码模板或文件模板,AI 可基于这些模板生成输出文件
templates/*.template 模板文件 代码片段或文件结构模板,可包含占位符供 AI 替换填充
config/ 目录 存放配置文件,定义 Skill 的行为参数、环境变量、认证信息等
config/*.json/*.yaml 配置文件 Skill 的运行时配置,如 API 密钥、路径设置、开关选项等
tests/ 目录 存放测试脚本和测试数据,用于验证 Skill 的正确性
tests/test_*.py 测试文件 单元测试或集成测试脚本
tests/fixtures/ 测试数据目录 存放测试用的样例数据文件
docs/ 目录 存放 Skill 的说明文档、使用示例、架构设计等
docs/*.md 文档文件 详细的使用说明、设计文档、变更日志等
examples/ 目录 存放示例代码或示例输入输出,帮助用户理解如何使用该 Skill
examples/*.md 示例文件 使用示例场景的说明文档
examples/*.csv/*.json 样例数据 演示用的输入输出样例

SKILL.md

打开该文件,是一篇markdown 纯文本, 截取了一部分:

course6-skill-markdown.png

由于内容较多,我按章节进行了总结,大家可以对照查看

段落 说明
元数据 (Meta) Skill 的元数据,用于 Agent 识别和加载。包含核心字段:name(技能名称)、description(技能描述,说明何时及为何使用此技能)
硬性门禁 (HARD-GATE) 最核心的约束规则:在展示设计方案并获得用户批准之前,禁止调用任何实施技能、编写代码、搭建项目或采取任何实施行动。适用于所有项目,无论其看似多么简单
反模式说明 驳斥"太简单不需要设计"的错误观念。指出即使简单的项目(待办列表、单功能工具、配置更改)也必须经过设计流程,否则未审查的假设会导致大量无用功
检查清单 定义完成该 Skill 必须按顺序执行的 9 个步骤:探索上下文 → 提供可视化伴侣 → 澄清问题 → 提出方案 → 展示设计 → 编写文档 → 规格自审 → 用户审阅 → 过渡到实施
流程图 (Process Flow) 使用 DOT 语言描述的完整流程可视化,展示从探索上下文到调用 writing-plans 技能的所有分支路径和决策点
终态定义 明确 Skill 的终态是调用writing-plans技能。禁止调用其他实施技能(如 frontend-design、mcp-builder 等)
理解想法 如何探索和拆解用户需求:先查看项目状态、评估范围、识别多子系统项目并帮助分解、逐个提问、优先使用选择题、只关注目的/约束/成功标准
探索方案 提出 2-3 种不同方案,包含权衡分析,以对话方式推荐并解释理由
展示设计 按复杂程度分节展示设计(架构、组件、数据流、错误处理、测试),每节后征求反馈,准备回溯澄清
隔离性与清晰度设计 将系统分解为小而独立的单元,每个单元有单一目的、清晰接口、可独立理解和测试。大文件通常表示职责过多
现有代码库工作 先探索现有结构,遵循现有模式。针对影响工作的问题进行针对性改进,不做无关重构
文档编写 将验证后的设计保存到docs/superpowers/specs/YYYY-MM-DD-<主题>-design.md,使用清晰简洁写作技能(如有),提交到 git
规格自审 编写规格后检查四项:占位符扫描、内部一致性、范围检查、模糊性检查。内联修复后无需重新审阅
用户审阅门禁 要求用户审阅书面规格,等待回应。如要求更改则修改后重新运行审阅循环,只有用户批准后才继续
实施阶段 调用writing-plans技能创建详细实施计划,不调用任何其他技能
关键原则 六条核心原则:一次一个问题、首选选择题、无情遵循 YAGNI、探索备选方案、增量验证、保持灵活
可视化伴侣 基于浏览器的工具,用于展示线框图、图表、可视化选项。包括:提供方式(单独消息征得同意)、每个问题的决策标准(可视化用浏览器,文本用终端)、详细指南引用

注意,SKILL.md 元数据格式是固定的:

-------------------------
name: <技能名称>
description: "<技能描述>"
-------------------------

如何调用脚本或资源

brainstorming 有一个能力:在交互确认设计或方案是,Agent 可以将一些方案以表格或图形的方式,通过html 可视化的方式展示给用户,方便用户进行直观感受、review.
下面我们来分析一下,这个功能是如何运作的。

首先,SKILL.md中定义了该能力和触发的描述

SKILL.md中,我们看到如下描述:

course6-skill-visal-xxx.png

其大意是,浏览器可视化 是一个工具(辅助能力),而不是一种模式;需要询问用户(询问话术),并征得用户同意后,开启浏览器可视化。如果需要执行该操作,请参考 skills/brainstorming/visual-companion.md

visual-companion.md 触发脚本

进入skills/brainstorming/visual-companion.md 文件,可以看到该文件与SKILL.md 类似,也是针对场景和功能进行描述(引导AI如何执行具体的动作)。
How it Works 一节中,说明了如何触发脚本,实现可视化跟随

course6-skill-visal-xxx2.png

而脚本的功能是,启动一个服务端口,并绑定一个临时目录,AI在交互式过程中,会生成html文本,并保存到临时目录中,然后页面访问该端口,并展示该目录下的html文件。

上述是一个大体流程,细节我们就不再追溯了。

但有两个东西,可以提一嘴:

  1. 在Skill 中,调用脚本也是通过标注或说明的方式,不再是传统脚本间的调用(固定的,静态的)
  2. visual-companion.md 内容与SKILL.md 的内容本质是一样的;但是拆分为两个文件,是为了实现 ​渐进式加载​, 避免每次加载SKILL.md 都将 visual-companion.md 加载到上下文中。其一,上下文空间寸土寸金,这里浪费了,其他有用的信息就会被挤占;其二,无用的内容在上下文中,还会形成干扰。

实战 —— 开发一个golang 代码审查的Skill

需求与背景

部门的golang编码规范中,核心包括两部分:格式或风格规范 和 ​代码质量规范​。

course6-skill-fmt.png

其中格式或风格规范,可以借助 gofmt 命令进行校验,或一般基于静态代码检查的工具也能实现。但码质量规范,因为其具备较强的抽象性,或需要联系源代码上下文,甚至需要模拟运行过程才能识别,常规检查工具无法胜任。这部分review,目前还是依赖人工review。

需求​:
实现一个golang代码审查的Skill,能够对golang项目的代码,按照 《Golang 编码规范.docx》 中编码规范要求, 对代码进行review,并给出反馈。其中,【强制】类规则代码必须满足,如果不符合需要重点标记,并给出修复建议;【推荐】类规则代码尽量满足,如果不符合,需要给出建议,但不强制; 【建议】类规则代码尽量满足,如果不符合,需要给出提示

限制​:

  1. review 范围由用户指定(提交,分支,或文件), 如果不指定则默认view 当前工程中的所有golang文件
  2. 仅review,给出报告(含修复建议),但不能自动修改代码

实现

首先,将《Golang 编码规范.docx》整理为 golang-fmt.md,作为该skill 的资源文件。

然后,整理任务提示词:

实现一个golang代码审查的Skill,针对golang项目,按照
限制:

1. review 范围由用户指定(提交,分支,或文件), 如果不指定则默认view 当前工程中的所有golang文件
2. 仅review,给出报告(含修复建议),但不能自动修改代码

最后,采用 /writing-skills Skill 来创建该skill(复制上面的提示词):

course6-skill-create-pormpt.png

完成后,在工程的.opencode/skills 目录已生成该skill 文件。

course6-skill-gofmt-skill-dir.png

验证

将该skill copy到一个golang 工程中,并启动opencode,运行该skill对特定的commit 进行review

course6-skill-do-review-skill.png

效果:

course6-skill-review-skill-show.png

course6-skill-review-show-summary.png

写在最后

受篇幅限制,本篇课程主要以介绍Skill的基本内容和概念为主,并简单演示使用 writing-skills 技能(类似的还有skill-creator) 创建一个Skill。

实际上,好的Skill艺术成分是很高的。除了需要考虑:

  • Skill的功能分布,如何组织流程?
  • 如何触发,有哪些门禁?
  • 检查清单如何定义?
  • 需要哪些工具或脚本?
  • 说明 Skill 何时结束、下一步应该做什么?

还需要考虑,触发是否稳定、上下文是否精简、Token效率等等...

比如,有些内容可以有工具获取,也可以通过AI推导。这里是Token效率的关键,但有存在灵活性限制问题。
比如,在review skill中,review的内容可以通过git 工具以patch或diff的方式导出,也可以模糊化,由AI自己阅读文件或自行调用git 命令进行推导;如果我们通过脚本的方式提供git命令处理,那么token效率会很高;反之,如果由AI自己处理,那么获得较高的灵活性和适配性,但Token消耗会激增。
如何做好平衡是一个挑战...

这里仅举这个例子,事实上还有很多技巧和很多值得推敲的点...

本篇就先不展开了,后面争取再开一篇,可以展开聊聊。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0