AI编程Skills原理解析:从Function Call到子智能体实现

从Function Call到Skills:拆解Cursor Skills的技术本质与实现原理
本文从Function Call出发,逐步拆解Cursor Skills的技术本质。Function Call解决"怎么调用",MCP解决"调哪里",Skills解决"怎么编排复杂任务"。Skills本质是对Function Call的巧妙封装,通过Markdown文件实现提示词的模块化管理和按需加载,让大模型能处理多步骤任务。Spring AI Alibaba已内置Skills实现,可对接任意大模型。
引言
在AI编程领域,Cursor的Skills功能正在改变开发者与大模型交互的方式。很多人知道Skills好用,但对其底层原理知之甚少。本文将从Function Call出发,逐步拆解Skills的技术本质,并展示如何通过Spring AI Alibaba对接任意大模型来实现Skills功能。

Tools:解决"怎么调用"的问题
Function Call的本质
大模型本身无法获取实时信息。当我们让大模型查询北京天气时,它会经过推理判断是否有可用的Tool来处理当前对话。找到匹配的Tool后,大模型会返回一段结构化的JSON信息,包含Tool对应的方法名称和所需参数(如查询位置"北京")。
Function Call(函数调用)是OpenAI在2023年6月首次引入GPT API的能力,随后被各大模型厂商广泛采用。其核心思想是让大模型在推理过程中,当判断需要外部信息或执行特定操作时,生成一段符合预定义schema的JSON输出,而非直接生成自然语言回复。这段JSON包含函数名和参数,由客户端应用程序负责实际执行。
应用程序识别到这段JSON后,通过反射机制找到对应方法并执行调用。反射机制(Reflection)是Java等语言中在运行时动态获取类信息并调用方法的技术,使得应用程序可以根据大模型返回的函数名字符串,动态定位并执行对应的方法。Tool的本质就是将非结构化的自然语言转化为可处理的结构化JSON信息,让大模型间接调用应用程序中的方法。
MCP:解决"调哪里"的问题
当我们需要查询GitHub项目信息、博客内容、地图位置等第三方服务时,为每个服务单独声明Tool方法的成本极高。问题在于:
- 第三方服务数量庞大,对应的Tool方法实现工作量巨大
- 多个AI应用程序之间无法共享Tool方法,需要重复实现
MCP(Model Context Protocol)的出现解决了这个问题。MCP由Anthropic于2024年11月发布,是一个开放标准协议,其设计灵感来源于LSP(Language Server Protocol)——LSP统一了IDE与编程语言服务的交互方式,而MCP则统一了AI应用与外部工具服务的交互方式。
MCP提供了STDIO和HTTP(包括SSE和Streamable)两种调用方式。STDIO方式通过标准输入输出流在本地进程间通信,适合本地工具;HTTP SSE(Server-Sent Events)方式支持远程服务调用,服务端可以持续推送事件给客户端;Streamable HTTP是后续引入的更灵活的传输方式,支持无状态和有状态两种模式。这让大模型能以统一方式对接第三方服务的共享Tools。
但需要注意的是,MCP依然离不开Function Call——对大模型而言,它不区分外部Tool还是内部Tool,所有的都是工具。
Skills:Workflow模式下的子智能体
为什么需要Skills
当大模型的任务不再局限于调用单个Tool,而是需要经过一系列工作流才能完成时,传统方式需要通过大量提示词告诉大模型如何拆分任务、每一步如何处理。例如让大模型搜索网络信息,需要拆分为:打开浏览器→输入搜索关键词→获取网页内容→推理返回结果。这些提示词极其庞大。
Claude团队意识到这个问题后推出了Skills。
Skills的结构
Skill是一个Markdown文件,包含两部分:
- 元数据:定义当前Skill的作用(如"网络搜索"、"文件处理")
- 指令:详细编排每一步的执行方式,包括调用哪些Tool、执行哪些脚本(Python/JS)等
Skills的工作原理
Skills的核心优势在于按需加载,而非一次性将所有提示词发送给大模型:
- 首先将每个Skill的元数据(即作用描述)发送给大模型
- 大模型根据用户请求推理出需要哪个Skill
- 返回调用
CoreSkill的JSON信息,携带Skill名称 - 应用程序中的
CoreSkill方法根据名称读取对应的Markdown文件 - 将Markdown内容发送给大模型,大模型再推理执行具体步骤
关键洞察:Skills本质上依然沿用Function Call机制,只是内部提供了一个内置的Function Call来读取对应的Skill文本,然后返回给大模型进行推理。因此,必须有支持Function Call的大模型才能支持Skills。
Skills也被称为Sub-agent(子智能体),它是整个大智能体中的一环,且非常方便传输和共享。Sub-agent概念源自多智能体系统(Multi-Agent System)架构,在这种架构中,一个主智能体(Orchestrator)负责理解用户意图并分发任务,多个子智能体各自负责特定领域的任务执行。这种设计模式在AutoGPT、CrewAI、MetaGPT等框架中被广泛采用。Skills作为子智能体的优势在于其轻量级——仅用一个Markdown文件就定义了一个专业领域的完整工作流,相比传统多智能体框架的复杂配置大大简化。
Spring AI Alibaba实战:对接任意大模型
代码实现
虽然Skills最初由Claude推出,但了解原理后,我们可以通过Spring AI Alibaba结合Tools对接任意大模型来实现。Spring AI Alibaba是阿里巴巴基于Spring AI框架开发的扩展项目,旨在为Java开发者提供便捷的AI应用开发体验。Spring AI本身是Spring生态在2023年底推出的AI集成框架,提供了统一的API抽象层来对接不同的大模型提供商。Spring AI Alibaba在此基础上增加了对通义千问等国内大模型的原生支持,并集成了MCP、Skills等前沿能力,使得企业级Java应用可以快速接入AI能力。
在最新版本的Spring AI Alibaba中,框架已经内置了Skills的实现:
- 定义Skill Agent Hook:指定Skill文件的根目录路径,框架会自动读取所有Skill的Markdown文件
- 定义Shell命令执行Hook:因为Skill可能需要执行Python等脚本语言
- 配置Python工具支持:通过RawVM提供的第三方库来执行Python代码
实际演示效果
以"搜索蛋白质折叠预测的最新论文"为例,整个执行流程如下:
- 大模型读取对应Skill的Markdown文件
- 发现需要执行Python脚本
- 自动检测Python环境是否就绪
- 运行Python脚本访问arXiv网站搜索论文
- 首次搜索结果不理想时,自动推理问题原因
- 检查脚本语法、重新运行、调整搜索策略
- 最终通过分类搜索找到五篇相关论文
整个过程展现了Skills的自主推理和错误修复能力,大模型会根据Skill描述文件一步步决定执行策略。
Skills生态与资源
目前已有丰富的现成Skills可供使用。通过Skills.sh网站可以搜索到超过4万个Skills,开发者可以按需选用,无需从零编写。这种共享机制大大降低了AI应用的开发门槛。
总结
从技术演进路径来看:Function Call → MCP → Skills,分别解决了"怎么调用"、"调哪里"、"怎么编排复杂任务"三个核心问题。Skills并非全新的技术范式,而是对Function Call的巧妙封装——通过Markdown文件实现提示词的模块化管理和按需加载,让大模型能够处理复杂的多步骤任务,同时保持了良好的可共享性和可维护性。
核心要点
- Skills的本质是对Function Call的封装,通过Markdown文件实现提示词的模块化管理和按需加载
- 技术演进路径为Function Call→MCP→Skills,分别解决怎么调用、调哪里、怎么编排复杂任务三个问题
- Skills由元数据和指令两部分组成,大模型按需加载对应Skill而非一次性接收所有提示词
- Spring AI Alibaba最新版本已内置Skills实现,可对接任意支持Function Call的大模型
- Skills.sh平台已有超过4万个现成Skills可供搜索和共享使用
相关推荐
教程攻略Cursor+Codex双IDE协同:开源项目二开实战方法论
基于实战经验总结的开源项目二次开发完整方法论,详解Cursor+Codex双IDE协同工作流,涵盖二开七环节、MVP验证、AI读源码技巧,帮助开发者三天跑通项目、两周完成业务集成。
教程攻略Cursor多Agent实战:50分钟搭建Next.js全栈博客
使用Cursor IDE多Agent协作模式,50分钟内从零搭建全栈博客。涵盖Next.js、Clerk认证、Supabase数据库集成,详解4个AI Agent分阶段开发流程与关键避坑经验。
教程攻略从零搭建AI软件工厂:Cursor工程师的多Agent协作实战经验
Cursor工程师Eric分享AI软件工厂构建实战:从自动化六层级、护栏设计、并行Agent管理到规模化扩展,详解如何用多Agent协作实现7×24小时高效软件开发。