引言在构建 AI 应用时我们常常听到LLM API、Function Calling、Tools、Skills等概念。它们之间到底是什么关系底层逻辑又是如何运作的本文将从第一性原理出发结合Spring AI的技术实践带你彻底理清这些概念的本质区别与联系。一、底层认知一切始于无状态的 HTTP API首先必须明确一个核心事实对接大模型底层永远是通过 HTTP API 接口进行无状态访问。每一次请求都是独立的大模型本身不记忆任何上下文。我们常说的“对话记忆”、“多轮交互”本质上都是在客户端如 Java 服务侧维护状态通过将历史消息和工具结果重新塞入下一次请求来模拟“有状态”的行为。这个认知是理解所有上层概念的基石。二、Function Calling让模型“伸出援手”Function Calling 的出现打破了纯文本交互的局限。本质大模型不再仅仅返回纯文本而是可以返回结构化的 JSON 指令包含函数名和参数。客户端解析这个 JSON本地调用对应方法然后将执行结果再次发送给大模型最终生成自然语言回复。关键流程开发者将**工具定义名称、描述、参数 Schema**合并到请求中发给大模型。大模型判断是否需要调用工具如需调用则返回tool_calls的 ID 和参数。客户端执行本地方法将结果回传给大模型。大模型根据结果生成最终回答。核心价值大模型通过Function Calling获得了“伸出援手”的能力可以操作外部世界。三、ToolsFunction Calling 的泛化与资源抽象Tools 是 Function Calling 的泛化和扩展。如果说 Function Calling 强调“函数调用”那么 Tools 则更强调**“外部能力接入”**。它不仅仅局限于本地函数还可以是外部 API如查询天气、发送邮件数据库操作如 SQL 查询脚本执行如 Python 脚本文件系统操作在 Spring AI 中Tool注解和ToolCallback接口提供了统一的工具注册与调用机制。Tools 本质仍是函数调用但抽象层次更高它代表了一个可被模型调用的能力单元。四、Skills多工具编排与智能体行为封装Skills技能是站在 Tools 之上的高层封装。它不是单个工具而是多个工具的编排 推理步骤Chain of Thought的组合。4.1 Skill 的底层逻辑核心我在实践中理解的 Skill 底层逻辑是这样的Skill 类似于一个大号的 Tool 说明。一方面它描述了 Skill 适用的场景另一方面它将场景、思考过程、执行脚本等信息发送给大模型同样是通过Function Calling机制实现的。但与普通 Tool 不同的是Skill 内部包含了完整的推理和执行计划。4.2 为什么需要分级处理一个重要原因是适应大模型一次处理 message 的信息量有限的问题。为了解决上下文窗口的限制Skill 通常将信息分为目录摘要和详细内容进行分级多次调用目录摘要即 Skill 的场景描述。第一次全部发给大模型用于匹配。详细内容包括思考过程推理链和执行脚本参数定义。只有在匹配成功后才会在后续轮次中动态拼装发送。4.3 Skill 的典型执行流程三轮交互以我拆解的实现为例Skill 的执行通常分为三轮轮次阶段发送内容模型输出客户端动作第一轮匹配阶段所有 Skill 的名称、简短描述场景决定“哪个 Skill 可能有用”选中目标 Skill第二轮规划阶段选中 Skill 的详细指令Prompt Template思考示例Few-shot生成结构化的执行参数JSON解析参数准备本地执行第三轮执行阶段本地执行脚本Tool方法等待结果回传将执行结果再次发回大模型生成最终自然语言回复注意这不是“一次性发给大模型”而是多轮、动态拼装的过程目的正是为了应对上下文窗口有限的问题。五、一图看懂五者的本质区别与联系5.1 演进关系访问 LLM API基础 ↓ 增加结构化工具体系 ↓ Function Calling原子能力 ↓ 扩展为资源抽象层 ↓ Tools工具泛化 ↓ 引入规划与编排 ↓ Skills智能体行为封装5.2 对比表格维度访问 LLM APIFunction CallingToolsSkills输入输出纯文本 ↔ 纯文本文本 ↔结构化 JSON 指令文本 ↔结构化指令 外部资源文本 ↔文本 多个外部动作 最终回答模型职责仅生成文本生成函数名 参数同 Function Calling但强调资源定位生成执行计划并分步决策客户端职责仅展示文本解析 JSON → 调用本地方法 → 结果回传同左但支持多资源类型状态管理 多轮循环 上下文拼接是否改变模型状态否无状态否无状态但附加了工具定义否无状态否无状态但通过多轮请求模拟有状态复杂度低中中高典型场景知识问答、翻译查天气、发邮件查询数据库、调用第三方 API自动订机票酒店、智能客服全流程六、Spring AI 中的实现映射在Spring AI框架中这些概念的具体对应关系如下概念Spring AI 实现访问 LLM APIChatClient或ChatModel.call(prompt)Function CallingTool注解 FunctionCallback注册ToolsToolCallback接口 ToolExecutionChain可批量注册Skills非内置需自行用ChatClientPromptTemplate 状态机实现⚠️特别注意Spring AI官方未直接提供 Skill 抽象它只提供了 Tools 层。如果你看到“Skill”这个概念通常是在社区扩展或自定义 Service 层实现的。因此在 Spring AI 中实现 Skill本质上就是用 Java 写一个状态机或循环控制器把多个 Tools 的调用串起来并在每次调用前后动态修改 Prompt —— 这正体现了我前面提到的“分级多次调用”的精髓。七、一句话总结LLM API是“嘴巴”Function Calling是“手”Tools是“工具箱”Skills是“大脑指挥手用工具箱完成复杂任务”的整套流程。它们共享无状态的 HTTP 通道但复杂度依次递增上层向下层请求原子能力下层向上层提供执行基础。理解这套演进逻辑是设计和实现高效 AI Agent 的关键。如果你正在 Spring AI 中构建 Skill 能力希望这篇文章能帮你少走弯路。欢迎在评论区交流你的实现思路