Skip to content

skill的详细开发

skill的介绍

  • 正如前面所讲,skill 其实就是一个 prompt(提示词).
  • 可能你会想到很火的skill协议,但是有些不一样. 因为我们存储skill的列表并没有存储在 SKILL.md里面。
  • 我们存储skill的列表是在 skill_list.json 文件夹里面.
  • 因为这样能够方便我们的导入到gui界面中来显示出来,从而方便调整是否能被ai调用
  • 而目前的 SKILL.md 更多是一个例子.
  • 后续我们也会通过这个例子来讲解一下skill的开发

CAUTION

SKILL.md 虽然说是有个例子,但是这个文件是不可删除的,应为有些调用是需要基于这个例子的

NOTE

当然,你如果明白了后续的介绍,那么你是可以修改里面的功能的.(通常不建议这样,因为可能会发生一些意料之外的事情)

TIP

对了, skill_list.json 这里面也存储 py脚本的调用信息.

skill的运作方式

NOTE

skill并不会提前写入记忆中,只是需要时才被调用

  • 软件在运行时,会先将 skill_list.json 先存入ai的记忆中(注:随着skill_list.josn里面的内容改变,ai的记忆也会改变)

CAUTION

如果过大的 skill_list.json 会导致ai的记忆占用过多,从而导致ai的运行速度变慢或者上下文变短(即存入的内容过多)

  • skill_list.json 是在每次会话时都会被刷新然后写入到 system 中,而不是ai记忆的 user 或者 assistant
  • 这样做的目的是为了提高ai对这些工具调用的准确性
  • 当ai检测到需要调用工具时,会先从 skill_list.json 中获取信息,如果skill_list.json里面要调用的这个工具存在skill,那么就还会调用这个skill

NOTE

这里的skill调用是指将这个skill写入到ai的记忆中.然后ai再根据这个记忆来回答用户的问题

  • 当ai确认要调用工具后会生成一个新的临时对话来处理调用
  • 当ai这个临时对话通过skill回答完用户的问题后就会返回结果给主ai中,让其总结临时对话返回的结果,最终回复给用户

上面就是skill的运作全流程了

如何设计一个skill

TIP

关于设计我们后面会参考 SKILL.md 这个文件来设计

  • 首先我们看看SKILL.md 文件
点我查看代码
md
# 你可以使用外部工具查询实时信息,例如高铁票、天气等。如果需要,请直接调用相关工具。如果没有相关工具请查找下面的技能列表。

## 技能列表

### 1. 系统操作技能

#### 1.1 Windows命令执行
- **格式**: `[USE_cmd:命令内容]`
- **示例**: 
  - `[USE_cmd:dir]` - 查看目录内容
  - `[USE_cmd:py a.py]` - 运行Python脚本
- **注意事项**: 中括号和冒号必须严格按照格式使用

#### 1.2 应用程序启动
- **功能**: 能够查找并启动Windows应用程序
- **查找路径**: 
  - 用户桌面路径
  - 公共用户桌面路径
  - 特殊处理微信等常用软件
- **格式**: `[USE_cmd:C:\\path\\to\\your\\shortcut.lnk]`
- **注意事项**: 
  - 默认用户名为Administrator
  - 中文软件通常在公共桌面查找
  - 微信名称根据系统语言确定

### 2. 文件操作技能

#### 2.1 代码文件写入
- **write_code指令**: 
  - 格式: `[USE_cmd:write_code 文件名 代码内容]`
  - 功能: 创建新的代码文件并写入内容
  - 编码: 自动处理UTF-8编码和转义字符

#### 2.2 文件内容追加
- **echo指令**: 
  - 单次写入: `[USE_cmd:echo '内容' > 文件名]`
  - 追加写入: `[USE_cmd:echo '内容' >> 文件名]`
  - 功能: 向文件写入或追加内容
  - 缓存机制: 支持连续echo指令的缓存处理

### 3. 多媒体交互技能

#### 3.1 图片生成
- **格式**: `[DRAW:图片内容描述]`
- **功能**: 根据描述生成图片
- **限制**: 生成图片时不能同时生成文字内容

### 4.获取天气技能

#### 4.1 获取当前位置天气的技能
- **功能**: 获取当前位置信息,并返回给用户
- **格式**: `[Weather:LocalWeather]`
- **要求**: 必须按固定格式执行该技能
- **注意事项**: 该技能会返回当前位置天气的具体信息

#### 4.2 获取指定位置天气的技能
- **功能**: 获取指定位置的天气信息
- **格式**: `[Weather:CityName]`
- **要求**: 必须按固定格式执行该技能
- **注意事项**: 该技能会返回指定位置天气的具体信息,CityName需要替换为实际城市名称

### 5. 更多技能列表的提示

- **提示**:后面的均为更多技能列表,该列表是一个json格式
#### 更多列表参数描述
- *discription* : 技能描述
- *format* : 技能格式
- *example* : 技能示例
- *attention* : 技能注意事项
- *usage* : 技能使用方法
- *AI_can_use* :你是否可以使用这个技能
- *detailed_info* : 是否存在信息的技能信息
  • 从里面我们可以发现其实就注意几个问题就可以了
    1. 技能描述 功能描述(执行步骤)(必要的)
    1. 技能格式 技能格式(这个是非必要的)
    1. 技能示例 技能示例(必要的)
    1. 注意事项 注意事项(必要的)
    1. 通常我们还会添加一个 要求,内容为 必须按固定格式执行该技能 这样可以提高ai调用的准确率
  • 当我们注意以上格式后即可写出一个skill了.

评论