从 Prompt 到工程化技能包:AI Skills 标准与 Continue 落地

从 Prompt 到工程化技能包:AI Skills 标准与 Continue 落地

随着 AI 编程助手在嵌入式开发场景的深度应用,零散的个人 Prompt 已经难以满足团队级别的标准化、工程化需求。AI Skills 作为一种通用的智能体能力封装格式,已成为 Claude、Continue、Cursor 等主流 AI 开发工具共同支持的事实标准。本文将从基础规范、实战示例到 IDE 落地全流程,系统讲解 AI Skills 的核心功能与使用方法。

一、Skills 基础知识详解

1.1 核心定义与三层加载机制

AI Skills 是一种将 AI 指令、可执行脚本、参考文档和资源文件打包封装的标准化格式,核心价值在于实现 AI 能力的可复用、可分享、可工程化管理,解决了传统 Prompt 零散混乱、上下文占用高、难以团队同步的问题。

其核心设计理念是渐进式披露机制(Progressive Disclosure),通过三层加载架构在保证能力完整性的同时,可降低 60%-80% 的上下文 Token 消耗:

层级 加载内容 加载时机 Token 量级 核心作用
L1 发现层 YAML 元数据(name + description) AI 启动时预加载 约 100 Token 用于判断「是否需要调用该技能」
L2 激活层 SKILL.md 完整 Markdown 指令 任务匹配到该技能时自动加载 数百至数千 Token 注入详细执行步骤、规则和输出标准
L3 执行层 scripts、references、assets 等资源文件 执行具体子任务时按需加载 无固定上限 提供代码脚本、模板文件、知识库等执行资源

1.2 标准目录结构

一个标准的 Skill 以独立文件夹为单位,遵循统一的目录结构规范:

复制代码
skill-name/                  # 技能根目录,名称必须与 name 字段一致
├── SKILL.md                 # 【必需】唯一入口文件,包含元数据 + 核心指令
├── scripts/                 # 【可选】可执行脚本目录(Python/Shell 等)
│   └── helper.py
├── references/              # 【可选】参考文档、规范标准、知识库
│   └── coding-standard.md
└── assets/                  # 【可选】模板、图片、字体等静态资源
    └── module_template.h

对于仅包含指令的简单技能,可以只保留 SKILL.md 单个文件,无需额外子目录,同样符合规范要求。

1.3 SKILL.md 文件格式全解析

SKILL.md 是 Skill 的核心入口,采用 YAML 前置元数据 + Markdown 指令正文 的固定结构。文件开头用 --- 包裹 YAML 元数据区域,之后为 Markdown 格式的执行指令。

1.3.1 YAML 元数据字段详解

元数据是 AI 识别和调度 Skill 的核心依据,所有字段均定义在文件开头由 --- 包裹的 YAML 区域内。各字段的整体信息汇总如下:

字段名称 是否必需 数据格式 核心作用
name 字符串(kebab-case) 技能唯一标识符,用于智能体识别、调用与索引
description 字符串 描述技能功能与适用场景,是自动触发匹配的核心依据
license 字符串 声明技能的开源许可证类型
metadata 键值对对象 扩展信息区,存放版本号、作者、标签等自定义属性
allowed-tools 字符串(空格分隔) 权限控制,指定该技能允许调用的工具集合
compatibility 字符串数组 标注技能兼容的 AI 运行平台

以下对每个字段进行详细说明:

name(必需字段)
  • 字段说明:技能的唯一标识符,用于智能体的识别、调用和索引

  • 格式约束:仅支持小写字母、数字和连字符(kebab-case 命名法),最大长度 64 字符,必须与技能文件夹名称完全一致

  • 错误示例Name: 驱动代码生成器(包含中文、大写、空格均不符合规范)

  • 正确示例

    name: driver-module-generator

description(必需字段)
  • 字段说明:技能的功能描述 + 适用场景,是 AI 判断是否触发该技能的核心依据

  • 格式约束:最长 1024 字符,推荐结构为「触发场景 + 核心功能 + 产出价值」

  • 反面示例description: 生成C代码(描述过于模糊,无法精准触发)

  • 正确示例

    description: 根据硬件寄存器定义自动生成符合 MISRA C 规范的驱动模块代码,包含头文件、源文件和错误处理逻辑。适用于用户提供寄存器地址表、位域定义或 SFR 说明时使用。

license(可选字段)
  • 字段说明:技能的开源许可证标识

  • 使用示例

    license: MIT

metadata(可选字段)
  • 字段说明:自定义扩展信息区,采用键值对格式,可存放版本号、作者、标签等附加信息

  • 使用示例

    metadata:
    version: "1.2.0"
    author: "embedded-dev-team"
    tags: ["autosar", "driver", "misra-c"]

allowed-tools(可选字段)
  • 字段说明:预批准工具列表,用于权限控制,指定该技能允许调用的工具集合

  • 格式约束:空格分隔的工具名称字符串

  • 使用示例

    allowed-tools: Read Write calculator Bash

compatibility(可选字段)
  • 字段说明:兼容的 AI 平台列表,用于标注技能支持的运行环境

  • 使用示例

    compatibility:
    - Claude Code
    - Continue
    - Cursor

1.3.2 Markdown 指令正文规范

元数据之后为 Markdown 格式的执行指令,通常包含以下标准模块,清晰的模块划分能让 AI 更准确地执行指令:

模块名称 模块作用 编写要点
角色定位 设定 AI 执行该技能时的身份与专业背景 明确领域、职级、技术栈,让 AI 进入对应专家角色
适用场景 明确技能的触发条件与使用边界 分别列出「触发条件」和「不适用场景」,减少误触发
工作流程 分步骤的执行逻辑与操作规范 按编号分步,每步明确输入、处理动作和输出
输出规范 输出格式、模板和质量要求 给出固定模板、命名规则、格式约束,保证输出一致性
注意事项 边界情况、异常处理、禁忌规则 列出常见错误、安全红线、异常处理方式
资源引用 关联技能目录内的文件 指向 scripts/、references/、assets/ 中的具体文件

标题层级遵循统一约定:全文仅使用一次一级标题(#),功能模块统一使用二级标题(##),细分内容使用三级标题(###)。统一的标题层级是 AI 正确识别模块边界的关键。

二、实战示例:驱动模块代码生成 Skill

下面以嵌入式开发中最常用的「硬件驱动模块代码生成」为例,创建一个完整可用的 Skill。

2.1 技能目录结构

plaintext 复制代码
driver-module-generator/
├── SKILL.md
├── references/
│   └── misra-c2012-rules.md
└── assets/
    └── templates/
        ├── driver_template.h
        └── driver_template.c

注:

  • 标准里的 assets/通用资源兜底目录,适合存放图片、字体、通用模板等混合类型资源
  • 当技能的资源类型非常单一时(比如这个例子里只有代码模板文件),直接用 templates/ 命名比笼统的 assets/ 语义更明确,可读性更强
  • 这种命名方式属于规范允许的「自定义子目录扩展」------AI 加载时只会以 SKILL.md 为入口,内部的资源目录名可以通过指令正文里的路径来引用,不影响技能的识别和运行。

2.2 SKILL.md 完整内容

plaintext 复制代码
---
name: driver-module-generator
description: 根据硬件寄存器定义自动生成符合 MISRA C 规范的驱动模块 C 代码,包括头文件和源文件,支持寄存器读写、位操作、错误处理和初始化函数。适用于用户提供寄存器地址映射表、位域定义或 SFR 说明时使用。
license: MIT
metadata:
  version: "1.0.0"
  author: "embedded-dev-team"
  tags: ["embedded", "driver", "c-code", "misra"]
allowed-tools: Read Write
---

# 驱动模块代码生成技能

## 角色定位
你是资深嵌入式系统驱动开发工程师,精通 8/32 位 MCU 底层驱动开发,严格遵循 MISRA C 2012 编码规范,具备硬件抽象层(HAL)设计经验。

## 适用场景

### 触发条件
- 用户提供了完整的寄存器地址映射表
- 用户描述了外设的寄存器位域定义
- 用户要求生成某个硬件模块的驱动代码
- 用户上传了寄存器定义头文件

### 不适用场景
- 应用层业务逻辑代码生成
- 操作系统内核代码开发
- 非 C 语言的代码生成需求

## 工作流程

### 步骤 1:解析输入信息
1. 提取外设名称(如 GPIO、UART、SPI)
2. 识别寄存器总数、地址偏移、访问权限
3. 解析每个寄存器的位域定义(位宽、读写属性、复位值)
4. 确认目标芯片平台和编译器环境

### 步骤 2:生成头文件 (.h)
1. 生成标准头文件守卫(#ifndef 模式)
2. 定义寄存器基地址和偏移量宏
3. 定义位掩码和位偏移宏
4. 声明对外接口函数原型
5. 定义错误码枚举类型

### 步骤 3:生成源文件 (.c)
1. 包含对应头文件
2. 实现初始化函数(默认寄存器配置)
3. 实现寄存器读写函数
4. 实现位操作函数(置位、清零、翻转)
5. 添加参数校验和错误处理

### 步骤 4:质量检查
1. 核对 MISRA C 规范符合性
2. 检查指针操作安全性
3. 验证宏定义命名一致性
4. 确认注释完整性

## 输出规范

### 文件命名规则
- 头文件:`{module_name}_driver.h`
- 源文件:`{module_name}_driver.c`

### 代码格式要求
- 缩进使用 4 空格
- 宏定义全部大写,使用模块名作为前缀
- 函数名采用小写 + 下划线风格
- 每个函数必须包含功能说明、参数、返回值注释

### 模板引用
生成代码时请严格以 Skill 目录内的模板文件为基准:
- 头文件模板:`templates/driver_template.h`
- 源文件模板:`templates/driver_template.c`

将模板中的占位符(`@MODULE@`、`@BASE_ADDR@`、`@REG_OFFSETS@` 等)替换为实际解析出的寄存器值后输出,不得改动模板的整体结构和注释格式。

## 注意事项
1. 寄存器地址必须使用无符号长整型后缀(UL)
2. 所有指针参数必须进行 NULL 校验
3. 禁止在头文件中定义全局变量
4. 位操作必须使用宏定义,禁止直接使用魔法数字
5. 生成代码前必须确认用户提供的寄存器信息完整

2.3 配套模板文件示例

templates/driver_template.h

c 复制代码
/**
 * @file @MODULE@_driver.h
 * @brief @MODULE@ 外设驱动程序头文件
 * @version 1.0.0
 */

#ifndef @MODULE_UPPER@_DRIVER_H
#define @MODULE_UPPER@_DRIVER_H

#include <stdint.h>
#include <stdbool.h>

/* 寄存器基地址 */
#define @MODULE_UPPER@_BASE_ADDR    (0x@BASE_ADDR@UL)

/* 寄存器偏移量 */
@REG_OFFSETS@

/* 位域定义 */
@BIT_DEFINITIONS@

/* 错误码 */
typedef enum
{
    @MODULE@_OK = 0,
    @MODULE@_ERROR_PARAM,
    @MODULE@_ERROR_TIMEOUT,
    @MODULE@_ERROR_BUSY
} @MODULE@_status_t;

/* 接口函数声明 */
@FUNCTION_DECLARATIONS@

#endif /* @MODULE_UPPER@_DRIVER_H */

三、VS Code + Continue 插件使用 Skills 完全指南

Continue 是目前对 Skills 规范支持最完善的 VS Code 插件之一,支持项目级和全局两级技能配置,能够无缝将自定义技能融入日常开发流程。

3.1 环境准备

步骤 1:安装 Continue 插件
  1. 打开 VS Code 扩展面板(快捷键 Ctrl+Shift+X / Cmd+Shift+X
  2. 在搜索框输入 Continue,找到官方插件并点击安装
  3. 安装完成后,左侧边栏会出现 Continue 图标(蓝色气泡样式)
步骤 2:基础配置
  1. 按快捷键 Ctrl+L / Cmd+L 打开 Continue 聊天面板
  2. 点击输入框上方的模型选择下拉菜单
  3. 点击齿轮图标进入配置文件 config.yaml
  4. 在配置文件中填写你的 API Key 并保存

3.2 Skills 存放路径与优先级

Continue 支持两个级别的 Skills 配置,分别对应不同的作用范围:

配置级别 存放路径 作用范围 适用场景
项目级 项目根目录/.continue/skills/ 仅当前项目生效 项目专属规范、团队共享技能
用户级 Mac/Linux:~/.continue/skills/ Windows:%USERPROFILE%\.continue\skills\ 所有项目通用 个人效率工具、通用工作流

当两级存在同名技能时,项目级技能优先级高于用户级,会覆盖全局配置。

3.3 安装自定义 Skill 的两种方法

方法一:手动创建
  1. 在项目根目录创建技能存放目录:

    mkdir -p .continue/skills/driver-module-generator

  2. 将编写好的 SKILL.md 文件放入该目录

  3. 保存文件后,Continue 会自动监听配置变化,无需重启 VS Code

方法二:使用 skills CLI 工具
  1. 全局安装 Skills 命令行工具:

    npm install -g @skills/cli

  2. 搜索社区公开技能:

    npx skills search code-review

  3. 将技能安装到当前项目:

    npx skills install code-review

3.4 Skills 的两种调用方式

方式一:自动语义触发

直接在聊天框中用自然语言描述需求,Continue 会根据 description 字段自动匹配并加载对应的 Skill,整个过程无需手动干预。

示例对话

帮我生成一个 GPIO 模块的驱动代码,寄存器基地址是 0x40020000,包含 MODER、OTYPER、OSPEEDR、PUPDR 四个寄存器。

Continue 收到请求后会自动识别并加载 driver-module-generator 技能,按照技能定义的流程生成代码。

方式二:斜杠命令手动触发

在聊天输入框中输入 /,会弹出所有可用技能的列表,选择对应技能即可强制触发,适合需要明确指定技能的场景。

复制代码
/driver-module-generator 生成 SPI 驱动代码

3.5 完整实战演示

第 1 步:打开聊天面板

Ctrl+L / Cmd+L 调出 Continue 侧边聊天栏。

第 2 步:输入需求描述
复制代码
帮我生成一个 UART 驱动模块,寄存器信息如下:
- 基地址:0x40013800
- 寄存器列表:
  - SR (0x00):状态寄存器
  - DR (0x04):数据寄存器
  - BRR (0x08):波特率寄存器
  - CR1 (0x0C):控制寄存器1
  - CR2 (0x10):控制寄存器2
- 需要实现功能:初始化、发送字节、接收字节、查询标志位
第 3 步:观察执行过程

Continue 会自动完成以下动作:

  1. 匹配到 driver-module-generator 技能
  2. 加载完整的 SKILL.md 指令
  3. 按照工作流程逐步解析寄存器信息
  4. 生成符合规范的头文件和源文件
第 4 步:应用生成的代码

生成的代码块下方会带有操作按钮:

  • Apply to current file:直接替换当前打开的文件
  • Insert at cursor:在光标位置插入代码
  • Copy:复制代码到剪贴板

3.6 进阶:轻量 Slash Commands

除了完整的 Skill,Continue 还支持更轻量的 Slash Commands(斜杠命令),存放在 .continue/prompts/ 目录下,适合简单的一次性指令。

示例:创建代码审查命令

文件路径:.continue/prompts/code-review.md

复制代码
---
name: code-review
description: 对当前文件进行 MISRA C 规范审查
---

请审查当前打开的 C 代码文件,重点检查以下内容:
1. MISRA C 2012 规则符合性
2. 空指针解引用风险
3. 数组越界访问问题
4. 未初始化变量使用
5. 魔法数字使用

输出格式:
- 问题位置
- 违反规则
- 修复建议

使用时在聊天框输入 /code-review 即可触发。

3.7 常见问题排查

问题现象 可能原因 解决方法
输入需求后技能不触发 description 描述过于模糊 优化 description 字段,明确触发场景和功能
输入 / 后看不到技能 目录结构或命名错误 检查文件夹名是否与 name 字段一致,路径是否正确
生成结果不符合规范 指令正文约束不足 SKILL.md 中补充更多输出规则和正反示例
新增技能后不识别 目录扫描缓存未刷新 执行 Continue: Reload Skills 命令,或重启 VS Code
自定义技能目录不生效 config.yaml 修改后未保存 保存配置文件后重新加载

总结

AI Skills 本质上是一种工程化的提示词体系,它将零散的 Prompt 转化为标准化、可复用、可分享的能力单元。通过规范的目录结构、元数据机制和渐进式加载,Skills 解决了传统 Prompt 难以管理、上下文爆炸、复用性差等核心问题。

对于嵌入式开发团队来说,将编码规范、设计模式、最佳实践固化为可执行的 AI Skills,能够让每一位成员都获得一致的、专家级别的代码生成质量,大幅提升团队开发效率与代码一致性。从小而专的单一技能开始,逐步迭代优化,是落地 AI Skills 最高效的路径。


专注输出嵌入式开发领域的硬核技术与工程化实践,所有内容均来自一线开发经验,不做泛泛空谈。

相关推荐
淬炼之火12 分钟前
笔记:Visually-Guided Policy Optimization for Multimodal Reasoning
人工智能·笔记·算法·机器学习·语言模型·自然语言处理
STLearner18 分钟前
KDD 2026 | (2月轮)时空数据(Spatial-Temporal)论文总结时空(交通)预测,轨迹数据挖掘(表示,生成)
论文阅读·人工智能·python·深度学习·学习·机器学习·数据挖掘
学习星球18 分钟前
空天地一体化网络(NTN)深度解析:从Starlink D2C到3GPP NTN,卫星直连手机是如何实现的?
网络·人工智能·算法·智能手机·php
Liudef0626 分钟前
腾讯混元Hunyuan3D-Part:重新定义3D部件生成的革命性架构
人工智能·3d·架构·腾讯混元hunyuan3d
zhangjin112026 分钟前
NLP英文分词
人工智能·自然语言处理
爱分享的康康27 分钟前
端到端自动驾驶仿真平台选型:确定性、传感器保真与车规合规实践
人工智能·机器学习·自动驾驶
科技林总29 分钟前
提示词测评落地全流程
人工智能·算法
LorryJovens31 分钟前
【LAAP白皮书】面向web 4.0的LAAP 活计算自适应感知协议技术与市场发展白皮书(概要)
人工智能