AI Agent技术领域迎来标志性突破,基于Skill范式构建的通用Agent——OpenClaw,以卓越的实战表现为这一理念树立了全新标杆。Skill概念因OpenClaw的横空出世而迅速破圈,成为业界关注焦点。
追溯Skill的起源,其根脉深植于Anthropic去年发布的Agent Skills规范。这一规范旨在解决的核心问题,远不止通用大模型在垂直场景中“知其然却不知其所以然”的局限,更深层的战略意图在于将能力从提示词中剥离出来,实现一次彻底的结构化能力封装。通过独特的“渐进式披露”机制,Agent能够按需加载并精准调用各项能力,既有效避免上下文窗口被无限撑爆,又能稳健可靠地完成复杂任务。
这股技术风潮迅速席卷AI Coding工具圈,各大头部产品纷纷跟进适配Agent Skills规范。巧的是,我最近一直在使用的主力开发工具正是Code Buddy,索性借此机会,从实战操作层面,将这套机制的落地细节进行全方位拆解。
案例业务背景与开发环境搭建
首先搭建一个虚构但高度贴近企业真实应用场景的案例——企业职工数据分析。假设开发一套企业职工综合分析包,核心覆盖三大维度:职工增减员分析、工资变动分析、社保缴纳分析。每个维度的分析均需先拉取原始数据,进行加工计算,最后输出专业结论。
基于该场景,将每一种分析都设计成独立的Skill,每个Skill都包含特定的处理流程。随后借助Code Buddy驱动这些Skill的加载与执行,以此反向推导其运行原理。
- Skill 1:企业职工增减员分析技能
name:employee-change-analysis
description:本技能用于分析企业职工数量变化趋势。根据输入的企业信息(纳税人识别号、企业名称),调用MCP服务获取近3年的职工数量(当年及前两年),进行纵向对比分析,判断企业长期人员变化趋势。
触发词包括:企业职工分析、职工增减分析、员工数量变化、增员减员分析、职工变化趋势、人员流动分析、企业用工分析、职工对比分析、人数变化判断、企业人员趋势。
- Skill 2:企业职工工资变化分析技能
name:employee-wage-analysis
description:本技能用于分析企业职工工资变化趋势。根据输入的企业信息(纳税人识别号、企业名称),调用MCP服务获取近3年的职工工资数据(当年及前两年同期),进行同比分析,判断企业是处于涨薪、稳定还是降薪状态。触发词包括:企业职工分析、工资分析、工资变化、涨薪降薪分析、薪资对比分析、职工薪资变化、工资趋势分析、企业薪酬分析、薪资水平评估、企业薪酬长期趋势。
- Skill 3:企业职工社保分析技能
name:employee-social-insurance-analysis
description:本技能用于分析企业职工社保缴纳情况。根据输入的企业信息(纳税人识别号、企业名称),先调用 MCP 服务获取企业员工某个月的社保数据,再将数据传递给【企业职工社保分析】Agent进行深度分析,最终生成明确的合规性结论。触发词包括:社保分析、企业社保、社保缴纳、社保合规、社保检查、社保缴纳情况、职工社保分析、社保缴纳分析、社保是否正常、社保缴纳状态。
- Skill 4:企业职工综合分析技能
name:enterprise-fiscal-analysis
description:本技能用于对企业进行全面的职工综合分析,整合人员、社保、工资三个维度的分析结果,生成统一的企业职工情况健康度评估报告。触发词包括:企业财税分析、财税综合分析、企业健康度评估、财税全景分析、企业经营分析、企业用工分析、企业综合分析、财税三维分析、人员社保工资分析、企业用工成本分析、职工全景分析、财税报告。
Coding Agent:Code Buddy IDE/CLI
大模型:Auto(GLM/Kimi/MinMax/DeepSeek)
MCP服务:三个本地服务(获取职工数量、获取职工工资、获取职工社保),用于模拟远程接口调用。
{"mcpServers": {"get_employee_count": {"url": "https://127.0.0.1:8002"},"get_employee_wage": {"url": "https://127.0.0.1:8003"}"get_employee_social_insurance": {"url": "https://127.0.0.1:8004"}}}
SubAgent:企业职工社保分析,主要通过简单的描述来指导需要分析的企业社保缴纳情况。
案例Skill形态与验证范围详解
以Skill2(企业职工工资变化分析技能)为例,其整体结构如下:
SKILL.md文件中装载的内容如下:
核心工作流程如下:
接下来,基于上述Skill的设计,组合几种典型的应用场景,逐一对Code Buddy进行验证:Skill的匹配逻辑、如何触发调用MCP服务、如何触发调用SubAgent、如何触发调用其他Skill,以及Skill中脚本调用的安全性表现究竟如何。
验证1 - Skill匹配逻辑深度测试
首先提出一个模糊的查询:“帮我进行企业职工分析”。
结果如何?大家通常知道Agent通过Skill的description进行匹配。这次特意在Skill1和Skill2中都加入了触发词“企业职工分析”,但Code Buddy只匹配到了Skill1,Skill2完全没有被触发。
接着尝试更精确的查询:“帮我进行企业职工数量、职工工资分析”。
这一次,Skill1和Skill2都被成功匹配并加载。
根据Code Buddy官方文档,AI选择Skill的逻辑描述如下。但实践发现,当多个技能的触发词出现重叠时,用户仍需要提供更精准的提示词,才能确保触发到自己期望的那个Skill。
验证2 - Skill中MCP服务调用机制
提问:“帮我进行企业职工人员分析 企业名称:keyu科技有限公司,纳税人识别号:91310000710XXXXXP”。
Code Buddy顺利匹配到Skill1,并严格按照Skill的描述逻辑,先调用MCP服务获取近3年的职工数量,随后进行深度分析并生成专业报告。
由此可见,在Code Buddy中,Skill触发MCP调用是完全可行的。只需在Skill.md文件中编写清晰的MCP调用描述,Agent即可自动匹配并执行。例如,Skill1中的描述就是按照此逻辑设计的。
验证3 - Skill中SubAgent调用流程
提问:“帮我进行企业职工社保分析 企业名称:keyu科技有限公司,纳税人识别号:91310000710XXXXXP”。
Code Buddy成功匹配到Skill3,执行流程非常清晰:先调用MCP服务获取原始数据,再触发SubAgent(企业职工社保分析)进行深度剖析,最后输出明确结论。
此次验证表明,Code Buddy中的Skill也可以顺畅地调用SubAgent。
有趣的是,Skill3中关于Agent调用的描述是AI自动生成的,它写成了一个Python的task函数,形式上看起来很正规。但翻阅官方文档,根本找不到关于这个函数的任何说明。官方仅提供了以下有限描述。因此推测,Code Buddy很可能是通过中文描述匹配到SubAgent,然后在Coding Agent内部发起调用。至于底层的具体实现,用户层面是看不到的。
验证4 - Skill之间相互调用的实现
提问:“帮我进行企业综合分析企业名称:keyu科技有限公司,纳税人识别号:91310000710XXXXXP”。
Code Buddy匹配到了Skill4(企业财税综合分析技能),然后按照预设的业务逻辑,并行调用了另外3个技能(Skill1、Skill2、Skill3)分别进行分析,最后汇总成一份综合结论报告。
这充分证明了Skill内部可以触发并协调其他Skill的执行。
同样的问题也出现在SubAgent的调用上——虽然AI在调用说明中使用了use_skill这种方式,但官方文档中同样查不到相关信息。因此基本可以判定,Skill之间相互调用的逻辑,本质上是AI理解用户需求后,由Coding Agent代为发起和执行。
验证5 - Skill中脚本执行的安全性评估
先说明背景:Code Buddy IDE中未发现安全相关的配置,但CLI版本下存在安全提示。因此场景5是在Code Buddy CLI环境下运行的。根据官方说明,~/.bashrc文件是不允许被随意修改的。
基于这一点,在Skill1中嵌入了一段测试沙箱的脚本。
- 首先在不开启沙箱的环境下执行
提问:“帮我进行企业职工人员分析,注意使用到技能中的脚本进行计算分析,企业名称:keyu科技有限公司,纳税人识别号:91310000710XXXXXP”。
从执行日志可以看到,~/.bashrc处于可写状态,模型还弹出了提示,询问是否继续执行。
- 开启沙箱环境后再次测试
提问:“帮我进行企业综合分析企业名称:keyu科技有限公司,纳税人识别号:91310000710XXXXXP”。
这次日志显示,~/.bashrc已变为不可写状态,沙箱环境验证通过,后续业务逻辑正常执行。
Code Buddy的Bash沙箱基于sandbox-runtime这一开源项目实现,项目地址为https://github.com/anthropic-experimental/sandbox-runtime。该沙箱运行时可以作为开源npm包应用于其他智能体项目。当然,Code Buddy在安全设计上的功能远不止这些,有兴趣的读者可以自行查阅官方文档,此处不再赘述。
Code Buddy中Skill的实现原理深度推测
完成这几轮验证后,结合任务执行时留下的日志记录,我对Code Buddy中Skill的实现逻辑已经形成了较为清晰的整体判断。下面绘制了一张执行流程图,虽然略显复杂,但配合以下步骤说明会更容易理解。
用户输入Prompt后,Agent首先调用LLM进行推理,LLM输出包含Skill名称和参数的tool_call;随后Tool Router接收该调用,并查询Skill Registry。如果发现对应的Skill尚未加载,则立即调用Skill Loader进行动态加载。
接着进入Skill的执行阶段(即ReAct Loop)。LLM根据Skill中的工作流说明进行任务规划,将大任务拆解为具体步骤,并明确每一步需要调用的工具或子能力,从而形成一个完整的执行计划。
对于需要调用工具和子能力的任务,Router会分发到对应的执行器——可能包括本地函数执行、MCP远程调用,或者子Agent调用。每一步的执行结果都会回传给LLM,由LLM思考后决定下一步的操作。
这个循环会一直持续,直到当前Skill的工作流全部执行完毕。
Skill执行完成后返回结果,该结果再回传给LLM。LLM根据结果决定是继续调用下一个Skill(进入下一轮循环),还是直接输出最终结果。
由于Code Buddy是闭源的,上述流程中的推断如果有不准确之处,欢迎Code Buddy的开发者积极批评指正!
本系列说明:本系列将持续实践不同AI Agent(如Code Buddy、OpenClaw、OpenCode、Hermes Agent等)中Skill的实现机制,结合完整的实战案例,深入剖析Skill的底层原理,层层揭开其核心技术面纱。
