图片

一、skill

在前面的文章中分析了什么是Skill。简单的理解它是为Agent提供标准化、程序化的控制。看上去它可能是一系列的md文件(它们形成了文件夹),但实际上它包含了三个重要的方面即元数据(用于对Skill的自身的描述)、指令(标准化的作业流程)和资源(应用的其它资源)。

二、如何调用Skill

无论一项技术如何先进,其最终的目的只是为了解决问题。如果这个技术无法解决实际的问题,那么它就没有存在的意义了。但在实际的应用中,往往会出现,Skill是用的,但是有些开发者自己写的Skill却没有被调用。这其实就脱离了开发者的最初的目的。那么如何才会调用自己写的skill呢?
这就要明白skill的渐进式披露即agent不是一下子把所有的skill都加载一遍的。首先Agent只会从目录索引中查找名字和描述来进行匹配,如果描述的不好,智能体就不会去调用相关的skill。因此就需要把skill的description写好,特别需要注意的是,要想写提示词一样明白,它是针对AI的而不是针对用户的。其次Agent中对描述的处理是有长度限制的,超过一定长度会自动截断。所以要在指定的范围内把相关的描述说清楚。最后要把相关涉及到skill目录的加载,包括各种工具、脚本等。需要在skill的脚本中将相关的位置描述清楚。

三、如何编写Skill

这里的编写skill不是说告诉大家怎么写文档,是要说明什么样的情况才适合于编写成skill。在Anthropic的相关博客中,给出重点的应用场景:

  1. 库和API的的应用
    固定的库或API的调用,不需要每次再重复在上下文中声明

  2. 对项目整体进行验证
    写一些单元测试等的验证工作,不需要开发者自行处理

  3. 数据查询分析
    对指定内容的查询并将分析结果反馈

  4. 业务流程的自动化
    流程化的东西是最适合skill的,它可以使用一条命令处理完成

  5. 代码的模板和框架
    代码模板的意义就在于skill的可复用,这和实际的场景的应用类似

  6. 代码的Review和Aduit
    引入AI自行进行代码质量的控制,也是skill的重要应用场景

  7. CI/CD集成部署
    流程化的东西,只不过是Agent统一调度即可不再需要人为参与

  8. Runbook故障排除
    对故障的排除,也可以引入固定的处理模板机制

  9. 基础设施的运维
    常见的运维在以前可以使用脚本来完成,这对于skill来说正是擅长的

其实还有不少的场景也可以引入skill,但可能局限性比较强,这里就不再一一说明。在实际编写skill时,需要注意的是不要把重复的低级的简单的东西反复写入skill。要限制skill的边界,尽量提供显式的Agent无法自行推断的相关逻辑。

四、高级应用

对于skill的应用过程中,其实还有一些高级的用法。这也是Anthropic提供的方法:

  1. 让skill保持状态
    在前面提到过,大模型啥的都是无状态的。调用一次后下一次又得重来,所以要想连续的应用,就需要skill有记忆,也就是要保存相关的数据进行持久化。即主动的将相关的数据信息写入到skill的配置或相关文件中去,实现数据的状态保存

  2. 让skill调用脚本
    skill是个标准化流程,是模板,所以它的优势不在于实现某个功能而处理功能的流程和结构。所以可以把实现功能的脚本放到skill的脚本调用中,让它发挥更大的优势。比如定时删除数据库中的数据就可以写成一个脚本来调用

  3. 让skill可以Hook
    钩子的优势大家都明白,它可以在用户需要的时刻激发设置的处理行为。它是一种后处理机制,是一种强制性的保证。它在skill被激活时才可以使用,在会话结束后就会消失。它的应用场景太多了,如为了保证安全阻止一些危险的命令

skill的应用就和其自身的渐时式披露一样,也不会是一下子在应用中铺开,它需要一个时间,甚至一个很长的时间来普及。甚至有可能在未来被更先进的机制给替代,所以不必为此有什么负担。

五、总结

其实对于很多Agent的应用开发者来说,借鉴官方或大牛们的方式是最简单的方法。不需要过多的自行编写和处理skill。要防止为了编写skill为去编写skill,因为它会比编码时的这种思想破坏力更大。关键是,这玩意它是要钱的。与诸君共勉!