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* : 是否存在信息的技能信息- 从里面我们可以发现其实就注意几个问题就可以了
技能描述功能描述(执行步骤)(必要的)
技能格式技能格式(这个是非必要的)
技能示例技能示例(必要的)
注意事项注意事项(必要的)
- 通常我们还会添加一个
要求,内容为必须按固定格式执行该技能这样可以提高ai调用的准确率
- 通常我们还会添加一个
- 当我们注意以上格式后即可写出一个skill了.
