[控场AI]
教程攻略· 7 分钟阅读· 3,610 字

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

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功能。

bilibili source

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文件,包含两部分:

  1. 元数据:定义当前Skill的作用(如"网络搜索"、"文件处理")
  2. 指令:详细编排每一步的执行方式,包括调用哪些Tool、执行哪些脚本(Python/JS)等

Skills的工作原理

Skills的核心优势在于按需加载,而非一次性将所有提示词发送给大模型:

  1. 首先将每个Skill的元数据(即作用描述)发送给大模型
  2. 大模型根据用户请求推理出需要哪个Skill
  3. 返回调用CoreSkill的JSON信息,携带Skill名称
  4. 应用程序中的CoreSkill方法根据名称读取对应的Markdown文件
  5. 将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的实现:

  1. 定义Skill Agent Hook:指定Skill文件的根目录路径,框架会自动读取所有Skill的Markdown文件
  2. 定义Shell命令执行Hook:因为Skill可能需要执行Python等脚本语言
  3. 配置Python工具支持:通过RawVM提供的第三方库来执行Python代码

实际演示效果

以"搜索蛋白质折叠预测的最新论文"为例,整个执行流程如下:

  1. 大模型读取对应Skill的Markdown文件
  2. 发现需要执行Python脚本
  3. 自动检测Python环境是否就绪
  4. 运行Python脚本访问arXiv网站搜索论文
  5. 首次搜索结果不理想时,自动推理问题原因
  6. 检查脚本语法、重新运行、调整搜索策略
  7. 最终通过分类搜索找到五篇相关论文

整个过程展现了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可供搜索和共享使用
#AI编程Skills#Function Call原理#MCP协议#子智能体#Spring AI Alibaba#Cursor Skills#AI工作流编排#大模型工具调用
分享:

相关推荐