Skill

一个不同用途的提示词就是一个Skill。Skill本身就是一个文件夹,文件夹里有一个叫SKILL.md的文件存的就是提示词本身。

可能有非常多Skill,我们不能把所有SKILL.md一块都发给AI。

给Skill写简短的介绍,这个介绍就放在SKILL.md文件,文件内容最开始的位置,叫做 metadata。

metadata的内容要求尽可能的简短,只需要概括skill的作用就可以了。

例如

  1. 用户向网站问 如何做豆浆?
  2. 服务端给LLM发一些SKILL的metadata 我支持一下SKILL 关于如何写菜谱 关于如何读论文 …,如何做豆浆?
  3. LLM一看有写菜谱SKILL,而问的问题是 如何做豆浆。
  4. LLM进行ToolCall 读取关于如何写菜谱的SKILL。
  5. 服务端再把SKILL追加到历史消息中再返给LLM。
  6. LLM输出按照SKILL方式输出做豆浆菜谱。
  7. 服务端将LLM生成的豆浆菜谱返给用户。

为什么要单独有个文件夹来存放SKILL.md文件呢。

可以将提示词划分到多个md文件中,防止一个SKILL.md直接导致上下文过长。md可以多层嵌套,比如SKILL.md引用 cookware.md , cookware.md 也可以引用其他的md。

./
├── SKILL.md
├── cookware.md
├── recipe.md
└── taste.md

SKILL.md

SKILL.md
metadata 关于如何写菜谱
具体到克
写出每一步时间
豆浆必须是甜的

厨具在cookware.md
口味在taste.md
菜谱在recipe.md

cookware.md

cookware.md
我有微波炉

taste.md

taste.md
我爱吃什么
我爸爱吃什么
我妈爱吃什么

recipe.md

recipe.md
红烧牛肉菜谱
红烧鸡肉菜谱
红烧猪肉菜谱
红烧羊肉菜谱
红烧鱼肉菜谱

例如

  1. 用户问客户端把这个abc.pdf转成图片
  2. 客户端把 我支持一下SKILL 关于如何写菜谱 关于如何操作pdf 把这个abc.pdf转为图片 给LLM
  3. LLM 通知客户端执行命令 cat pdf/SKILL.md
  4. pdf/SKILL.md pdf->png 命令是 pdf_to_img_py_src_pdf dst.png
  5. LLM通知客户端执行命令 pdf_to_img_py_src_pdf dst.png

还有更好的,就是在 pdf/SKILL.md 不提供特定写好的命令,而是命令LLM自己写代码去实现,下载软件等等。

Skill本身,只是一个管理提示词的工具,通过把metadata也就是提示词介绍发给AI,让LLM了解有哪些提示词可以用。LLM再根据用户的问题,按需读取完整的提示词。