
前言在总结Skill中的相关风险前我们先通过一篇的内容来看下什么是Skill对其有一个初步的认识。什么是SkillSkill翻译为技能的意思在AI邻域中Skill就是一个技能比如给Agent一个A技能那我们就需要拥有一个A技能的Skill相当于赋能而Skill的本质就是将提示词写到md文件中供Agent调用。这个提示词相当于我们的经验我们把一件事的流程和经验写好后存到md文件中相当于告诉Agent怎么去做这个事同时Skill也支持脚本的调用比如在md中指明处理某个细节时去调用某某脚本把脚本放到对应目录下即可。SKill有什么用Skill一定程度上相当于工作流比如dify、n8n的工作流对于一些任务可以用工作流但用Skill也可以实现当然并不是所有工作流能实现的都可以用Skill实现这里举例为了方便理解。那Skill有什么用呢可总结下面3点1、重复内容不必每次都说比如让AI写周报我们可能有格式要求、保存时的文件类型要求、语气要求等等这些写的时候这些要求要告诉它下周写的时候为了准确还要再告诉它一遍会重复冗余此时可以将这些要求形成Skill后续无需再额外说明直接调用Skill即可。2、技能更新时如果多处使用不必每一处都进行说明比如还是AI写周报可能每周的周报都是单独一个会话方便后期复盘总结但存储格式要修改例如excel要改为md此时每个会话都说明一遍会很繁琐使用SKILL时只需修改SKILL内容即可相关会话会自动用最新版。3、例如还是写周报如果开启了新会话则之前周报的要求还得重说一下但如果有了Skill直接调用Skill即可。可以看出需要统一要求时、或者动作重复时、经常做时可以做成Skill这里需要注意的是工具就可以搞定的比如图片之间格式转换图片压缩等这个直接使用工具即可没有必要做成Skill。另外一个技能只需要做一件事即可不建议将多个事情都写到一个Skill中要避免“万能”Skill否则不方便维护和优化Agent也容易出错。。SKILL有什么优势Skill之所以流行是因为大家发现它存在很多方便的地方1、相比传统提示词全量塞给模型会占用上下文空间而SKILL可以按需加载。2、传统提示词上下文就是唯一的工作空间所有的输入信息、处理信息、输出信息都堆积在一个聊天框而SKILL相当于让文件系统成为了智能体的外部记忆和工作台。3、传统提示词相当于单个任务如果需要和其它任务配合它是不知道其它提示词是什么而SKILL可以构建协同工作流多个技能互相配合各司其职。从而完成更复杂的任务。4、迭代积累和维护更方便不论多少会话都是从SKILL.md读取规则改完全局生效且文件支持版本管理可以持续迭代和优化。Skill示例下面来看下一个Skill的基本结构一个技能就是一个文件夹文件夹用小写字母和连字符-里面有一个SKILL.md的文件SKILL用全大写SKILL.md的基本架构如下--- name:weekly-report description: 生成周报当用户要求撰写周报、工作总结、工作汇报等内容时使用 --- 步骤:1. 确认用户本周完成了哪些任务2. 按表格格式输出任务|进度|备注3. 语气亲和像同事之间汇报工作4. 将文件保存为Markdown格式并存储到当前目录name技能的名称和文件夹名保持一致。description技能的简介说清楚技能是做什么的什么时候用。公式就是description 功能定义 触发场景/ 触发词—之间内容相当于元数据叫做YAML前置信息智能体启动时会进行查看以此来判断要调用哪个技能—之后就是技能正文正文要说明具体操作步骤、规则等内容。只有当确定了要调用哪个技能后正文部分才会被读取。这里关键就是description的编写一定要描述清楚其功能和触发场景否则智能体不知道要不要调用该技能。编写技能描述时可参考如下规则一个不好的description可能导致智能体无法精准识别加载了一个错的技能结果浪费时间消耗了Token。也可能出现智能体识别不出来认为用户需求自己就可以解决无需调用SKILL也导致浪费时间白白消耗Token。1、一定要遵循公式description 功能定义 触发场景/ 触发词2、写描述时不要用人称代词以陈述句直接描述功能即可比如“你可以用该技能来识别PDF并生成统计表格”这种就可以直接写为“识别PDF并生成统计表格”。3、同时描述不要写太长建议50-200个字。4、反向触发词当技能装的越来越多可能某个任务有多个技能都可以处理此时可以在描述中规定界限即什么情况下不要触发该技能。另外就是确定做一个Skill时自己要很熟悉这个技能的整个流程不如很难写出稳定的技能同时写Skill前应该先确认相关信息如下1、问题确定要解决什么问题。2、场景谁在什么时候用。3、输入需要输入哪些信息。4、输出技能需要产生什么。5、规则有哪些相关的约束。6、禁止清单绝对不能做什么。按需加载SKILL的按需加载机制也叫做渐进式披露启用即加载智能体启动时会将技能的YAML前置信息加载上随后用户发指令后大模型会根据指令内容来决定使用哪个技能。用到再加载当确定使用某个技能后此时智能体会去加载这个技能的正文内容并进行执行。必要时再加载当技能复杂时可能不止一个SKILL.md文件可能还有一些关联文件比如references目录下放的md参考文档scripts目录下放的py脚本文件assets目录下放的图片、pdf等静态资源。这些关联文件可能是在触发到具体任务时才需要使用不触发就不使用所以是必要时再加载。具体怎么触发可以在SKILL.md中说明比如需要XXX时就调用scripts/test.py文件进行处理这里路径说明时建议使用从技能根目录出发的相对路径且只引用一层即可。不要出现A引用BB又引用C的嵌套引用可能会导致智能体混乱不知道要做什么也会加大Token开销。和MCP区别在智能体中会涉及到一些概念如下提示词用户给AI下发的指令。大模型智能体的大脑负责思考、推理和下达指令。上下文智能体处理当前任务时所要处理的信息集合。工具智能体能调用的相关工具比如内置工具、扩展工具。技能写给智能体看的具体的任务操作手册。MCP外部工具接入智能体时的统一对接标准。这里Skill和MCP容易搞混总结一句话就是Skill是告诉智能体具体怎么做MCP让各种外部工具接入到智能体便于智能体去调用。SKILL使用的一些技巧1、虽然智能体启动只加载技能的元数据但如果SKILL过多则也会占用上下文空间官方建议上限是安装20~50个技能如果元数据是中文则理论汉字占空间更多需要进一步减少。所以可以根据需求来关闭一些技能。同时采用分层管理比如常用的技能可以放全局目录项目具体用到的技能可以放到项目技能目录下避免智能体启动加载所有SKILL。2、SKILL.md文件最好控制正文长度可以进行拆分不同功能放到关联文件中建议长度在5000个token内中文在3800字内避免正文内容太大占用上下文。3、技能一旦被使用它的内容就会存在于当前会话的上下文连续使用多个复杂技能对上下文占用是巨大的可以适当开启新会话来避免该情况。总结所以Skill装的其实就是自己的经验以文本和代码形式给到智能体供其调用。以上就是Skill安全系列之Skill基础感谢阅读。小枣信安专注AI安全包括但不限于大模型安全、智能体安全、机器人安全、AI赋能网络安全等欢迎一起学习。