文章目录
- 前言
- 1.什么是skill
- 2.skill的结构
- 2.1 文件头元数据
- 2.2工作流
- 2.3输出格式
- 2.4约束
- 3.skill的获取
- 4.实操环节
- 碎碎语
前言
在这个AI发展迅速的时代,很多人盲目的追逐高效,比如skill。无意间看到某个skill的介绍,就直接给ai一段prompt"帮我安装这个skill",并不了解这个skill的组成,是如何工作的。本文主要介绍,如何手动创建一个专属的skill。
1.什么是skill
OpenAI 官方目前对 Skill 的定义是
把可重复使用的指令和辅助文件组织起来,让 ChatGPT/Agent 在遇到对应任务时按照固定流程执行。
也就是
Skill = 给 AI 保存下来的一套“做事流程”
如果你经常需要干一个重复性的工作,你就可以把他封装成一个skill,这样每次他就能直接按照你封装的流程来进行执行,而不是每次都需要你告诉他该怎么执行。
这里举一个简单的例子来说明:
比如你经常需要让ai做一件事:
“我给你一段 Python 报错,你先解释报错,再定位问题,再给修改代码,最后告诉我怎么验证。”
正常情况下,你每次都需要输入这么长的提示词来进行控制,而且每次输出的结果还是略有差异。
有了skill,就可以固定化它的执行流程,下次直接调用这个skill就可以了。这也是很多人为什么说skill就是一个高效的提示词的原因。
2.skill的结构
最简单的skill ,其实就只是一个文件夹,里面包含一个SKILL.md文件。复杂的结构还会包含:references/放参考资料,scripts/放可重复执行的程序,assets/放模板等资源。
本文主要介绍最简单的形式,只包含SKILL.md文件的skill。
2.1 文件头元数据
SKILL.md文件开始是用---包起来的 YAML 格式的配置区,作用是让agent在不读正文的情况下就判断"这个 skill 能不能用、什么时候用"。
一般包含两个部分:
- name:创建这个技能的名字
- description:对应这个技能的描述,包含这个技能能干什么,什么时候使用它
2.2工作流
这个也是真正控制AI的地方,也就是技能的SOP(标准操作流程)
比如:
- 接收用户输入:xxx
- 第一步:xxx
- 第二步:xxx
- 第三步:xxx
2.3输出格式
这里是控制AI最终怎么回答用户,不至于每次返回的格式都有差异。这也是skill重要的价值之一——稳定。
2.4约束
就是给这个skill设置一个边界条件,哪些事情不能做,完成前做的检查。
3.skill的获取
现在市面上有很多skill,很多人也是直接使用安装现有的skill。另一种方式便是创建新的skill,这种方式也包含两种:
- 现在大多agent里都会自带一些skill,其中一个skill就是创建技能让ai辅助你创建一个新的技能。
- 自己手动创建。
而本文主要讲解后者。
4.实操环节
这里的环境是windows+ChatGPT桌面端。
1.首先创建一个目录,在该目录下创建文件夹,比如:
./skill-learning/my-first-skill
2.在这个文件夹下创建文件SKILL.md
按照上述介绍的各个部分内容,比如我要写一个论文阅读助手的skill。那么就可以根据你的需求,按照如下格式来写:
---name:paper-reading-helperdescription:Analyze and explain academic papers,including their motivation,problem,methodology,experiments,results,and contributions. Use this skill when the user uploads a research paper,provides the title of a paper,provides a paper link,or asks for an explanation or introduction to a specific paper.---# Paper Reading HelperUse this skill when the user wants to understand,analyze,or study an academic paper.## Workflow1. 判断论文来源:-判断用户是否上传了论文文件、提供了论文链接,或者只提供了论文标题。-根据不同的论文来源选择对应的论文获取方式。 2. 获取并确认论文内容:-如果用户上传了论文文件,则直接读取并解析论文内容,包括标题、摘要、正文、公式、图表和参考信息。-如果用户提供了论文链接,则访问该链接并获取论文内容。-如果用户只提供了论文标题,则在网络上检索论文,并结合标题、作者、发表年份和发表来源确认论文身份。-如果检索结果唯一且与用户提供的信息高度匹配,则直接继续分析。-如果存在多个可能匹配的论文,或者无法可靠确定论文身份,则列出候选论文并让用户确认后再继续。-不要在没有获得论文内容的情况下,仅根据标题猜测论文的具体方法和实验结果。 3. 解释研究背景与研究问题:-介绍论文所属的研究领域和基本背景。-明确论文具体想要解决什么问题。-介绍解决该问题时已有的主流方法或技术路线。-分析现有方法存在的主要不足。-对用户可能不熟悉的专业概念进行解释。 4. 解释研究动机:-解释为什么这个问题值得解决。-解释现有方法为什么不能很好地解决该问题。-找出作者提出新方法的直接原因。-说明作者希望通过新方法解决哪些已有方法的不足。-区分“研究背景”和“研究动机”,避免将两者混为一谈。 5. 详细解释论文方法:-首先从整体上介绍论文提出的方法和完整处理流程,让用户先建立整体认识。-然后按照论文中的处理顺序逐步解释各个核心模块。-说明每个模块的输入、处理过程和输出。-解释各个模块之间的关系以及数据如何在模块之间流动。-对论文中的关键公式进行解释,包括公式中的主要变量、公式的作用以及为什么这样设计。-根据论文类型解释训练过程、推理过程或算法执行过程。-对较复杂的方法使用简单示例、类比或具体数据帮助用户理解。-如果论文包含模型架构图、流程图或算法伪代码,应结合这些内容进行解释,而不是只依赖正文描述。 6. 分析实验设计与实验结果:-说明论文使用了哪些数据集以及这些数据集的作用。-说明论文选择了哪些 baseline 或对比方法。-解释论文使用的主要评价指标以及这些指标代表什么。-分析论文的主要实验结果,并解释不同方法之间的差异。-如果存在消融实验,解释每个消融实验验证了什么。-如果论文包含效率、推理速度、参数量、FLOPs、显存、计算资源或其他性能实验,也应进行分析。-不要只复述实验表格中的数字,要解释这些实验结果说明了什么。-判断实验结果是否能够支持作者提出的方法和主要结论。 7. 总结核心贡献与创新点:-总结论文最重要的贡献。-提取作者在论文中明确声称的贡献。-分析相比已有工作,该论文真正新增或改进了什么。-区分“作者声称的贡献”和“从论文内容分析得到的实际创新”。-避免把普通的工程组合或已有技术直接描述成重大理论创新。 8. 分析局限性和后续改进方向:-优先查找论文中明确提到的 limitations、discussion 和 future work。-根据实验结果分析论文目前仍然存在的问题。-分析方法在哪些数据、场景或条件下可能表现不好。-总结作者明确提出的未来研究方向。-在论文内容的基础上,可以进一步提出合理的潜在改进方向。-必须明确区分“论文作者提出的未来工作”和“根据论文分析得到的改进建议”。-不要把自行推测的改进方向描述成作者的观点。## Output论文:<论文标题>### 研究背景-论文所属领域-要解决的具体问题-现有主流方法-现有方法存在的问题### 研究动机-为什么这个问题值得解决-现有方法为什么还不够-作者提出新方法的直接原因### 研究方法-整体方法框架-核心模块-关键公式-模块之间的数据流-训练或推理过程### 实验-数据集-Baseline-评价指标-主实验结果-消融实验-效率实验-实验结论### 创新点-作者声称的贡献-相比已有工作的实际创新### 局限与改进-论文明确指出的局限-作者提出的未来工作-根据论文分析得到的潜在改进方向## Rules-不得凭空编造任何实验、数据、指标、结果、模型结构或论文中未出现的内容。-在开始系统讲解之前,应尽可能完整阅读整篇论文,而不是只依赖摘要、引言或结论。-如果因为文件缺失、页面无法访问、内容截断等原因无法完整获取论文,必须明确告诉用户当前可读取的范围,不能假装已经阅读完整论文。-不得编造作者未表达过的观点、结论、研究动机或未来工作。-如果某个结论属于基于论文内容做出的分析或推测,必须明确标注为“分析”或“推测”,不能表述成作者原文观点。-不要机械照搬论文中的专业术语和复杂表述。-应优先使用通俗、直观、适合初学者理解的语言解释复杂概念。-对必须保留的专业术语,应先给出术语名称,再用简单语言解释其含义。-对关键公式不能只抄公式,应解释公式中的主要变量、公式在方法中的作用以及作者为什么这样设计。-对实验结果不能只罗列数字,应解释数字之间的差异说明了什么,以及是否支持论文的主要结论。-内容覆盖要求输出的全部内容,严格按照输出格式进行表述。3.将这个文件移动至agent能够发现的位置,比如
.\skill-learning.codex\skills\paper-reading-helper\SKILL.md
4.在当前项目中启动work,使用/paper-reading-helper调用当前skill
5.验证运行结果,结果如下图所示,确实按照指定格式返回的输出结果。
至此,你已完成手动创建一个skill。
备注:当前skill的生效范围是当前项目的目录下,并不是全局skill,如果想将其变成全局skill,则需要将这个skill移动至C:/Users/c/.codex/skills/.system/目录下。
碎碎语
在当今这个大模型发展迅速的时代,我们学习新知识的途径似乎越来越单一了。以前我们学习新的知识一般从课上、书本上、各种网站上,比如CSDN这个平台。但是渐渐的,我发现这些途径所能学到的还是受限的,越来越多的人也不愿意在这些平台进行分享。大家似乎都转移到了问AI,这个部分。对于一个问题,你没有理解或者明白,那就是这个AI不行,换一个AI。一方面,这种学习非常快,而且直击痛点,不需要你学习你想了解之外的内容,可以说把时间利用到了极限,另一方面,越来越多的博主也不愿意去做这部分工作,这也是我很长一段时间没有更新的一个原因。